【问题标题】:When should one use MOVS opposed to MOV in x86 Assembly?什么时候应该在 x86 汇编中使用 MOVS 而不是 MOV?
【发布时间】: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 章)。
  • 一旦您知道 movmovs 做了什么(并且因为您在英特尔手册中阅读过它们,您就知道它们做了什么),关于何时成为边缘观点的问题。

标签: assembly optimization x86 mov


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 2019-10-30
    • 2011-06-22
    • 2015-12-11
    • 2012-02-12
    • 2012-06-27
    • 2010-11-29
    • 2015-12-23
    相关资源
    最近更新 更多