assembly - 什么时候应该在 x86 程序集中使用 MOVS 而不是 MOV?

标签 assembly optimization x86 mov

我在 The Intel 64 and 32 Bit Architectures Software Developer Manual 中看到了这两个说明,我只是想知道两者之间的区别是什么,以及何时应该使用其中之一。

最佳答案

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

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

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

关于assembly - 什么时候应该在 x86 程序集中使用 MOVS 而不是 MOV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36269185/

相关文章:

gcc - 现代编译器如何使用 mmx/3dnow/sse 指令?

C++ 内存编辑 - 编辑汇编/写入字节

assembly - OP 代码 0x20 和 0x30 处的 Intel 8080 指令

tensorflow - Adam 优化器真的是 RMSprop 加动量吗?如果是,为什么它没有动量参数?

database - SQLite 插入速度随着索引数量的增加而变慢

assembly - 顺序和障碍 :what is the equivalent instruction on x86 for 'lwsync' on PowerPC?

c - 如何将 C 中 NULL 的等价物推送到汇编中的堆栈?

java - 位旋转 : interleave bytes in word with zero bytes using bitwise operators (<<, |、& 等)

algorithm - 有什么聪明的方法可以输出 n 个项目的列表,中间有 (n-1) 个分隔符?

c - 排空Intel Core 2 Duo 的指令流水线?