16-Bit Parameter vom Stack holen und in 2 Register packen
Hi, im Zuge meiner Klausurvorbereitung, hänge ich an einer Übungsaufgabe:
"Einem Unterprogramm sollen 2 Parameter über den Stack übergeben werden:
A: 8-Bit
B: 16-Bit
Ergänzen Sie das untenstehende Programm derart, dass der Parameter A in r16, der Parameter B in r24:r25 geladen werden"
Hier der vorgegebene code:
Code:
.cseg
lds r16, A
push r16
lds r16, B+0
push r16
lds r16, B+1
push r16
rcall Unterprogramm
.dseg
A: .BYTE 1
B: .BYTE 2
.cseg
Unterprogramm:
; Hier nun mein code den ich überlegt hatte
pop r16 ;r16 von stack holen, müsste B+1 sein, also der HIGH-BYTE von B
mov r24, r16
pop r16 ;nächsten stack-Inhalt holen, müsste B+0 sein, also LOW-BYTE von B
mov r25, r16
pop r16 ;letzten Teil vom stack holen, müsste A sein, somit fertig
ret ;return
Kann es so einfach sein ?? Irgendwie sieht mir das nicht richtig aus. Muss ich irgendwie dem System noch sagen dass in r24 die HIGH-bytes sein sollen und die dazugehörigen LOW-bytes in r25 ?
Oder muss ich bei späterer Verwendung selber mich "erinnern" dass r24 und r25 gemeinsam eine 16-Bit-Wert darstellen ?
Sorry falls ich so blöd frage, aber alle haben doch ein gewisses Problem mit der Didaktik unseres Dozenten, so dass so (anscheinend) einfache Dinge wie der Umgang mit 16-Bit-Werten in 8-Bit-Registern nicht grad detailliert durchgenommen wurde.
Hoffe auf Hilfe hier
Gruss,
Lalas
Re: 16-Bit Parameter vom Stack holen und in 2 Register packe
Nein. Du vergisst, dass "rcall Unterprogramm" die Rücksprungadresse für das "ret" auf den Stack packt.
Also überlegt nochmal. ;-)