2016-05-03 15 views
0

Ich versuche, 2 Variablen an eine Prozedur zu übergeben, sie zusammen zu addieren und das Ergebnis zurückzugeben und zu drucken. Ich benutze den Stapelrahmen. Ich bekomme nicht das richtige Ergebnis, sondern eine große falsche Zahl. Vielen Dank.MASM: Wie Wert über Referenz übergeben wird

 INCLUDE PCMAC.INC 


.MODEL SMALL 
.586 
.STACK 100h 
.DATA 
sum DWORD ? 

.CODE 
     EXTRN GetDec :NEAR, PutDDec : NEAR, PutHex : NEAR 
Main PROC 
     _Begin 
     push 10 
     push 20 

     call Test12 

     ; Print result 
     call PutDDec 

     _Exit 
Main ENDP 
Test12 PROC 
    push ebp 
    mov ebp, esp 

    mov eax, [ebp+12] ; 
    add eax, [ebp+8] ; 

    pop ebp 
    ret 8 
Test12 ENDP 
End Main 
+0

Funktioniert 'PutDDec', wenn Sie nur' eax' laden? Haben Sie einen Debugger verwendet, um den Wert in 'eax' zu prüfen? – Jester

+0

Ja 'mov eax, 10' funktioniert gut zum Beispiel – user190494

+0

Tut' push 10; pop eax' funktioniert auch gut? Verwenden Sie einen Debugger und/oder stellen Sie die tatsächliche Disassemblierung Ihres Codes bereit. – Jester

Antwort

-1

Löschen Sie das EAX-Register, bevor Sie Ihre Daten in den Stapel schieben.

mov eax,0 
    push 10 
    push 20 

    call Test12 
+1

Dies kann das Problem nicht lösen! 'mov eax, 0' hat keinen Einfluss auf die nachfolgenden' push10' und 'push20'. –