《深入理解计算机系统》 练习题3.9-3.11 移位操作

移位操作

移位操作是二元操作。第一个操作数是移位量,第二个操作数是被移位的数。
移位量只能是立即数,或者放在单字节寄存器%cl中。
被移位的数可以是一个寄存器,或者一个内存位置。
如果移位操作对w位长的数据,那么移位量就是%cl中的低m位的无符号数值(它们的关系是 2 m = w 2^m=w 2m=w)。
%cl的十六进制值为0xFF为例:

命令等式有效位移位量
salb 2 3 = 8 2^3=8 23=81111 1111111=7
salw 2 4 = 16 2^4=16 24=161111 11111111=15
sall 2 5 = 32 2^5=32 25=321111 111111111=31
salq 2 6 = 64 2^6=64 26=641111 1111111111=63

左移命令有两个:salshl,效果都是一样的,右边补0,因为左移不区分算术和逻辑。
右移命令有两个:sarshrsar是算术右移(补上符号位,用 > > A >>_A >>A表示),shr是逻辑右移(补上0,用 > > L >>_L >>L表示)。
另外,从我个人理解来看,上面表格的描述也很合理,比如salb是一个字节,8位的,然后这里是最大的移位量是7位,因为如果可以移位8位的话,那么所有位上的数都是移位后补的数了,一个原来的数都不存在了。

3.9

在这里插入图片描述
在这里插入图片描述
需要补全的是,第二条和第四条命令,这里直接给出答案。
第二条命令,因为是long,8字节,所以这里是q,另外这里的移位量是一个立即数。
%ecx和%cl是相同寄存器,只不过前者字节数更多。不过,第三条命令这里有点奇怪,因为获得的是,两个字,四个字节,注释里也说了。不过不打紧,反正最终我们使用的是最小字节数的寄存器%cl。
然后到了第四条命令,果然使用的是%cl。

因为只有最低字节寄存器%cl才指示了移位量。

3.11

在这里插入图片描述
在这里插入图片描述
直接给出答案。
总结一下就是x^x即x异或x自己肯定是0.
将一个4字,8字节的变量置为0(变量存在寄存器%rdx),有以下三种指令:
1)xorq %rdx %rdx。利用异或性质。
2)movq $0 %rdx。利用mov数据传送指令。
3)xorl %edx %edx or movl $0 %edx。利用任何更新低位4字节的指令都会把高位的4字节设置为0。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值