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
|