《汇编程序设计与计算机体系结构:软件工程师教程》 —1.6 3位计算机示例
1.6 3位计算机示例
学习指南:本节内容的演示请参阅视频 1.3。
程序员一般是在 32 位或 64 位环境下编写程序的,不过,用位数比较少的环境来形象地演示一些范例,更能帮助我们理解这些内容。因此,下面用 3 位计算机(如表1-12所示)来举一些例子。
表1-12 3 位计算机
无论计算机是多少位的,下面这几条规则均适用于补码表示法。
0 总是用所有二进制位都是 0 的数来表示
-1 总是用所有二进制位都是 1 的数来表示
值最小的负整数总是用开头为 1且其余二进制位均为 0 的数来表示
值最大的正整数总是用开头为 0且其余二进制位均为 1 的数来表示
下面看看 3 位计算机是怎样用补码表示法来做整数运算的。这几个例子分别演示了几种不同的情况。
范例 1-20 用 3 位计算机做加减法
第一个例子演示的是两个正数相加的情况。这种情况可以得到正确的结果。第二个例子是正数与正数相减,这可以化为正数与负数相加。由于运算过程中最高位发生了进位,因此,运算结果是 4 位,这超出了 3 位计算机的表示范围,于是,计算机就会把这个进位忽略掉,去掉该位之后的结果是正确的。第三个例子还是正数与正数相减,这依然可以化为正数与负数相加,与前例不同的是,这次的计算结果本身就在 3 位整数的表示范围之内。第四个例子是把两个 3 位正整数相加,然而运算结果却超出了 3 位整数的表示范围,这可以从结果的最高位来判断:由于该位是 1,因此,运算结果是负数。两个正值相加,结果为负,这意味着发生了溢出,此时,CPU 的状态寄存器会把表示溢出的标志位设置成 1,这个话题将在第 2 章讲解。第五个例子是负数加上负数,也就是 -4 加上 -3,虽然这两个值都在 3 位整数的表示范围内,但是其运算结果却超出了范围。运算结果是 4 位,去掉最左侧一位之后,在剩下来的 3 位中最高位是 0,因此,它是个正值。两个负数相加得到了正数,这意味着发生了溢出。从第 4 章开始,将会讲解怎样处理各种溢出情况。
编程知识:计算机怎么判断一个整数究竟是带符号的还是不带符号的?其实它也不知道。无论涉及的是什么值,CPU 都只是会在执行完算术运算后用布尔逻辑来设定相关的状态标志。至于这些标志是应该予以考虑还是可以忽略不计,则要由程序员依照该运算的具体情况来确定。状态标志及相关的话题会在后面的章节中详细讲解,尤其是第 2 章与第 4 章。
- 点赞
- 收藏
- 关注作者
评论(0)