X86汇编指令movsb、movsw、movsd等简介
指令 | 说明 |
---|---|
movsb、movsw、movsd | 传送字符串数据:将esi寻址的内存数据复制到edi寻址的内存位置, 常和重复指令配合使用 |
cmpsb、cmpsw、cmpsd | 比较字符串:比较分别由esi和edi寻址的内存数据 |
scasb、scasw、scasd | 扫描字符串:比较累加器(AL、AX、EAX)与EDI寻址的内存数据 |
stosb、stosw、stosd | 保存字符串数据:将累加器(AL、AX、EAX)内容保存到edi寻址的内存位置 |
lodsb、lodsw、lodsd | 将字符串加载到累加器:将ESI寻址的内存数据加载到累加器 |
-
movsb指令将esi的值按照字节(byte)为单位将数据传送到edi的内存地址上。 当DF =0时ESI和EDI的值增加1,DF=1时ESI和EDI的值减少1
; 代码示例 .386 .model flat, stdcall .stack 4096 ExitProcess PROTO, dwExitCode:DWORD Include Irvine32.inc ; .data str1 byte "abc", 0 ;定义字符串str1 str2 byte 3 dup(?), 0 ;定义字符串str2 .code main PROC mov esi, offset str1 ; 将str1的首地址赋值给esi mov edi, offset str2 ; 将str2的首地址赋值给edi movsb ; 将esi地址指向的值以字节为单位赋值给edi指向的内存地址空间, ; 在当前例子就是将 str1中的第一个字符传送到str2的首地址, 执行完指令之后 esi的值+1, edi的值+1 ; 为什么是+1而不是-1, 原因是标志寄存器中的DF位的值为0,表示地址由低到高 std ; 将DF位置为1, 表示地址由高到低 movsb ; 执行movsb, 将 str1中的第二个字符b传送到str2的第二个地址, 执行完指令之后 esi的值-1, edi的值-1 call Crlf exit main ENDP END main
-
movsw指令将esi的值按照字(word)为单位将数据传送到edi的内存地址上。 当DF =0