这是我的问题:
我试图用scanf
(在msvcrt.dll
)输入在flat assembler
一个浮点值,那么我写一个简单的“scanf的节目”这样的(在C
):x86汇编:MOVSD指令问题
#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
在生成的源文件有两个参数,但在文件中的链接是它不应该。有人可以在这里解释我吗?
谢谢!我知道了 :) –