プロシージャに3つのパラメータを渡して追加し、MASMの税務登録に戻そうとしています。しかし、結果はランダムな巨大な数でオフになっています。私は3つの変数を関数に渡しているCスタイルの呼び出し規約を使用しようとしています。私は間違って何をしていますか?ここに私のコードは次のとおりです。あなたのサブルーチン本体でMASMのプロシージャにスタックを介してパラメータを渡す
INCLUDE PCMAC.INC
.MODEL SMALL
.586
.STACK 100h
.DATA
.CODE
EXTRN GetDec :NEAR, PutDDec : NEAR, PutHex : NEAR
Main PROC
_Begin
push 10
push 20
push 30
call Test1
call PutDDec
add esp, 12
_Exit
Main ENDP
Test1 PROC
; *** Standard subroutine prologue ***
push ebp
mov ebp, esp
sub esp, 4
push edi
push esi
; *** Subroutine Body ***
mov eax, [ebp+8] ; parameter 1/character
mov esi, [ebp+12] ; parameter 2/width
mov edi, [ebp+16] ; parameter 3/height
mov [ebp-4], edi
add [ebp-4], esi
add eax, [ebp-8]
add eax, [ebp-4]
; *** Standard subroutine epilogue ***
pop esi ; Recover register values
pop edi
mov esp, ebp ; Deallocate local variables
pop ebp ; Restore the caller’s base pointer value
ret
Test1 ENDP
End Main
ありがとうございます。私が "Call PutDDec"と呼ぶと、その結果は加算されません。あなたはこの理由を知っていますか?ありがとう – user190494
'PutDDec'がどのように引数を期待しているのか分かりません。 'Call PutDDec'の前に' mov [esp]、eax'を追加すると試してみる価値があります。 – Jester
PutDDecはEAXレジスタの小数点版を出力します – user190494