MOVSB、MOVSW 和 MOVSD 指令将数据从 ESI 指向的内存位置复制到 EDI 指向的内存位置。(根据方向标志位的值)这两个寄存器自动地增加或减少:
cld 设置方向标志位DF为0, 每次复制完, esi, edi自动增加, 指向下一个地址.
std 设置方向标志位DF为1, 每次复制完, esi, edi自动减少, 指向下一个地址.
至于esi, edi, 增加或减少多少个字节, 是根据 movsb/movsw/movsd最后面哪个字母决定.
movsb 以字节形式复制, 每次复制一个字节大小, esi/edi自动增加或减少1个字节
movsw 以字形式复制,每次复制一个字(2个字节)大小, esi/edi自动增加或减少2个字节
movsd 以双字形式复制, 每次复制2个字(4个字节)带下, esi/edi自动增加或减少4个字节
这几条命令一般都是配合 rep (repeat) 指令来使用, 表示重复复制 rep movs byte ptr es:[edi], byte ptr ds:[esi] 简写为: rep movsb rep movs word ptr es:[edi], word ptr ds:[esi] 简写为: rep movsw rep movs dword ptr es:[edi], dword ptr ds:[esi] 简写为: rep movsd
至于复制多少次, 是由ecx决定的.
2.STOS指令:将Al/AX/EAX的值存储到[EDI]指定的内存单元
STOS BYTE PTR ES:[EDI] 简写为STOSB
STOS WORD PTR ES:[EDI] 简写为STOSW
STOS DWORD PTR ES:[EDI]简写为STOSD
具体是AL/AX/EAX那就要看具体的宽度是多少,指令执行后, edi的值也会增加或减少对应字节数, 这取决于 方向标志位DF的值, DF=0, edi增加, DF=1, edi减少, 和movs指令同理.
STOS指令也会配合REP来使用.
如果觉得《常用汇编指令 rep movs / rep stos》对你有帮助,请点赞、收藏,并留下你的观点哦!