Hallo, in einer Aufgabe aus der Schule, wird in eimen UP 3 x der Befehl RETLW 03 RETLW 02 RETLW 01 angegeben. Loop MOVF Zaehl,0 Call UP ADDWF ERG 1 RLF ERG 1 DECFSZ Zaehl 1 Goto Loop End UP ADDWF PC 1 NOP RETLW 03 RETLW 02 RETLW 01 Wie funktioniert das Programm?
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
Hallo Sergey, danke für Deine Anwort, hast mir sehr geholfen. MfG Reinhard
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.