什么时候应该在 x86 汇编中使用 MOVS 而不是 MOV?
Posted
技术标签:
【中文标题】什么时候应该在 x86 汇编中使用 MOVS 而不是 MOV?【英文标题】:When should one use MOVS opposed to MOV in x86 Assembly? 【发布时间】:2016-03-28 19:02:05 【问题描述】:我在The Intel 64 and 32 Bit Architectures Software Developer Manual 中遇到了这两个说明,我只是想知道两者之间的区别是什么,以及何时应该使用其中一个而不是另一个。
【问题讨论】:
MOVS 指令执行任意大小的内存到内存复制。 MOV 指令执行 8、16、32 或 64 位寄存器到寄存器、寄存器到内存或内存到寄存器的复制。 This might be a better reference 为您服务(参见第 3 章)。 一旦您知道mov
和 movs
做了什么(并且因为您在英特尔手册中阅读过它们,您就知道它们做了什么),关于何时成为边缘观点的问题。
【参考方案1】:
MOVS
指令通常用于多次使用,因为它会自动增加或减少 edi
和 esi
的值。增量或减量分别取决于方向标志是清除还是设置。这可以与REP
前缀一起使用,通过递减ecx
直到它达到零来使其重复。
根据我阅读的一些文档,movs
指令的历史是一次移动一个字节的字符串,尽管您可以让它移动更大的项目(特别是单词和四字)。它会自动将edi
和esi
更改正确的数量,但它仍然只会将ecx
减一,因此例如,如果您要移动Unicode 字符串,请小心。
http://x86.renejeschke.de/html/file_module_x86_id_279.html 页面解释了 rep
前缀及其变体的确切条件。
【讨论】:
以上是关于什么时候应该在 x86 汇编中使用 MOVS 而不是 MOV?的主要内容,如果未能解决你的问题,请参考以下文章