05-loop
(C)stachan 08.02.2024
Task 5 :: Loop

Ausgangspunkt ist Ihr fertiges Programm aus Task 4:
Finden Sie alle Code-Wiederholungen und ersetzen Sie diese durch insgesamt DREI Schleifen!
- Schleife 1: Rot 5T
- Ohne Loop: Rot und gelb 1T
- Schleife 2: Grün 4T
- Schleife 3:
- Alle aus 1T
- Grün 1T
- Alle aus 1T
- Grün 1T
- Ohne Loop: Gelb 1T
Betrachten Sie die Abbildung. Die optische Ausgabe soll sich nicht von der in Task 4 unterscheiden.
Beachten Sie, dass es auch Teile im Programm gibt, die keine Schleife benötigen.
; Beipielcode für eine Schleife
; Denken Sie an die FOR-Schleife in Java: for(i=0;i<=3;i++)
main: ; muss am Beginn stehen
mov B0, 0 ; entspricht i=0, Counter
mov B1, 3 ; entspricht i<=3
loop: ; hier beginnt die Schleife, das Label dient als Sprungmarke
Pause 60000 ; an dieser Stelle stehen alle Befehle, die während eines
; Schleifendurchlaufs ausgeführt werden sollen, kann auch
; mehrzeilig sein!!!
inc B0 ; entspricht i++, Counter wird inkrementiert
debug B0 ; optional: Ausgabe im Debugger
cmp B0, B1 ; compare: der Inhalt der Register B0 und B1 wird verglichen
JZ foo ; jump if zero: wenn der Unterschied gleich 0 ist, verlasse
; die Schleife und springe zu foo
jmp loop ; jump: sonst springe zu loop (neuer Durchlauf)
foo:
pause 60000 ; Programmcode nach Bedarf, hier nur eine Pause
jmp main ; springe zu main
END ; muss am Ende stehen
; Um die Schleife leichter zu verstehen, starten sie den Debugger und gehen Sie
; das Programm Step by Step durch.
; Im Tab "Registers" können Sie die Inhalte der benutzen Register kontrollieren.
Starting point is your finished programme from Task 4:
Find all code repetitions and replace them with a total of THREE loops!
- Loop 1: Red 5T
- Without loop: Red and yellow 1T
- Loop 2: Green 4T
- Loop 3:
- All off 1T
- Green 1T
- All from 1T
- Green 1T
- Without loop: Yellow 1T
Refer to the image. The visual output should not differ from that in Task 4.
Please note that there are also parts of the program that do not require a loop.
; Example code for a loop
; Remember the FOR loop in Java: for(i=0;i<=3;i++)
main: ; must be at the beginning
MOV B0, 0 ; corresponds to i=0, counter
MOV B1, 3 ; corresponds to i<=3
loop: ; here the loop begins, the label serves as a jump marker
PAUSE 60000 ; at this point are all commands that are to be executed
; during a loop pass, can also be multiline!
INC B0 ; corresponds to i++, counter is incremented
DEBUG B0 ; optional: output in debugger
CMP B0, B1 ; compare: the contents of registers B0 and B1 are compared
JZ foo ; jump if zero: if the difference is 0, leave the loop and
; jump to foo
JMP loop ; jump: otherwise jump to loop (new pass)
foo:
PAUSE 60000 ; program code as needed, here only a pause
JMP main ; jump to main
END ; must be at the end
; To understand the loop, start the debugger and go through the program step by step.
; In the tab "Registers" you can control the contents of the used registers.