我有两个asm文件,一个是conversion.asm,另一个是main.asm,我在main.asm中使用conversion.asm。我使用浮点堆栈,但没有得到正确的输出。
main.asm
Include conversion.asm
.386
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
Cel DD 25
Faren DD ?
.code
main PROC
push dword ptr Cel
fld dword ptr [esp]
call C2F
fstp dword ptr [Faren]
mov ebx, [Faren]
INVOKE ExitProcess, ebx
main ENDP
END main
conversion.asm
.model flat, stdcall
ExitProcess PROTO, dwExitCode:DWORD
.stack 4096
.data
Cfirst DD 2
Csecond DD 1
common DD 32
C2F PROC
push dword ptr Cfirst
fld dword ptr [esp]
add esp,4
fmulp
sub esp,4
push dword ptr Csecond
fld dword ptr [esp]
add esp,4
fdivp
sub esp,4
push dword ptr common
fld dword ptr [esp]
add esp,4
faddp
sub esp,4
RET
C2F ENDP
请你帮帮我
1条答案
按热度按时间xqk2d5yq1#
fmul、fdiv、fadd直接在浮动堆栈中编辑数据,因此直接在浮动堆栈中执行操作,而不是从堆栈拉到寄存器。
conversion.asm中浮点堆栈的正确用法:
对于阅读和写入浮点数,我使用了Irvine库,它使用浮点堆栈: