【发布时间】:2017-06-30 07:05:22
【问题描述】:
我有这段代码应该减去两个数字,一个浮点数 (10.25) 和一个整数 (15):
extern _printf
global _main
section .bss
num1: resb 4
num2: resb 4
section .data
format_number: db "%f", 10, 0
section .text
_main:
mov dword [num1], 15
mov dword [num2], __float32__(10.25)
sub esp, 8
fild dword [num2]
fsub dword [num1]
fstp qword [esp]
push format_number
call _printf
add esp, 12
ret
我得到的输出是:
1092878336.000000
我期望的输出是:
-4.750000
如何得到我期望的结果?
【问题讨论】:
-
您正在使用
fild加载您已经作为浮点数存储在内存中的num2。您可能一直在寻找类似 @987654324@fld dword [num2]fisub dword [num1]fstp qword [esp]的东西。 FISUB 将 [num1] 处的整数值转换为扩展精度浮点数,然后从已经包含 10.25 的 FPU 堆栈的顶部减去该值 -
@MichaelPetch 非常感谢,我不知道
fisub。我会阅读你在上一个问题中告诉我的教程。
标签: windows gcc assembly x86 nasm