我对MASM和汇编非常陌生,我正在编写我的第一个程序。我很难弄清楚如何将两个变量相加并输出结果。到目前为止,这是我程序的一部分:
INCLUDE Irvine32.inc
.data
firstNum DWORD ?
secondNum DWORD ?
sum DWORD ?
.code
main PROC
;Get Data
call ReadInt
mov firstNum, eax
call ReadInt
mov secondNum, ebx
;Calculate Sum
mov eax, firstNum
mov ebx, secondNum
add eax, ebx
mov sum, eax
;Display Results
mov eax, sum
call WriteDec
当我运行这个代码时,它会输出一些长数字"333420163",而不是总和应该是7。我对这个还很陌生,所以如果这是一个简单的答案,我很抱歉哈哈。我做错了什么?
在大多数x86 ABI上,函数的返回值通常在EAX
寄存器中,在返回值为64位而不是32位的情况下,高32位将在EDX
寄存器中。
您的说明:
call ReadInt
mov secondNum, ebx
没有从对ReadInt
的第二次调用中获取返回值,因为它在EBX
中是而不是;它在EAX
中。
将其替换为mov secondNum, eax
,因为这将把ReadInt
的实际返回值放入secondNum
。