MOVS, MOVSB, MOVSW, MOVSD, MOVSQ

数据从字符串移动到字符串

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
A4MOVS m8, m8ZO有效有效对于遗留模式,将位元从地址DS:(E)SI移动到ES:(E)DI. 对于64位模式,将位元从地址(R|E)SI移动到(R|E)DI.
A5MOVS m16, m16ZO有效有效对于遗留模式,将单词从地址DS:(E)SI移动到ES:(E)DI. 对于地址的64位模式移动单词(R|E)SI移动到(R|E)DI.
A5MOVS m32, m32ZO有效有效对于遗留模式,将dword从地址DS:(E)SI移动到ES:(E)DI. 对于64位模式将dword从地址(R|E)SI移动到(R|E)DI.
REX.W + A5MOVS m64, m64ZO有效不可编码将 qword 从地址 (R|E)SI 移动到 (R|E)DI 。
A4MOVSBZO有效有效对于遗留模式,将位元从地址DS:(E)SI移动到ES:(E)DI. 对于64位模式,将位元从地址(R|E)SI移动到(R|E)DI.
A5MOVSWZO有效有效对于遗留模式,将单词从地址DS:(E)SI移动到ES:(E)DI. 对于地址的64位模式移动单词(R|E)SI移动到(R|E)DI.
A5MOVSDZO有效有效对于遗留模式,将dword从地址DS:(E)SI移动到ES:(E)DI. 对于64位模式将dword从地址(R|E)SI移动到(R|E)DI.
REX.W + A5MOVSQZO有效不可编码将 qword 从地址 (R|E)SI 移动到 (R|E)DI 。

实测开销

正在从 arch-data 加载实测数据...

说明

将第二个 操作数(源操作数)指定的字节,单词或双词移动到第一个 操作数(目标操作数)指定的位置. 来源和目标操作数都位于内存中. 源操作数的地址从DS:ESI或DS:SI注册处读取(取决于指令的地址大小属性,分别为32或16). 目标操作数的地址从ES:EDI或ES:DI注册处读取(同样取决于指令的地址大小属性). DS段可能会被一个段覆盖前缀所覆盖,但ES段不能被覆盖.

在组装码级别上,允许此指令的两种形式:"explient-操作数"形式和"nooperands"形式. 显式-操作数形式(与MOVS mnemonic一起指定)允许源和目标操作数明确指定. 在这里,源和目标操作数应该分别是表示源值大小和位置以及目的地的符号. 提供这种明确的操作数表格是为了提供文件;然而,请注意,这种表格所提供的文件可能具有误导性。 也就是说,源和目标操作数符号必须指定操作数的正确类型(大小)(字节,单词,或双词),但它们不必指定正确的位置. 源和目标操作数的位置总是由DS:(E)SI和ES:(E)DI登记器指定,在执行移动字符串指令前必须正确加载.

No-操作数格式提供了MOVS指令的字节,单词和双词版本的"短表". 这里还假定DS:(E)SI和ES:(E)DI分别是来源和目标操作数. 源和 目标操作数 的大小以元音选择 : MOVSB(字节移动),MOVSW(字节移动),或MOVSD(双字移动).

移动操作后,(E)SI和(E)DI登记册根据EFLAGS登记册中DF旗的设置自动递增或递减. (如果DF旗为0,则(E)SI和(E)DI注册是英寸 -

mended;如果DF旗为1,则(E)SI和(E)DI注册减少. )注册增加或减少1个字节操作,2个字节操作,4个字节操作.

NOTE

为了提高性能,较近期的处理器支持在MOVS和MOVSB启动的字符串存储操作中修改处理器的操作. 见Intel(R)64和IA-32 Architectures软件开发者手册第1卷第7.3.9.3节关于快弦操作的更多信息.

