汇编语言MOVSB、MOVSW和MOVSD指令:将数据到EDI指向的内存


MOVSB、MOVSW 和 MOVSD 指令将数据从 ESI 指向的内存位置复制到 EDI 指向的内存位置。(根据方向标志位的值)这两个寄存器自动地增加或减少:

MOVSB 传送(复制)字节
MOVSW  传送(复制)字
MOVSD 传送(复制)双字

MOVSB、MOVSW 和 MOVSD 可以使用重复前缀。方向标志位决定 ESI 和 EDI 是否增加或减少。增加 / 减少的量如下表所示:

指令  ESI 和 EDI 增加或减少的数值
MOVSB 1
MOVSW 2
MOVSD 4

【示例】复制双字数组,假设现在想从 source 复制 20 个双字整数到 target。数组复制完成后,ESI 和 EDI 将分别指向两个数组范围之外的一个位置(即超出 4 字节):
.data
source DWORD 20 DUP(OFFFFFFFFh)
target DWORD 20 DUP(?)
.code
cld                     ;方向为正向
mov ecx,LENGTHOF source ;设置 REP 计数器
mov esi,OFFSET source   ;ES工指向 source
mov edi,OFFSET target   ;ED工指向 target
rep novsd               ;复制双字