我在idiv dword ptr [NINE]
行一直得到一个“整数溢出”。有没有其他方法可以重写它,让我的MASM正常运行,并在内存中给予我59°F的答案?
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
CelsiusTemperature DWORD 32
.code
; Function to convert Celsius to Fahrenheit
; Input: ecx - Celsius temperature
; Output: eax - Fahrenheit temperature
_convertC2F PROC
push ebp ; save the base pointer
mov ebp, esp ; set up the new base pointer
sub esp, 4 ; reserve space for the return value
mov eax, ecx ; move the Celsius temperature to eax
imul eax, 9 ; multiply by 9
idiv dword ptr [NINE] ; divide by 5
add eax, 32 ; add 32 to get the Fahrenheit temperature
mov dword ptr [ebp-4], eax ; store the Fahrenheit temperature on the stack
mov eax, [ebp-4] ; move the Fahrenheit temperature to eax
mov esp, ebp ; restore the stack pointer
pop ebp ; restore the base pointer
ret ; return from the function
_convertC2F ENDP
main PROC
mov ecx, CelsiusTemperature ; set the Celsius temperature to the value in data
call _convertC2F ; call the function to convert to Fahrenheit
; eax now contains the Fahrenheit temperature
; do something with it here
INVOKE ExitProcess, 0 ; exit the program
main ENDP
NINE DWORD 5
END main
1条答案
按热度按时间ep6jt1vc1#
将值5赋给名为 NINE(9)的变量是很奇怪的。
另外,为什么不把这个变量放在
.data
部分中,在那里已经有一个 CelsiusTemperature 变量?您报告的错误之所以存在,是因为
idiv dword ptr [NINE]
指令划分了寄存器组合EDX:EAX,而您忘记了事先初始化EDX。因为您使用寄存器参数(ECX)调用 _convertC2F 函数,并在EAX中返回结果,所以不需要在函数中包含那些序言/temp/尾声代码。