Assembly x86程序集:movsd指令问题

Assembly x86程序集:movsd指令问题,assembly,x86,masm32,fasm,Assembly,X86,Masm32,Fasm,这就是我的问题: 我试图使用scanf(在msvcrt.dll中)在平面汇编程序中输入一个浮点值,然后我编写了一个简单的“scanf程序”,如下所示(在C中): 我误解的是movsd指令。根据这里:它将地址DS:(E)SI处的双字移动到地址ES:(E)DI,但我没有看到任何设置esi,edi,生成的源文件中的movsd有两个参数,但链接中的文档中不应该有。有人能在这里解释一下吗?这是另一条MOVSD指令,它是SSE指令的一部分。这里,它将双精度浮点值从xmm0移动到内存中。我怀疑网页显示的内容少

这就是我的问题:
我试图使用
scanf
(在
msvcrt.dll
中)在
平面汇编程序中输入一个浮点值,然后我编写了一个简单的“scanf程序”,如下所示(在
C
中):


我误解的是
movsd
指令。根据这里:它
将地址DS:(E)SI处的双字移动到地址ES:(E)DI
,但我没有看到任何设置
esi
edi
,生成的源文件中的
movsd
有两个参数,但链接中的文档中不应该有。有人能在这里解释一下吗?

这是另一条MOVSD指令,它是SSE指令的一部分。这里,它将双精度浮点值从xmm0移动到内存中。

我怀疑网页显示的内容少于完整图片

它讨论了
A5
操作码,但也有其他变体,如
F20F
,允许在XMM寄存器和更多任意内存位置之间移动


有关更多详细信息,请参阅。

有两条x86指令同名

  • MOVS/MOVSB/MOVSW/MOVSD/MOVSQ将数据从一个字符串移动到另一个字符串
  • MOVSD-移动标量双精度浮点值
  • 查一下情报

    #include <stdio.h>
    
    int main() {
        float a;
    
        scanf("%f", &a);
        printf("Just input: %f", a);
        return 0;
    }
    
        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