其他分享
首页 > 其他分享> > 北航计算机组成原理课程设计-2021秋 PreProject-MIPS-入门简介

北航计算机组成原理课程设计-2021秋 PreProject-MIPS-入门简介

作者:互联网

北航计算机学院-计算机组成原理课程设计-2020秋

PreProject-MIPS

入门简介


本系列所有博客,知识讲解、习题以及答案均由北航计算机学院计算机组成原理课程组创作,解析部分由笔者创作,如有侵权联系删除。


从本节开始,课程组给出的教程中增添了很多视频讲解。为了避免侵权,本系列博客将不会搬运课程组的视频讲解,而对于文字讲解也会相应地加以调整,重点在于根据笔者自己的理解给出习题的解析。因此带来的讲解不到位敬请见谅。


MIPS 汇编

汇编语言

由于硬件方面的原因,计算机中的数据都是以二进制的形式表示的,这也代表着,CPU 所直接处理的都是一条条二进制机器码指令。而这些单纯的机器码是很难以阅读和理解的,因此人们发明了比机器语言稍微高级的一种程序语言——汇编语言(Assembly Language)。事实上,与其说汇编语言是一种语言,不如说它是一种助记符——用一些易于理解的符号代表特定含义的机器码,用标签(Label)来替代地址。

相比于 C、Java 这些高级语言,汇编语言要低级的多,它和机器码几乎是一一对应的,一般用于贴近于硬件的编程,正如我们的计组实验。我们在这里学习汇编语言,一方面是为了让同学们通过学习汇编语言来理解计算机底层硬件的运行过程,另一方面是使用汇编语言来编写测试程序验证我们设计的 CPU 的正确性。

由于汇编语言涉及到的知识点众多,部分知识点十分琐碎,建议在第一遍学习时不要陷入细节问题之中,快速阅览整章,对汇编语言有一个大概认识之后再回过头来将第一遍学习中不理解的点逐个攻克。

MIPS 汇编

不同架构的 CPU 都有各自独特的汇编语言,例如我们将会使用的 MIPS 汇编语言就是专门用于 MIPS 体系结构 CPU 的汇编语言。MIPS 汇编的最大特点就是指令的结构比较单一,所有的指令都可以翻译成 32 位二进制的机器码,指令的组成也大都只有 R、I、J 这三类(依照格式进行的分类,后面会详细讲解)。

这一特点让他看起来有些“死板“,因为大多数指令并不需要使用 32 位机器码才能表示,一般 10 位、20 位就已经足够了。从这点来看 MIPS 汇编确实比较浪费存储空间,这也是 MIPS 架构 CPU 不被主流所喜的重要原因。不过,有弊就有利,MIPS 汇编这种固定的指令格式非常具有规律性。可想而知,相对于其它架构的 CPU,MIPS 架构 CPU 的设计难度相对较低,很适合我们这些初学者。而它的这些规律性,会使我们在设计 MIPS 体系结构的 CPU 的过程中,更充分地体会到工程化设计给我们带来的便利,更容易理解 CPU 的整体构造。

MARS(MIPS ASSEMBLER AND RUNTIME SIMULATOR)

MARS 是一个轻量级的、用于教学的 MIPS 汇编语言集成开发环境(IDE)。它由密苏里州立大学开发,基于 Java 环境运行,完全绿色且免费。我们的课程即使用此软件来进行 MIPS 汇编语言的学习、编写和运行。

在我们的实验中,选择 Mars 的原因主要有以下几点:


图为 MARS 界面

基础知识测试

存储方式

计算机中的数据存储主要有两种方式:大端存储和小端存储。在我们的实验中使用的就是小端存储。

自行查阅资料后回答以下问题:

假如我们采取小端存储的方式,将32位的数据0x12345678存储到内存中,首地址是0x00。那么,内存地址为0x02的这一字节中存储的数据是多少?

A. 0x12

B. 0x34

C. 0x56

D. 0x78

存储形式

在计算机的存储器中,包含着众多的小电路,通过为这些电路充电放电来实现数据的存储。那么在正逻辑的情况下,这些小电路是如何存储数据的呢?

A. 电路输出为高电平时,代表存储数据为1;电路输出为低电平时,代表存储数据为0;

B. 电路输出为高电平时,代表存储数据为0;电路输出为低电平时,代表存储数据为1;

答案:A

存储单位(字节)

下列16进制数中,______为一个字节。(32位机,一般情况下)

A. 0x01020304

B. 0x0102

C. 0x01

D. 0x01020304050607080919111213141516

存储单位(字)

