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,取决于数据长度