これは私の問題です: (in ) を使用して単一の浮動小数点値を入力
しようとしてから、 (in )のような単純な「scanf プログラム」を作成します。scanf
msvcrt.dll
flat assembler
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
設定はありません。ここと生成されたソースファイルには2つのパラメーターがありますが、リンク内のドキュメントではそうすべきではありません。誰かがここで私を説明できますか?esi
edi
movsd