搬家第44天-step7语句表练习16:移位和循环移位-双字移位

前面学习了语句表做整型(字)的移位,接下来学习双字的移位。双字移位和字的移位是类似的。
1. SSD和SRD 将双字右移
L 100
SSD 5
T MD448
100转换成二进制是0110 0100,右移5次,最终结果是3
 
L -100
SSD 5
T MD 448
最终结果是2044
 
负数移位的算法是,先把负数对应的正数转换成二进制,符号位为1,其他位取反,然后加1,逐位移动后,空出的位置由符号位数字填充,移出的数字丢弃,移位结束后,再将各位取反,符号位保留,计算出来就是结果。比如这里的-100,相应的正数是100,转换成二进制是0000,0000,0000,0000,0000,0000,0110,0100,符号位为1,各位取反,因为不是双整型,为0000,0000,0000,0000,1111,1111,1001,1011,加1结果是0000,0000,0000,0000,1111,1111,1001,1100,需要移动5次。
向右移动第一次,结果是0000,0000,0000,0000,0011,1111,1100,1110
向右移动第二次,结果是0000,0000,0000,0000,0001,1111,1110,0111
向右移动第三次,结果是0000,0000,0000,0000,0000,1111,1111,0011
向右移动第四次,结果是0000,0000,0000,0000,0000,0111,1111,1001
向右移动第五次,结果是0000,0000,0000,0000,0000,0111,1111,1100
移动结束后符号位不变,其他位取反为0000,0000,0000,0000,0000,0111,1111,1100
转换成10进制结果是2044
是不是有点怪怪的?负数移动后变成正数。那是因为加入累加器1时,数据类型不对,如果换成
L L#-100
SSD
T MD448
结果就会变成-4,推导过程就不写了。
posted @ 2021-03-13 20:11  来自金沙江的小鱼  阅读(414)  评论(0编辑  收藏  举报