计算机组成原理移位知识点

位操作
逻辑操作也叫做位操作,这些操作被应用到寄存器的每一位。
几种常见的算数指令
加法 ADD
减法 SUB
取负 NEG
比较 CMP
乘法 MUL
移位 LSL(逻辑左移) LSR(逻辑右移) ASR(算数右移) ASL(算数左移) ROL(循环左移) ROR(循环右移)
LSR R0,R0,#3     ;R0右移三位。
移位操作
所有微处理器都支持逻辑移位操作。有些支持左移或向右移动一位,其他支持多为移位。如果移位的位数在指令中被编译为常量,这种移位叫做静态移位,在运行时不能改变移位的位数,如果移位的位数是由寄存器的值指定,则叫做动态移位,可以在程序运行时修改移位的额位数。(ARM没有独立的移位指令,移位是作为其他指令的一部分实现的…ARM允许对寄存器-寄存器指令的第二个操作数进行移位,如,指令ADD R0,R1,R2,LSL #4,先寄存器R2逻辑左移4位,然后将移位结果与寄存器R1相加.
算术移位
算数移位将操作数视为一个有符号二进制补码.可以用来完成除以二(右移一位)或乘以2(左移一位).算数移位的目的是在进行移位运算时保留二进制补码的符号,移位运算代表乘以或除以2的幂.
例如,如果将8位数11001110算数左移一位,得到1011100(最低位补0),而算术右移一位得到11100111(符号位被复制).一个整数算数左移m位相当于乘以2^m, 而算术右移m位相当于除以2的m次方.
循环移位
循环移位操作把寄存器的内容看作一个LSB(最低位)和MSB(最高位)相邻的环.例如,将一个8位数11001110循环左移一位,得到10011101,移出的位也被复制到进位寄存器.
有些处理器实现另一种循环操作,叫做扩展循环移位或**带进位的循环位移*.**这种操作与循环位移一样,只不过循环时包含了进位位.如下图所示,移出的位被复制到进位位,原来的进位位变成了被移出的位:
在这里插入图片描述
ARM移位操作的实现
ARM没有独立的移位操作.实际上,移位操作与其他数据处理操作组合到一起,可以在使用第二个操作数之前将其移位
在这里插入图片描述
ARM没有实现带进位的循环左移操作,通过指令ADCS,r0,r0,r0可以实现带进位的循环左移,因为它吧r0与r0以及进位位一起相加,并将结果保存在r0中(即结果为2x[ro]+c),左移等价于乘以2,把进位位移动到最低位等价于加上进位位,得到2x[r0]+c,指令后添加s会强制更新ccr,确保进位输出被加载到c 位。因此ADCS R0,R0,R0,与RXL r0等价。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值