下列16进制数中,_______为一个字。(32位机,一般情况下)

A. 0x01020304

B. 0x0102

C. 0x01

D. 0x01020304050607080910111213141516

答案:A

存储单位

填空

题目编号 712-586

在计算机中,数据存储的最小单位是位(bit),基本单位是字节(Byte),当然,除了他们之外,我们还经常使用字(Word),半字(Half-Word)等单位,那这些存储单位之间的关系是怎样的呢?请自行查阅资料后回答以下问题。

(1) 一个字节(Byte)等于多少位(bit)?(32位机,一般情况下)_______________________

(2) 一个字(Word)等于多少字节(Byte)?(32位机,一般情况下)_______________________

(3) 一个半字等于多少位(Bit)?(32位机,一般情况下)_______________________

答案:

(1) 8

(2) 4

(3) 16

寄存器简介

什么是寄存器?

寄存器是 CPU 的组成部分之一,是一种高速存储器(甚至是 CPU 可以使用的最高速的一种存储器),可以用来暂存指令,数据,地址等。由于寄存器的成本较高,一般的 CPU 中只有数量很有限的寄存器可供使用。

在 MIPS 体系结构中,CPU 对数据的操作均是基于寄存器的。内存中的数据需要先使用读取(load)类指令保存到寄存器才可使用。操作完成的数据也不能直接保存到内存中,需要使用装载(store)类指令保存至内存中。

在我们实验中的 CPU 是 32 位 CPU,一次能处理的最大位数即为 32 位,绝大部分寄存器也均是 1 字大小的(即 4 字节,也就是 32 位)。

MIPS 中的 32 个通用寄存器

在一般的(至少是本课程所需要用的)MIPS 汇编程序中,比较常用的是 32 个通用寄存器。所谓通用寄存器,代表它没有明确规定的用途,程序员可以随意对他们赋值、取值,同时他们的值也可以直接参与到各种指令之中。然而,虽然冠有通用的头衔,程序员们还是会以一定的规则来使用它们,这是为了便于程序员之间的交流,同时也是为编译器等工具定下了一定的标准。

这 32 个通用寄存器有两种命名方式,一种是按序号命名 $0~$31(注意前面有个美元的符号),一种就是按功能命名,如下表:

在这里插入图片描述

其中 usage 那一列可能暂时不好理解,没有关系,在之后的学习中会慢慢用到。特别地,对于 $0$1 两个寄存器:

三个特殊寄存器

CP0 寄存器

当我们的 CPU 设计推进到比较深入的阶段时,我们就需要对异常和中断进行处理,届时我们就会使用到 CP0 寄存器。

CP0 是一个系统控制协处理器,而 CP0 寄存器则是该协处理器工作时需要用到的一些寄存器。在我们的实验中,只会用到其中的 4 个寄存器:SR、Cause、EPC 和 PRId。

这里先介绍一下这几个寄存器的职能,具体细节在 P7 时会详细讲解。

上面所述的那些寄存器是 MIPS 体系结构和我们的课程中常用的重要的寄存器,他们都是 32 位的。但寄存器的范围很广,上述的寄存器只是他们的一部分。除他们以外,还有许多寄存器被用于临时之用,或许都没有名字,而他们的真正应用,需要同学们在自己设计 CPU 时自行合理安排。

寄存器的功能测试

寄存器的功能测试1

对于一些需要保存的数据,我们通常使用哪些寄存器进行保存?

A. $v0-$v1

B. $a0-$a3

C. $s0-$s7

D. $t0-$t7

答案:C

寄存器的功能测试2

通常用来保存返回地址的寄存器是哪一个?

A. $gp

B. $sp

C. $fp

D. $ra

答案:D

寄存器的功能测试3

通常用来保存函数返回值的寄存器是哪些?

A. $v0-$v1

B. $a0-$a3

C. $s0-$s7

D. $t0-$t7

答案:A

寄存器的功能测试4

通常若函数只需要传入三个变量,则这三个变量会被存在哪些寄存器中?

A. $a0-$a3

B. $s0-$s7

C. $sp

D. $fp

答案:A

寄存器的功能测试5

通常若函数需要传入十个变量,则会用到以下哪个寄存器来存储变量?

A. $sp

B. $gp

C. $ra

D. $fp

答案:A

参考资料

MIPS 指令集文档

MARS 相关

JAVA 运行环境

参考书目

标签:课程设计,汇编语言,32,PreProject,存储,2021,寄存器,MIPS,CPU
来源: https://blog.csdn.net/weixin_52635797/article/details/123050157