【发布时间】:2013-01-19 12:08:37
【问题描述】:
这是我的问题:
我尝试使用scanf(在msvcrt.dll)在flat assembler 中输入一个浮点值,然后我编写了一个像这样的简单“scanf 程序”(在C):
#include <stdio.h>
int main() {
float a;
scanf("%f", &a);
printf("Just input: %f", a);
return 0;
}
然后使用cl.exe 编译带有/FA 参数生成汇编文件如下:
lea eax, DWORD PTR _a$[ebp]
push eax
push OFFSET $SG2935
call _scanf
add esp, 8
; Line 8
cvtss2sd xmm0, DWORD PTR _a$[ebp]
sub esp, 8
movsd QWORD PTR [esp], xmm0
push OFFSET $SG2936
call _printf
add esp, 12 ; 0000000cH
我误解的是movsd 指令。根据这里:http://faydoc.tripod.com/cpu/movsb.htm 它Move doubleword at address DS:(E)SI to address ES:(E)DI 但我在这里没有看到任何设置esi、edi 并且生成的源文件中的movsd 有两个参数,但在链接中的文档中它不应该。有人可以在这里解释一下吗?
【问题讨论】: