算数和逻辑操作

写在前面

如图为x86-64的一些整数和逻辑操作。这里面大多指令都有各种带不同大小操作数的变形。eg:ADD由四条加法指令组成: addb、addw、addl和addq,分别是字节加法、字加法、双字加法和四字加法;lea指令变种(按大小分类):leaw 、leal、leaq,分别是字加法、双字加法和四字加法。

 这些操作被分为四组:加载有效地址、一元操作、二元操作和移位。其中一元操作有一个操作数,二元操作有两个操作数。

加载有效地址leaq

leaq  S,D

leaq:形式上是从内存读数据到寄存器,实际上是将有效地址写入到目的操作数。

eg:

c语言

        long scale(long x,long y,long z){

                long t = x +4* y + 12*Z;

                return t;}

编译时,该函数的算术运算以三条leaq指令实现:

        long scale(long x, long y,long z)

        x in %rdi, y in %rsi,z in %rdx

        scale:

                leaq         (%rdi,%rsi,4),%rax      //x+4*y

                leaq        (%rdx, %rdx,2),%rdx    //z +2*z =3*z

                leaq        (%rax,%rdx,4), %rax        //(x+4*y)+4*(3*z)=x +4*y +12*z

                ret

一元操作和二元操作

一元操作

 一元操作只有一个操作数,该操作数即使源操作数又是目的操作数,该操作数可以是一个寄存器,也可以是一个内存位置。

eg:decq (%rsp)           //使栈顶的8字节元素-1   类似于C语言中的--

        incq (%rsp)            //使栈顶的8字节元素+1  类似于C语言中的++

二元操作

二元操作有两个操作数,其中第二个操作数既是源操作数又是目的操作数。这种语法类似于C语言中的赋值运算符,例如x-=y。

第一个操作数源操作数可以是立即数、寄存器或是内存位置。

第二个操作数目的操作数可以是寄存器或是内存位置。注意,当第二个操作数为内存地址时,处理器必须从内存读出值,执行操作,再把结果写回内存。

移位操作

移位操作,第一项先给出移位量,然后第二项给出的是要移位的数;分为算术移位和逻辑移位。

第一项移位量可以是一个立即数,或者放在单字节寄存器%cl中。(注:只允许以这个特定的寄存器作为操作数)。

左移指令有两个名字:SAL和SHL。两者的效果是一样的,都是将右边填上0。

右移指令不同,SAR执行算术移位(填上符号位),而SHR执行逻辑移位(填上0)。

移位操作的目的操作数可以是一个寄存器或是一个内存位置。

学习自《深入理解计算机系统》

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
算术逻辑单元(ALU)是计算机中的一个重要部件,用于执行各种算术和逻辑操作。以下是一些与ALU相关的理论和概念: 1. 位宽:位宽是指ALU可以处理的二进制位数。例如,如果ALU的位宽为32位,那么它可以处理32位二进制数据。 2. 运算器:ALU通常是运算器的一个组成部分,用于执行计算机中的各种算术和逻辑操作。运算器还包括寄存器和数据通路。 3. 算术运算:算术运算是指对数字进行的加、减、乘、除等运算。ALU可以执行这些运算,并将结果存储到寄存器中。 4. 逻辑运算:逻辑运算是指对逻辑值(True或False)进行的与、或、非、异或等运算。ALU同样可以执行这些运算,并将结果存储到寄存器中。 5. 位运算:位运算是指对二进制数据进行的操作,如与、或、非、异或等运算。ALU同样可以执行这些运算,并将结果存储到寄存器中。 6. 状态标志位:状态标志位是指存储在运算器中的一些二进制数值,用于表示运算结果的一些状态信息,如是否发生了进位、是否为零、是否为负等。 7. 浮点运算:浮点运算是指对带有小数点的数字进行的加、减、乘、除等运算。ALU通常需要使用特殊的硬件支持才能执行浮点运算。 总之,ALU是计算机中的一个核心部件,用于执行各种算术和逻辑操作。它的功能强大,多种多样,可以满足计算机处理各种复杂计算需求的要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

What’smean

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

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

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

打赏作者

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

抵扣说明:

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

余额充值