该MOVS, MOVSB, MOVSW,以及MOVSD指示前可添加REP前缀( 见 "REP/REPE/REPZ /REPNE/REPNZ用于描述REP前缀)用于块移动ECX字节,单词,或双词.

在64位模式下,指令的默认地址大小为64位,32位地址大小使用前缀67H支持. 64位地址由RSI和RDI指定;32位地址由ESI和EDI指定. 使用REX.W前缀将双字操作推广到64位. 参见本节开头的汇总图,用于编码数据和限制.

行动

DEST := SRC;
Non-64-bit Mode:
IF (Byte move)

   THEN IF DF = 0

          THEN
                (E)SI := (E)SI + 1;
                (E)DI := (E)DI + 1;

          ELSE
                (E)SI := (E)SI  1;
                (E)DI := (E)DI  1;

          FI;
    ELSE IF (Word move)

        THEN IF DF = 0

                (E)SI := (E)SI + 2;
                (E)DI := (E)DI + 2;
                FI;
          ELSE
                (E)SI := (E)SI  2;
                (E)DI := (E)DI  2;
          FI;
    ELSE IF (Doubleword move)

        THEN IF DF = 0

                (E)SI := (E)SI + 4;
                (E)DI := (E)DI + 4;
                FI;
          ELSE
                (E)SI := (E)SI  4;
                (E)DI := (E)DI  4;
          FI;
FI;
64-bit Mode:
IF (Byte move)

   THEN IF DF = 0

          THEN
                (R|E)SI := (R|E)SI + 1;
                (R|E)DI := (R|E)DI + 1;


          ELSE
                (R|E)SI := (R|E)SI  1;
                (R|E)DI := (R|E)DI  1;

          FI;
    ELSE IF (Word move)

        THEN IF DF = 0

                (R|E)SI := (R|E)SI + 2;
                (R|E)DI := (R|E)DI + 2;
                FI;
          ELSE
                (R|E)SI := (R|E)SI  2;
                (R|E)DI := (R|E)DI  2;
          FI;
    ELSE IF (Doubleword move)

        THEN IF DF = 0

                (R|E)SI := (R|E)SI + 4;
                (R|E)DI := (R|E)DI + 4;
                FI;
          ELSE
                (R|E)SI := (R|E)SI  4;
                (R|E)DI := (R|E)DI  4;
          FI;
    ELSE IF (Quadword move)

        THEN IF DF = 0

                (R|E)SI := (R|E)SI + 8;
                (R|E)DI := (R|E)DI + 8;
                FI;
          ELSE
                (R|E)SI := (R|E)SI  8;
                (R|E)DI := (R|E)DI  8;
          FI;
FI;

受影响的旗帜

None.

异常

保护模式
#GP(0)如果目的地位于不可写入的区段中。如果内存操作数的有效地址位于CS、DS、ES、FS或GS区段限制之外。如果DS、ES、FS或GS登记簿包含NULL 段选择子。
#SS(0)如果 内存操作数 有效地址在 SS 段限制之外. #PF(fault-code) 如果 页面错误 发生.
#AC(0)如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用.
#UD如果使用 LOCK 前缀 。
实地址模式
#GP如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS如果 内存操作数 的有效地址在 SS 段限制之外。
#UD如果使用 LOCK 前缀 。
虚拟 8086 模式
#GP(0)如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS(0)如果 内存操作数 有效地址在 SS 段限制之外. #PF(fault-code) 如果 页面错误 发生.
#AC(0)如果启用对齐检查, 并使用不对齐的内存引用 。
#UD如果使用 LOCK 前缀 。
兼容模式
与保护模式中的例外相同.
64 位模式
#SS(0)如果引用SS部分的内存地址是非冠状的.
#GP(0)如果内存地址是非冠状的. #PF(fault-code) 如果发生 页面错误.
#AC(0)如果启用了对齐检查,并且在当前特权级别为3时会给出不对齐的内存引用.
#UD如果使用 LOCK 前缀 。

来源