mov

    mov是用来写入或读取数据的指令

    写入寄存器
    mov可以将一个数据写入寄存器
    mov eax,1 将1写入eax

    可以将一个寄存器的数据写入另一个寄存器
    mov eax,ebx 将ebx的数据写入eax

    写入内存(只能写入已申请内存)
    可以将一个数据写入内存
    mov byte ptr ds:[0x00000000],1 将1写入宽度为byte编号为0x00000000的内存中
    将数据写入内存必须明确数据的宽度

    可以读取内存中的数据
    mov eax,byte ptr ds:[0x00000000] 将内存编号为0x00000000中的数据写入eax

    当写入或读取内存数据时,[ ]中不一定是具体地址,可以是其他形式。

    可以是寄存器
    mov byte ptr ds:[eax],1 将1写入地址编号为eax中存储数据的内存中
    mov ebx byte ptr ds:[eax] 将地址编号为eax中存储数据的内存中的数据写入ebx中

    可以是寄存器+一个数
    mov byte ptr ds:[eax+1],1 将1写入地址编号为eax+1中存储数据的内存中
    mov ebx byte ptr ds:[eax+1] 将地址编号为eax+1中存储数据的内存中的数据写入ebx中

    可以是寄存器+寄存器X{1.2.4.8}
    mov byte ptr ds:[eax+ecx2],1 将1写入地址编号为(eax中存储数据+ecx中存储数据2)的内存中
    mov ebx byte ptr ds:[eax+ecx2] 将地址编号为(eax中存储数据+ecx中存储数据2)的内存中的数据写入ebx中

    可以是寄存器+寄存器X{1.2.4.8}+一个数
    mov byte ptr ds:[eax+ecx2+1],1 将1写入地址编号为(eax中存储数据+ecx中存储数据2+1)的内存中
    mov ebx byte ptr ds:[eax+ecx2+1] 将地址编号为(eax中存储数据+ecx中存储数据2+1)的内存中的数据写入ebx中

    movs

    专用于内存与内存读写的mov指令
    movs指令在声明数据宽度时可以简写
    Byte movsb
    word movsw
    dword movsd

    movs指令执行后ESI与EDI的值会发生改变
    如果EFL的DF位为0,ESI和EDI会增加1或2或4,取决于数据长度。
    如果EFL的DF位为1,ESI和EDI会减少1或2或4,取决于数据长度