MASM: как передать значение по ссылке

Я пытаюсь передать 2 переменные в процедуру, сложить их вместе, вернуть и распечатать результат. Я использую фрейм стека. Я не получаю правильный результат, скорее большое неправильное число. Спасибо.

        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

person user190494    schedule 03.05.2016    source источник
comment
Работает ли PutDDec, если просто загрузить eax? Вы использовали отладчик для проверки значения в eax?   -  person Jester    schedule 04.05.2016
comment
Да, например, `mov eax, 10` отлично работает   -  person user190494    schedule 04.05.2016
comment
push 10; pop eax тоже нормально работает? Используйте отладчик и/или проведите фактическую дизассемблирование вашего кода.   -  person Jester    schedule 04.05.2016
comment
В настоящее время нет отладчика для работы. Интересно... нажмите 10; pop eax не работает, а нажимает 10; поп топор. Я думаю, что есть проблема с отправкой в ​​виде слова и получением в виде двойного слова   -  person user190494    schedule 04.05.2016
comment
Похоже, вы находитесь в 16-битном режиме. Если ваша среда 32-битная, переключите ассемблер в 32-битный режим. Если ваша среда 16-битная, то, конечно, вам нужно использовать 16-битный код.   -  person Jester    schedule 04.05.2016
comment
Классные бобы, ти. Я использую dosbox, так что, вероятно, проблема в нем.   -  person user190494    schedule 04.05.2016


Ответы (1)


Очистите регистр EAX перед помещением данных в стек.

    mov  eax,0
    push 10
    push 20

    call Test12
person Jeff    schedule 04.05.2016
comment
Это не может решить проблему! mov eax,0 никоим образом не влияет на последующие push 10 и push 20. - person Sep Roland; 08.05.2016