唐朔飞《计算机组成原理》和袁春风《计算机组成与体系结构》中算数左移部分的差别

本文探讨了唐朔飞和袁春风两本教材中关于算数左移的不同描述,指出二者算法导致的不同结果。唐的算法在负数左移时高位移出为0,可能导致错误的计算结果,而袁的算法考虑了符号位变化,更符合实际运算规则。通过举例说明,左移操作可能导致溢出,从而影响计算的正确性。结论认为,不同的算数左移实现可能源于不同的指令系统或硬件设计考虑。
摘要由CSDN通过智能技术生成

唐的《计组》

第234页说:

不论是正数还是负数,移位后符号位均不变,这是算数移位的重要特点。
第236页给出了实现算数左移和算数右移的硬件示意图。第237页给出了用带进位的移位实现算数左移。

袁的教材67页说:

算数左移时,高位移出,低位补0,每移一位,如果移出的高位不同于移位后的符号位,即左移前后符号位不同,则结果溢出。

上面这两种表述其实是不同的。

例如,袁的教材中给出了一个例子:

若x是带符号机器数80 00 00 04H,即1000 0000 0000 0000 0000 0000 0000 0100。
2x = 0000 0000 0000 0000 0000 0000 0000 1000 = 00 00 00 08H (负数左移变成了正数,结果溢出),得到2x的真值为8

而如果按照唐的教材中的描述, 2x应为 1000 0000 0000 0000 0000 0000 1000(负数左移仍为正数,不过由于最高数位移出的是0,所以结果是错误的)。得到2x的真值为-(2^31-8)

   分析: 的真值为-(2^31- 2^2), 2x的真值应为-(2^32- 2^3),超过了32位补码可表示的最小负数范围,所以算数左移一位结果肯定不对。
而按照袁的左移算法,左移之后所得2x的真值8与由x的真值计算所得2x的真值-(2^32-8)按照模2运算其实是相等的,如果仅在表示运算结果时机器字长多一位,结果就是没有错误的。按照唐的算法,左移所得2x的真值
-(2^31- 8)与由x的真值计算所得2x的真值看不出有什么关系,只能得出左移结果是错误的结论。

  再看一个例子:带符号数x=0110.
按照唐的算数左移算法,2x=0100 按照袁的左移算法2x=1100
同样,如果仅在表示结果时机器字长多一位,袁的左移结果就没有错误。而唐的计算结果仍不对。

所以我认为,应该按照袁的左移算法来进行算数左移这是我之前的想法,后来想想应该不是这样

唐和袁所描述的算数左移不同,可是因为不同的机器(采用不同的指令系统)有不同的算数左移指令吧。

参考文献:

《计算机组成原理》唐朔飞
《计算机组成与系统结构》 袁春风

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值