计算机组成原理MIPS有关例题,计算机组成原理学习笔记————计算机指令,MIPS指令集,存储器操作数,数据传送指令,取数存数指令...

计算机语言

现在计算机编程常用的语言是C,C++,Java等高级语言,但计算机第层是将高级编程语言的代码编译成二进制代码形式的指令才能执行。所以计算机语言中的基本单词是二进制形式的指令,一台计算机的全部指令称为该计算机的指令集。 二进制的指令是很难编写且理解的,所以在高级语言和二进制语言之间还有一个汇编语言,进行两者转换时的衔接。汇编语言与二进制语言存在着一一对应的关系。接下来要讲的指令就是汇编语言层面的指令。

MIPS操作数

MIPS是常用的一个指令集。有32个操作数。

名字

示例

注释

32个寄存器

$ s0~ $ s7, $ t0~ $ t9, $ zero, $ a0~$ a3, $ v0 ~ $ v1, $ gp, $ fp, $ sp, $ra, $at

寄存器用于数据的快速取.在MIPS中,只能对存放在寄存器中的数据执行算术操作,寄存器$ zero的值恒为0,寄存器$at被汇编器保留,用于处理大的常数

230个存储器字

Memory[0], Memory[4], …Memory[4294967292]

存储器只能通过数据传输指令访问。MIPS使用字节编址,所以连续的字地址相差4。存储器用于保存数据结构、数组和溢出的寄存器

计算机硬件的操作

计算机的指令一般有三个操作数:两个进行运算的数和一个保存结果的数。MIPS算术运算中指令的操作数必须来自寄存器。寄存器是硬件的基本构成元素,可以理解为用于暂存数据的一个存储单元。容量小但运行速度快。在MIPS体系结构中寄存器的大小为32位,计算机中的存储单元也经常以32位为一组,所以将32为一组的基本访问单位称为字。

在MIPS指令体系中用一个“ $ ”符号后面跟两个字符来代表一个寄存器。例如$ s0, $ t0 。

加法减法指令

加法指令格式: add $ t0, $ s1,$ s2

减法指令格式: sub $ t0, $ s1,$ s2

$ s1, $ s2为进行运算的两个寄存器,$ t0 是用来保存计算结果的寄存器。 运算操作数不能大于2个,寄存器不能只能为三个。

例题:729635790d4c758ca10beab8fdf62134.png

存储器操作数

因为MIPS只有32个寄存器,也就是一次最多只能存放32个数据,这肯定是远远不能满足需求的。有的时候我们用的数组或者结构这样的数据类型,存储的数据量就会大于32,那该如何访问和表示这样的结构呢?

因此除了寄存器外,还有一个存储器。存储器用来存放较大的数据结构。那么就需要一个指令来将数据从存储器中读取到寄存器中,或者从寄存器存储到存储器中。这就是数据传送指令。一个数据传送指令给出了存储器地址。

数据传送指令

数据传送指令:在存储器和寄存器之间移动数据的命令。

地址: 用于在存储器空间中知名某特定数据元素位置的值。

取数指令

取数指令(load,lw):从存储器读取数据复制到寄存器中的数据传送指令。取数指令的格式是操作码后接着目标寄存器,再后面是用来访问存储器的常数和寄存器。常数和第二寄存器中的值相加得到存储器地址

例如读取含有100个字的数组A中的第8个元素,数组A的起始地址(基址)存放在寄存器$ s3中。 指令为**lw $ t0, 8($ s3) ** 其中lw即为操作码 $ t0 为目标寄存器, 8为常数,即相对于数组A起始地址的偏移量, $ s3为要读取的寄存器。

基址寄存器: 存放基址的寄存器

当然,读取的寄存器不一定非得是数组的基址寄存器,还可以的一个变量的寄存器,比如:

lw $ t0 1($s3)

在MIPS体系结构中,连续字的地址相差4,因为一个字的地址由4个字节组成。因此在上面去A[ 8 ]的例子中,偏移量应该是4*8=32,所以正确的指令是lw $ t0, 32($ s3)

存数指令

有取数必定有存数,将数据从寄存器复制到存储器中。指令格式依旧是 操作码+目标寄存器+偏移量(基址寄存器) ,在MIPS中存数指令为sw,即store word。

例题:

假设变量h存放在寄存器$ s2中,数组A的基址放在$ s3中,试编译下面的C赋值语句:

A[ 12 ] = h + A[ 8 ] ;

答案如下:

lw $ t0, 32($ s3)

add $ t0, $ s2, $ t0

sw $ t0, 48($ s3)

8e827e667fb4114c8355e1f7ba7e175f.png

常数或立即数操作数

前面讲的都是关于变量的操作,即在计算机中有明确分配内存的数据,内存可能分配在存储器中,也可能分配在寄存器中。但有时我们需要用到一个常数,即没有分配内存,而直接使用的数,比如将某个变量加1,将数组下标加1.因此有了立即数加法,addi。指令示例如下:

addi $ s3 , $ s3 , 4 即 $ s3 = $ s3 + 4

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值