在x86汇编中,何时应该使用MOVS而不是MOV?

4

5
MOVS指令执行任意大小的内存到内存复制。MOV指令执行8、16、32或64位寄存器到寄存器、寄存器到内存或内存到寄存器的复制。 - Ross Ridge
1
这可能是一个更好的参考资料(请参阅第3章):http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf - vcsjones
2
一旦你知道movmovs的作用(因为你已经在英特尔手册中读到了它们的作用),关于“何时”使用它们的问题就变成了边缘意见。 - Sep Roland
1个回答

3
MOVS指令通常被用于多次操作,因为它会自动递增或递减ediesi的值。自增或自减取决于方向标志位是否被清除或设置。可以与REP前缀一起使用,通过递减ecx直到为零来重复执行。
根据我所读的一些文档,movs指令的历史是将字符串以每次一个字节的方式进行移动,但也可以将其用于移动更大的项(特别是字和四字)。它会自动按正确的数量更改ediesi,但它仍然只会将ecx递减1,因此如果您要移动Unicode字符串,请小心。
页面http://x86.renejeschke.de/html/file_module_x86_id_279.html详细解释了rep前缀及其变体的确切条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接