我正在查看Intel-x86程序跟踪,并遇到了此说明
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:
我知道
REP MOVS
使MOV指令运行ECX寄存器中的值指定的次数,在本例中为0x2b。
我知道
BYTE PTR
在确定信息的大小,在这种情况下只是一个字节。
我知道
ES:[EDI]
告诉将BYTE PTR DS:中的所有内容移至EDI指向的地址。
我不知道逗号后面的部分是什么。
BYTE PTR DS:
问题:
PTR指令为什么起作用?为什么不只是
REP MOVS BYTE ES:[EDI]. BYTE DS:
ES和DS分别对应什么?
谢谢
最佳答案
指令似乎还没有结束。我今天刚在OllyDBG中碰到了该指令,并且我可以调整指令列的大小以显示其余指令。
00499B3A |. F3:A4 |REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
现在我们知道了完整的指令,但是我仍然不知道该指令的作用。因此,我从here中取出了Intel指令集参考手册,并搜索了操作码
F3:A4
在手册中,该操作码描述如下:
将(E)CX字节从DS:[(E)SI]移到ES:[(E)DI]。