-1

我正在尝试了解 NASM Assembly 中针对 Ubuntu 中 32 位程序的浮点操作。

我有兴趣得到一个数字的平方根。这是我尝试过的:

SECTION .data
num: dd 100
var: dd 0

SECTION .text
global main
main:

fld dword [num]
fsqrt
fstp dword [var]
mov EAX,[var]

我原以为EAX是 10。但 GDB 说它是0x1be24630( 467813936),顺便说一下,我不确定如何转换为更易读的东西 - 但我认为如果结果是 10,它实际上会显示为 10 , 不?

我在这里做错了什么?或者0x1be24630实际上是10?

4

1 回答 1

1

你想要的是FILDFISTP

fild dword [num]   ; load a dword integer and convert it to floating point
fsqrt
fistp dword [var]  ; convert to dword integer and store in var

或者,您可以这样做:

num: dd 100.0  ; note the .0, which makes this a floating point value

fld dword [num]    ; load single-precision floating point value
fsqrt
fistp dword [var]  ; convert to dword integer and store in var
于 2013-10-17T09:22:07.903 回答