(C)stachan 08.02.2024

Task 5 :: Loop

ampel

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.