配套教材:
Computer Organization and Design: The Hardware / Software Interface (5th Edition)
这是专业必修课《计算机组成原理》的复习指引。建议将本复习指导与博客中的《简明操作系统原理》配合复习。
需要掌握的概念在文档中以蓝色标识,并用可读性更好的字体显示 Linux 命令和代码。代码部分语法高亮。
计算机组成原理不是语言课,本复习指导对用到的编程语言的语法的讲解也不会很细致。如果不知道代码中的一些关键字、指令或函数的具体用法,你应当自行查找相关资料。
第三章 算术
第一节 整数的四则运算
第二节 浮点
第三节 数据级并行
注意
链接:https://pan.baidu.com/s/1KqTIQs9qUwwrt3ov-qYNCw
提取码:0000
第三章 算术
第一节 整数的四则运算
CPU核心中的算术逻辑单元(Arithmetic logic unit,ALU)用于进行算术和逻辑运算。计算机用二补数表示法表示数。无论参与加减运算的两个数的正负性如何、是否有符号,都可以统一进行运算。两个有符号数运算时,如结果为负,最高位(符号位)会自动变成1。
为了实现更快的加法,超前进位(carry lookahead)成为了应用最广泛的方案。其时间复杂度与操作数的二进制位数的对数成正比。
关于加法器的实现,请参考数字逻辑电路的相关资料,也可以参考本人之前发布的《数字设计基础与应用 知识梳理》(2.2 常用的MSI组合逻辑模块)。
当负数与非负数相加时,不会溢出。理由很简单:一个负数与一个非负数的和一定不大于这个非负数。当两个符号相同的数相减时,不会溢出。理由相同。也可以把两个同号的数相减看成一个非负数加一个负数,就可以套用符号相反的数相加不会溢出的理由来直接证明了。两个同号数相加,或者用正数减负数、负数减正数,都有可能溢出。当发生溢出时,溢出部分会直接丢失。
下标是两个有符号数相加减时可能发生溢出的情况。
如果是两个地址做运算,溢出常被忽略(注意:地址是无符号的。)MIPS中,只有在有符号数参与的运算溢出时,才会抛出异常。不过,MIPS对立即数进行的是符号扩展,即使运算是无符号的。
C / C++和Java在计算结果溢出时不产生异常,Fortran、Ada则会产生异常。
异常(exception)在很多计算机上是中断(interrupt)的一种。关于中断,见第四章第三节,以及《简明