在 x86 汇编中什么时候应该使用 MOVS 而不是 MOV?

Mik*_*ylz 5 optimization x86 assembly mov

我在《英特尔 64 位和 32 位架构软件开发人员手册》中遇到过这两条指令,我只是想知道两者之间的区别是什么,以及何时应该使用其中一个而不是另一个。

小智 3

MOVS指令通常会多次使用,因为它会自动递增或递减edi和的值esi。递增或递减分别取决于方向标志是否被清除或设置。这可以与前缀一起使用,REP以使其通过递减重复,ecx直到达到零。

根据我读过的一些文档,指令的历史movs是一次移动一个字节的字符串,尽管您可以让它移动更大的项目(特别是单词和四字)。它会自动更改ediesi更改正确的数量,但它仍然只会减ecx一,因此,例如,如果您要移动 unicode 字符串,请务必小心。

http://x86.renejeschke.de/html/file_module_x86_id_279.html的页面解释了rep前缀及其变体的确切条件。