Sprünge

Sprünge kontrollieren den Programmablauf. Ohne sie könnte ein Programm nur von oben
nach unten laufen. Das wäre nutzlos.

Nano hat drei grundsätzliche Sprungbefehle. Du kennst schon einen: "jmp_l".

    jmp         label;                 springt zur Sprungmarke

    jsr         label;                 springt zum Unterprogramm
    rts;                               kehrt vom Unterprogramm zurück

    jmp_l       L, label;              springt zur Sprungmarke, wenn "L" wahr (1) ist
    jsr_l       L, label;              springt zum Unterprogramm, wenn "L" wahr (1) ist
    
Um Schleifen zu beschleunigen, habe ich zwei Befehle in einen kombiniert:
    eq_jmp_l    L1, L2, label;         springt zur Sprungmarke, wenn "L1" gleich "L2" ist
    neq_jmp_l   L1, L2, label;                                  ungleich
    gr_jmp_l    L1, L2, label;                                  grösser
    ls_jmp_l    L1, L2, label;                                  kleiner
    greq_jmp_l  L1, L2, label;                                  grösser oder gleich
    lseq_jmp_l  L1, L2, label;                                  kleiner oder gleich

    eq_jsr_l    L1, L2, label;         springt zum Unterprogramm, wenn "L1" gleich "L2" ist
    neq_jsr_l   L1, L2, label;                                    siehe oben!
    gr_jsr_l    L1, L2, label;
    ls_jsr_l    L1, L2, label;
    greq_jsr_l  L1, L2, label;
    lseq_jsr_l  L1, L2, label;
    
Siehe auch: Schleifen

Das folgende Beispiel zeigt wie man den "jsr" Befehl verwendet:

        mul.na

     1| push_i     33, L0;
     2| push_i     17, L1;
     3|
     4| jsr        multiply;           springe zu Zeile "11"
     5| print_l    L2;
     6| push_i	   1, L3;
     7| print_n    L3;
     8| push_i     0, L3;
     9| exit       L3;
    10|
    11| lab multiply;
    12|     mul_l      L0, L1, L2;
    13|     rts;                       springe zurück zu Zeile "5"
   
Prev: Schleifen | Next: Felder