数据传送指令----mov(笔记)AT&T

数据传送指令——mov

基本概念

        将数据从一个位置复制到另一个位置;mov类有四条指令组成:movb、movw、movl和movq;主要区别是传送数据的大小不同,分别是1、 2、 4和8字节。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAV2hhdOKAmXNtYW4=,size_15,color_FFFFFF,t_70,g_se,x_16

        mov指令中,第一个数为源操作数,第二个为目的操作数;其中源操作数指定的值为一个立即数,存储在寄存器或内存中,目的操作数指定一个位置(寄存器/内存地址)。

        注:x86-64中有一条限制,两操作数不能都指向内存位置。在x86-64中任何为寄存器生成32位值的指令都会把该寄存器的高位部分置为0。eg:movl指令以寄存器作为目的时,会把该寄存器高4字节置为0。

        常规的movq指令只能以表示为32位补码数字的立即数作为源操作数,然后把这个值符号扩展得到64位的值,放到目的位置。movabsq指令能够以任意64位立即数值作为源操作数,并且只能以寄存器作为目的。

示例:

  • movabsq $ox0011223344556677,%rax         rax = 0011223344556677
  • movb      $-1,%al           rax = 00112233445566FF
  • movw      $-1, %ax            rax = 001122334455FFFF
  • movl        $-1,%eax          rax = 00000000FFFFFFFF
  • movq       $-1,%.rax          rax =FFFFFFFFFFFFFFFF

一些0或符号位扩展   

        零扩展数据传送指令。这些指令以寄存器或内存地址作为源,以寄存器作为目的。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAV2hhdOKAmXNtYW4=,size_19,color_FFFFFF,t_70,g_se,x_16

         符号扩展数据传送指令。MOVS指令以寄存器或内存地址作为源,以寄存器作为目的。cltq指令只作用于寄存器%eax和%rax。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAV2hhdOKAmXNtYW4=,size_20,color_FFFFFF,t_70,g_se,x_16

         cltq指令,这条指令没有操作数:它总是以寄存器%eax作为源,%rax作为符号扩展结果的目的。它的效果与指令movslq %eax  %rax完全一致,不过编码更紧凑。

示例:

  • movabsq $Ox0011223344556677,%rax          rax = 0011223344556677
  • movb $OxAA,%.dl          dl= AA
  • movb %d1 ,%al        rax = 00112233445566AA
  • movsbq %dl , %.rax         rax = FFFFFFFFFFFFFFAA
  • movzbq %d1 ,%rax          rax = 00000000000000AA

 

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

What’smean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值