【计算机组成 课程笔记】3.1 算数运算和逻辑运算

课程链接:

计算机组成_北京大学_中国大学MOOC(慕课)

3 - 1 - 301-算术运算和逻辑运算(13-'7--)_哔哩哔哩_bilibili

计算机的核心功能就是运算,运算的基本类型包括算数运算和逻辑运算。想要了解计算机是如何实现运算的,我们就要从算数运算指令和逻辑运算指令开始说起。

1. 从模型机说起

这是我们非常熟悉的模型机,我们在开始介绍模型机时(【计算机组成 课程笔记】1.2 冯·诺伊曼结构_Elaine_Bao的博客-CSDN博客)就用了一条加法指令作为例子。加法指令就是一种算数运算指令。

这个例子中的加法指令是将R0寄存器当中的数和存储器地址为6的存储单元中的数相加,并将结果放回到R0寄存器当中。这条指令的格式比较接近X86指令,它可以在运算指令当中进行存储器的操作。而现在,为了简单起见,我们将选用MIPS指令进行讲解。

2. 算数运算指令 - R型指令

MIPS的运算指令只能对寄存器进行操作,例如如下的格式,add表示加法指令,$+数字表示对应的通用寄存器。所以这条指令要做的是把9号寄存器的内容和10号寄存器的内容相加,并存到8号寄存器。如果我们定义右边的这么一段C语言程序,并且假设在程序中定义的这几个变量,分别被分配到了8,9,10号寄存器中,那么在C语言中所写的这条加法语句就会经过MIPS的编译器生成左边这样的MIPS指令。

这条指令的操作数都是寄存器,所以它是一条R型指令。根据指令编码和指令操作数的二进制编码换算,我们可以得到这条指令的具体的编码是000000 01001 01010 01000 00000 100000。

根据opcode域是全0,知道了这是一条R型指令,再根据funct域的值,分析出这是一条add指令,因此控制电路会向ALU发送对应的控制信号,指明接下来要进行加法运算。与此同时,指令译码部件还会分析出第一个源操作数rs是9号寄存器,第二个源操作数rt是10号寄存器,那么控制电路会选通对应的源操作数寄存器,将其内容传送到ALU的输入。同时,指令译码部件也会分析出目的操作数rd是8号寄存器,因此控制寄存器还会将ALU的输出连通到8号寄存器。在这样的设定下,ALU会根据控制电路给出的信号进行加法运算,并送出运算的结果。这就完成了一次加法运算。

对于MIPS指令来说,其核心的算数运算指令,采用R型格式的有这几种:

add和addu的区别在于,add在运算中产生溢出时,会向控制器报告异常,由控制器进行相关处理。而addu不会报告异常。sub和subu的区别也类似。

这类R型指令的源操作数都是在寄存器中的,但如果有一个源操作数是立即数,就需要采用另一种格式的指令,也就是I型指令。

3. 算数运算指令- I型指令

这是一条I型格式的加法指令的例子,将22号寄存器的内容加上一个立即数-50,并将结果存到21号寄存器中。对应的I型指令的格式如下,根据指令编码和指令操作数的二进制编码换算,我们可以得到这条指令的具体的编码是001000 10110 10101 1111 1111 1100 1110。

那么当CPU将这条指令的编码取回放到IR寄存器后,指令译码部件会根据opcode域发现这是一条立即数的加法指令,因此控制电路会向ALU发出控制信号,指示接下来要进行加法运算。同时指令译码部件分析会发现其中一个源操作数rs来自22号寄存器,因此22号寄存器中的内容会在控制电路的控制下通过内部总线传送给ALU的一个输入。而另一个源操作数是立即数,这个立即数是存放在指令编码中的,因此控制电路会从指令编码中提取出这个立即数,并传送给ALU的另一个输入。同时,指令译码部件也会分析出目的操作数rt是21号寄存器,因此控制寄存器还会将ALU的输出连通到21号寄存器。这就是这条立即数加法指令的运算过程。

但是我们要注意的一点是,这个立即数是16位的,而另一个源操作数和目的操作数都是32位的。那如何将16位数和32位数进行相加呢?需要进行一些转换。

转换的方法在MIPS的指令说明中很清楚地指出了,SignExtImm表示立即数的符号扩展,也就是说立即数的高16位是由低16位中的最高位复制了16遍填充得到的。熟悉补码规则的可以知道,对于一个有符号数,进行符号扩展不会改变这个数的值。不了解这一点的话可以补充一下二进制的补码知识。

4. 逻辑运算指令

与算数运算指令类似,逻辑运算指令也分为R型和I型两种格式。其中I型指令对立即数的扩展与上面的扩展方式不同,采用的是0扩展,也就是说扩展后的高16位全都是0。

我们也来看一个例子,这里是一个逻辑"与"指令的编码示例。根据指令编码和指令操作数的二进制编码换算,我们可以得到这条指令的具体的编码是000000 01001 01010 01000 00000 100100。

相应的CPU的指令执行过程如下图:

5. 算数逻辑运算的需求

这些需求对应了MIPS核心指令中提供的加法,减法,与,或,或非这些指令的功能。

现在我们已经了解了这些运算指令的基本特点,下一步我们就来分析这些指令在硬件电路上是如何实现的。

相关推荐
wan5555cn5 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
雁于飞6 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
rannn_1117 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
Ro Jace7 小时前
心灵笔记:第一性原理学习与实践
笔记
aramae8 小时前
C++ -- 模板
开发语言·c++·笔记·其他
小马学嵌入式~9 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
hour_go9 小时前
用户态与内核态的深度解析:安全、效率与优化之道
笔记·操作系统
摇滚侠10 小时前
Vue3入门到实战,最新版vue3+TypeScript前端开发教程,笔记03
javascript·笔记·typescript
岑梓铭12 小时前
考研408《计算机组成原理》复习笔记,第六章(1)——总线概念
笔记·考研·408·计算机组成原理·计组
Suckerbin12 小时前
digitalworld.local: TORMENT
笔记·安全·web安全·网络安全