《汇编程序设计与计算机体系结构:软件工程师教程》 —1.6 3位计算机示例

华章计算机 发表于 2019/12/04 11:01:17 2019/12/04
【摘要】 本节书摘来自华章计算机《汇编程序设计与计算机体系结构:软件工程师教程》一书中第1章,第1.6节,作者是布莱恩·R. 霍尔(Brian R. Hall)[美] 凯文·J.斯隆卡(Kevin J. Slonka),爱飞翔 译。

1.6 3位计算机示例

      学习指南:本节内容的演示请参阅视频 1.3。

 

程序员一般是在 32 位或 64 位环境下编写程序的,不过,用位数比较少的环境来形象地演示一些范例,更能帮助我们理解这些内容。因此,下面用 3 位计算机(如表1-12所示)来举一些例子。

表1-12 3 位计算机

 image.png

无论计算机是多少位的,下面这几条规则均适用于补码表示法。

0 总是用所有二进制位都是 0 的数来表示

-1 总是用所有二进制位都是 1 的数来表示

值最小的负整数总是用开头为 1且其余二进制位均为 0 的数来表示

值最大的正整数总是用开头为 0且其余二进制位均为 1 的数来表示

下面看看 3 位计算机是怎样用补码表示法来做整数运算的。这几个例子分别演示了几种不同的情况。

范例 1-20 用 3 位计算机做加减法

 image.png

第一个例子演示的是两个正数相加的情况。这种情况可以得到正确的结果。第二个例子是正数与正数相减,这可以化为正数与负数相加。由于运算过程中最高位发生了进位,因此,运算结果是 4 位,这超出了 3 位计算机的表示范围,于是,计算机就会把这个进位忽略掉,去掉该位之后的结果是正确的。第三个例子还是正数与正数相减,这依然可以化为正数与负数相加,与前例不同的是,这次的计算结果本身就在 3 位整数的表示范围之内。第四个例子是把两个 3 位正整数相加,然而运算结果却超出了 3 位整数的表示范围,这可以从结果的最高位来判断:由于该位是 1,因此,运算结果是负数。两个正值相加,结果为负,这意味着发生了溢出,此时,CPU 的状态寄存器会把表示溢出的标志位设置成 1,这个话题将在第 2 章讲解。第五个例子是负数加上负数,也就是 -4 加上 -3,虽然这两个值都在 3 位整数的表示范围内,但是其运算结果却超出了范围。运算结果是 4 位,去掉最左侧一位之后,在剩下来的 3 位中最高位是 0,因此,它是个正值。两个负数相加得到了正数,这意味着发生了溢出。从第 4 章开始,将会讲解怎样处理各种溢出情况。

      编程知识:计算机怎么判断一个整数究竟是带符号的还是不带符号的?其实它也不知道。无论涉及的是什么值,CPU 都只是会在执行完算术运算后用布尔逻辑来设定相关的状态标志。至于这些标志是应该予以考虑还是可以忽略不计,则要由程序员依照该运算的具体情况来确定。状态标志及相关的话题会在后面的章节中详细讲解,尤其是第 2 章与第 4 章。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。