MOVSB、MOVSW和MOVSD指令
MOVSB、MOVSW、MOVSD指令将数据从ESI指向的内存位置复制到EDI指向的内存位置
指令 | 功能 |
---|---|
MOVSB | 传送(复制)字节 |
MOVSW | 传送(复制)字 |
MOVSD | 传送(复制)双字 |
指令 | ESI 和 EDI增加或减少的数值 |
---|---|
MOVSB | 1 |
MOVSW | 2 |
MOVSD | 4 |
使用重复前缀:这些指令只能处理一个或一对内存数值。如果加上重复前缀,指令就可以以ECX作计数器重复执行,下面为可用的重复前缀:
指令 | 功能 |
---|---|
REP | ECX > 0时重复 |
REPZ、REPE | 零标志位置1 且 ECX>0时重复 |
REPNZ、REPNE | 零标志位清零 且 ECX>0时重复 |
方向标志位:方向标志位的状态,会影响ESI和EDI的增加或减少。用CLD和STD指令来修改方向标志位:
- CLD 方向标志位清零(正向)
- STD 方向标志位置1 (反向)
方向标志位的值 | 对 ESI 和 EDI 的影响 | 地址顺序 |
---|---|---|
0 | 增加 | 低到高 |
1 | 减少 | 高到低 |
示例:假设现在想从 源地址复制20个双字整数到 目标地址:
cld ;设置方向为正向
mov ecx, 20 ;设置rep重复次数
mov esi, 源地址
mov edi, 目标地址
rep movsb ;复制双字