Я пытаюсь передать 3 параметра процедуре, добавить их и вернуть их в налоговый регистр в MASM. Однако результат отключен со случайным огромным числом. Я пытаюсь использовать соглашение о вызове стиля C, где я передаю 3 переменные функции. Что я делаю не так? Вот мой код:Передача параметра через стек в процедуру в 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
Благодарим вас за ответ. Когда я вызываю «вызов PutDDec», результат не является добавлением. Вы знаете причину этого? Спасибо – user190494
Мы не знаем, как 'PutDDec' ожидает аргумент, может быть, он тоже хочет этого в стеке. Добавление 'mov [esp], eax' до' call PutDDec' может стоить попробовать. – Jester
PutDDec печатает десятичную версию регистра EAX – user190494