x86汇编:movsd指令问题

Bìn*_*yên 3 x86 assembly masm32 fasm

这是我的问题:
我尝试使用scanf(in msvcrt.dll)输入单个浮点值flat assembler然后我写一个简单的"scanf程序",就像这样(in C):

#include <stdio.h>

int main() {
    float a;

    scanf("%f", &a);
    printf("Just input: %f", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后使用cl.exeto /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
Run Code Online (Sandbox Code Playgroud)

我想念的是movsd指导.根据这里:http://faydoc.tripod.com/cpu/movsb.htm它,Move doubleword at address DS:(E)SI to address ES:(E)DI但我没有看到任何设置esi,edi在这里和movsd生成的源文件有两个参数但在文档中的链接是不应该的.有人可以在这解释一下吗?

GJ.*_*GJ. 16

有两个x86指令同名!

  1. MOVS/MOVSB/MOVSW/MOVSD/MOVSQ-将数据从字符串移动到字符串
  2. MOVSD -Move标量双精度浮点值

检查英特尔数据表.


pax*_*blo 5

我怀疑网页的表现不如全貌.

它讨论了A5操作码,但还有其他变体,例如F2 0F允许XMM寄存器和更多任意存储器位置之间的移动.

请参阅此处了解更多详情.