我正在NASM中将小数转换为二进制数字。我已经将整数234存储在变量中,我们将其称为dcml,我想转换为.234。我该怎么办?
我对汇编语言很陌生,因此我尝试使用不同的操作数,例如fild,fld和fst,但似乎没有任何效果,至少对于我一直在尝试的东西而言。教授的示例是杂乱无章的,我不能很好地遵循它,我只想能够了解int-> float的情况。
mov rax,0
mov rax,[num] ; stores the 234
fild qword[num]
fst qword[num]
mov [dcml],rax ; needs to be .234
预期结果,在打印时应为“ .234”,但显示为“ 234”]
只需尝试。
#include <stdio.h>
#include <stdint.h>
double fun ( int64_t, int64_t );
int main ( void )
{
printf("%lf\n",fun(234,1000));
return(0);
}
#include <stdint.h>
double fun ( int64_t x, int64_t y )
{
return((double)x/y);
}
(编译然后反汇编)
您需要转换为double(234.0),然后除以(double)1000.0,以获得(double)0.234
看看cvtsi2sd和divsd