Womit ist ERG/ZAEHL initialisiert?
ADDWF PCL,1 = Wert aus W zu PCL (Program Counter LOW) addieren,
wird in Tabellen verwendet.
RETLW X = "Return with Literal in W", Laden des Wertes X in W
und Sprung zur letzten Adresse, die am Stack liegt (Beenden der
Subroutine)
RLF = "Rotate LEFT file", Register nach Links shiften (hinausgeschobenes
Bit kommt ins Carry-Flag, das "alte" Carry Flag kommt an die freie
Position...
MOVF X,0 = Das Register X in W laden
MOVF X,1 = Das Register X in X laden (in sich selbst laden, ergibt nur
einen
Sinn um Flags zu setzen)
DECFSZ X = "Decrement File and Skip if ZERO" = Register X um 1
vermindern.
Sollte X null werden, den darauffolgenden Befehl als NOP behandeln
(nicht ausfuehren)
END = Kein Assembler Befehl, sondern nur die MPASM Endmarkierung, die
dein Professor falsch gesetzt hat... dieses Programm kann also nicht
funktionieren, weil UP darunter steht.
1. Iteration:
W = ZAEHL
*** NOP AUS SUBROUTINE ***
W = W
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP
2. Iteration:
W <- ZAEHL
*** RETLW 3 AUS SUBROUTINE ***
W = 3
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP
3. Iteration:
W <- ZAEHL
*** RETLW 2 AUS SUBROUTINE ***
W = 2
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP
4. Iteration:
W <- ZAEHL
*** RETLW 1 AUS SUBROUTINE ***
W = 1
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP