随笔二十七:数据传送指令

        将数据从一个位置复制到另一个位置的指令是最频繁使用的指令。下面介绍下 MOV 类指令,MOV 类由三条指令组成, movb、movw 和 movl。这些指令都执行同样的操作;不同的只是它们分别是在大小为 1、2 和 4 个字节的数据上进行操作。

       

指令

效果

描述

  MOV          S, D

  D  S

传送

  movb

  movw

  movl

  传送字节

  传送字

  传送双字

 

  MOVS         S, D

  D  符号扩展(S)

传送符号扩展的字节

  movsbw

  movsbl

  movswl

  将做了符号扩展的字节传送给字

  将做了符号扩展的字节传送给双字

  将做了符号扩展的字传送给双字

 

  MOVZ         S, D

  D  零扩展(S)

传送给零扩展的字节

  movzbw

  movzbl

  movzwl

 

 

  pushl           S

 

 

  popl            D

  将做了零扩展的字节传送给字

  将做了零扩展的字节传给双字

  将做了零扩展的字传给双字

 

  R[%esp] R[%esp] – 4;

  M[R[%esp]] S

 

  D  M[R[%esp]];

  R[%esp] R[%esp] – 4

 

 

 

 

 

双字节压栈

 

 

双字节出栈


MOV 类中的指令将源操作数的值复制到目标的操作数中。源操作数指定的值是一个立即数,存储在寄存器中或者存储器中。目的操作数指定一个位置,要么是一个寄存器,要么是一个存储器地址。

源操作数

目的操作数

立即数

寄存器

寄存器

存储器

存储器

 


注意:IA32 加了一条限制,传送指令的两个操作数不能都指向存储器位置。将一个值从存储器位置复制到另一个存储器位置需要两条指令 —— 第一条指令将源值加载到寄存器中,第二条将寄存器值写入目的位置。




你可能感兴趣的:(随笔二十七:数据传送指令)