2016-10-16 5 views
0

In meinem Programm versuche ich, zwischen 2 referenzierten Werten zu wechseln, aber es scheint, ich habe ein Problem bei der Dereferenzierung des ersten Parameters aus dem Stapel ohne Verwendung SI-Register.Assembly 8086: Parameterwerte durch Referenz tauschen

Kann mir bitte jemand helfen? Sorry für Misknowladge, ich bin nur ein Neuling.

jmp main 

toSwap1  db 'a' 
toSwap2  db 'b' 

main: 


lea si,toSwap1 
push si 
lea si,toSwap2 
push si 
call swap 

mov ah,0 
int 16 
ret 




swap proc 
push bp     
mov bp,sp 

mov si,bp+4 ;second param address 
mov ax,[si] ;second param value 


mov bx,[bp+6] ;address of firstparam 
mov dx,ds:[bx] ;first param value 


mov sp,bp 
pop bp  


retn 4 ;takes 2 parameters 

swap endp 
+0

Was Sie getan haben, war nur die beiden Werte zu laden, vergessen Sie, sie wieder in den Speicher zu schreiben. Nicht sicher, was dein Problem mit "si" ist. – Jester

+0

@jester Derzeit ist mein Problem den Wert des zweiten Parameters dereferenzieren, was mache ich falsch? –

+0

Soweit ich das beurteilen kann, ist der Code in Ordnung, abgesehen von fehlenden Klammern um '[bp + 4]'. Was Sie brauchen, ist das Ergebnis zurückzuschreiben, das Sie vermissen 'mov [si], dx; mov [bx], Axt ". – Jester

Antwort

0

Nach call swap müssen Sie irgendwie Ausgang zum Betriebssystem oder auch die CPU gehen, um Ihre Swap-Funktion, mit katastrophalen Ergebnissen erneut auszuführen.

Unter der Annahme eines 16-Bit-Speicher-Modell und unter der Annahme, dass Sie wollen, was tauschen ist Bytes, (die Beurteilung durch die db 'a' und db 'b'), was Sie in Ihrem swap Funktion tun möchte, ist so etwas wie dieses:

Für zukünftige Referenz: "Es scheint, ich habe ein Problem" ist keine angemessene Beschreibung eines Problems. Versuchen Sie, a) genau das zu erklären, was Sie erwartet haben, und b) genau, was stattdessen passiert.

+0

Sorry, aber Ihre Lösung scheint nicht zu funktionieren, –

+0

Und danke an den Kommentar, bearbeitet. –

+0

Nun, ich schrieb "so etwas". Sie müssen es möglicherweise ein wenig zwicken. Zum Beispiel scheinen Sie davon auszugehen, dass Ihre Parameter bei bp + 4 und bp + 6 liegen, also verwende ich die gleichen Offsets, ich weiß nicht mehr genau, ob dies die korrekten Offsets sind. Aber auf jeden Fall ist es keine Magie, du solltest verstehen, wie es funktioniert. Ich gebe dir die richtige Richtung, um voranzugehen. –

Verwandte Themen