随笔二十九:算术和逻辑运算

         1、加载有效地址

         加载有效地址指令 leal 实际上是 movl 指令的变形。它的指令形式是从存储器读数据到寄存器,但实际上它根本就没有引用寄存器。它的第一个操作数看上去是一个存储器应用,但该指令并不从指定的位置读入数据,而是将有效地址写入到目的操作数。(像 C语言中的 &)这条指令可以为后面的存储器应用产生指针。另外,它还可以简洁地描述普通的算术计算。

         即 leal 的作用 :1) 产生指针 , 2) 描述简单的算术计算

      


      

          指令

       效果

               描述

  leal         S    D  

  D   &S

       加载有效地址

  INC         D

  DEC        D

  NEG        D

  NOT        D

  D   D + 1

  D   D – 1

  D    -D

  D   ~D

               加 1

               减 1

               取负

               取补

  ADD       S    D

  SUB       S    D

  IMUL      S    D

  XOR       S    D

  OR        S    D

  AND       S    D

  D  D + S

  D  D - S

  D  D * S

  D  D ^ S

  D  D | S

  D  D & S

                加

                减

                乘

              异或

                或

                与

  SAL         k, D

  SHL         k, D

  SAR         k, D

  SHR        k, D

  D  D << k

  D  D << k

  D  D >> AK

  D  D >> LK

              左移

  左移 (等价于 SAL)

         算术右移

         逻辑右移

 

注意:这里的操作数顺序与 ATT 格式的汇编代码中的相反。


一元操作符的操作数可以是一个寄存器也可以是一个存储器位置。

二元操作数的第一个操作数可以是立即数、寄存器或是存储器位置。第二个操作数可以是寄存器或存储器位置。(注:同movl 指令一样,两个操作书不能同时是存储器位置。)

移位操作的移位量可以是一个立即数,或者放在单字节存储器元素 %cl 中。(这些指令很特别,因为只允许以这个特定的寄存器作为操作数。)               

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值