【发布时间】:2017-02-11 22:09:54
【问题描述】:
我有这段代码假设添加两个数字,一个浮点数(3.25)和一个整数(2)。
已编辑:
extern _printf, _scanf
global _main
section .bss
num1: resb 4
section .data
format_num: db "%f", 10, 0
section .text
_main:
mov dword [num1], __float32__(3.25)
add num1, 2
sub esp, 8
fld dword [num1]
mov dword [num1], eax
fstp qword [esp]
push format_num
call _printf
add esp, 12
ret
我得到的输出是:
test.asm:11:error: 操作码和操作数的组合无效
我期望的输出是:
5.250000
【问题讨论】:
-
在存储任何内容之前从 num1 加载 0,然后将该 0 放在堆栈上。顺便说一句,您不必对浮点加载和存储执行此操作。
-
@harold 我编辑了问题,谢谢,我还有一个错误。
-
好的,现在你正在尝试添加一个常量
-
@harold 是的,你是对的。
-
即使你解决了这个问题,它也不会给你 5.25,因为你正在重新解释将 float 转换为 int,然后进行普通的位向量加法。所以你会得到 0x40500002,解释为 3.250000476837158。