当前位置:文档之家› MIPS系统指令系统详细

MIPS系统指令系统详细


000000 10001 10010 01000 00000 100000
6位
5位
5位
5位
5位
6位
MIPS汇编指令如下所示: add $t0, $s1, $s2 二进制表示为:00000010001100100100000000100000
一、 R型指令格式
31…….26 25……….21 20………..16 15……..11 10………6 5………….0
内存单元用地址编号表示,叫内存地址 ,例:
实际MIPS内存地址:一个字=4字节表示,按字节编址:
字节寻址还影响数组的索引。要得到正确的地址,加到基 址上的偏移量应该乘以4。
三、数据传送指令 : LW与 SW
1、取字指令(Load Word)LW 指令格式: Lw rt, offset(rs) #注释
2、RISC---精简指令系统计算机
Reduced Instruction Set Computer ,1975年IBM公司开始研 究指令系统的合理性问题,IBM的John Cocke提出精简指令的想法, 本书作者David A. Patterson创造了RISC一词,并定义了其含义,后 来John L. Hennessy带领他在斯坦福的研究小组研制成功MIPS机, 精简指令系统计算机从此诞生并发展起来。
三、MIPS简介
1、处理器的缩写 ① Million Instruction Per Second,泛指每秒能执行百万条指令的处理器 ② Microprocessor without Interlocking Pipeline Stage,
一种无内锁的流水线微处理器 2、MIPS公司
3.2 计算机硬件的操作指令
一、指令的基本格式
指令格式,是指令用二进制代码表示的结构形式,通常有 操作码字段和地址码字段组成。操作码表示指令的操作特性和 功能,而地址码通常指定参与操作的操作数的地址,故指令基 本格式如下:
OP
A
1、操作码
操作码字段的位数取决于指令系统的规模,例如,只有8条 指令的指令系统,OP字段有3位就够了,如果系统包含32条指令, 则OP字段需要5位操作码。一般来说一个包含n位的操作码能够 表示2n条指令。
【解答】
操作数A[8]在内存中,首先得把它转移到寄存器中。它 的地址是数组A的基地址加上8*4的和。 假设$s3存放数组A的 基地址,g对应$s1寄存器,h对应$s2寄存器。
lw $t0, 32($s3) # 临时寄存器$t0存放A[8]的值 add $s1, $s2, $t0 # g = h + A[8]
原因可以从硬件设计的第二条原则找到:
设计原则2:越小越快。(Smaller is faster. ) 寄存器的数量如果很大,则电信号需要传输的距离更长,
因而时钟周期也会变得很长。
例3.3 使用寄存器编译C语言赋值语句
以上例C语言赋值语句为例: f = (g + h) – (i + j);
为变量f, g, h, i, j分别指定寄存器$s0, $s1, $s2, $s3, $s4 而临时变量指定寄存器$t0,$t1,则MIPS 汇编符号 指令 : add $t0, $s1, $s2 # 寄存器$t0中包含g + h的和 add $t1, $s3, $s4 # 寄存器$t1中包含i + j的和 sub $s0, $t0, $t1 # $t0 - $t1的差放入f中
2、地址码 根据一条指令中有几个操作数地址,可将该指令称为几地
址指令,一般有三地址指令、二地址指令、一地址指令和零地 址指令格式:
OP
OP
A
OP OP
A1
A1
A2
A2 A3
三、MIPS算术运算指令
1、加法指令 add rd, rs, rt
#注释
①每条指令只执行一个操作,并且有且只有三个变量
②书写时,每一行只有一条指令,注释放在行尾,由#号引出
③该指令执行rd=rs+rt的操作

例如:add a, b, c # b + c的和存放在a中
其中 add称操作符, 表示加运算;紧跟add的a是目的操作 数, 即为结果,其余b、c表示源操作数。每条指令中由 “#” 号领头的部分是注释。
例如: 计算 a=b+c+d+e;
add a,b,c # b + c的和存放在a中 add a,a,d # b + c + d的和已存放在a中 add a,a,e # b + c + d + e的和已存放在a中
二、RISC的特点
1、优先选取一些使用频率最高的简单指令,以及一些很有用但不 复杂的指令,避免复杂指令。
2、指令长度固定,指令格式种类少,寻址方式种类少,指令各字 段的划分比较一致,各字段功能较规整。
3、只有存数、取数指令访问存储器,其余指令的操作都在寄存器 之间进行。
4、CPU中通用寄存器数量较多。
第三章 指令系统
3.1 概述 3.2 计算机硬件的操作 3.3 计算机硬件的操作数 3.4 指令的计算机内部表示 3.5 决策指令 3.6 计算机硬件对过程的支持 3.7 计算机对字符的处理(略去) 3.8 MIPS的其他寻址方式
3.1 概述
要给计算机硬件直接下命令,就必须使用机器 的语言。机器语言中的“单词”称为指令,其“词 汇表”称为指令集。本章将介绍现实中计算机所使 用的指令集系统。
例3.6 使用可变数组下标进行编译
假设A是100个元素的数组,基地址在寄存器$s3中,变量g, h, i分别和寄存器$s1,$s2,$s4相联系。写出下面的C语句的 MIPS汇编代码:
g = h + A[i]
【解答】
为了能从A[i]中取出数据,首先要得到A[i]的内存地址,且 必须以offset(rs)的形式体现。通过计算A+4*i可得A[i]的内存地 址,将其放入基址寄存器,这样只要令偏移量offset为0,即可 以offset(rs)的形式实现取数指令:
通过学习机器指令,你会了解到计算机中的 一个重要概念:存储程序(stored-rogram)
着重介绍的是MIPS指令集 ,涉及到MIPS指令的操 作数、指令格式及指令类别
一、指令系统的发展
1、CISC---复杂指令系统计算机
Complex Instruction Set Computer,20世纪60年代后期,随 着IC、LSI、VLSI的出现和发展,计算机硬件成本不断下降,人们热 衷于在指令系统真增加更多的指令和复杂的指令,来提高操作系统的 效率,促使指令系统越来越复杂,这一时期的计算机称为CISC。
2、减法指令 sub rd, rs, rt
#注释
例3.1 把两个C语言赋值语句编译成MIPS汇编指令 下面这段C语言代码包含5个变量a, b, c, d, e: a = b + c; d = a – e;
【解答】 add a, b, c sub d, a, e
# a=b+c #d=a–e
例3.2 把一个复杂的C语言赋值语句编译成MIPS汇 编指令
add $t1, $s4, $s4 # 临时寄存器$t1 = 2 * i add $t1, $t1, $t1 # 临时寄存器$t1 = 4 * i add $t1, $t1, $s3 # 临时寄存器$t1 = A[i]的地址(4*i+$s3)
然后把A[i]取到临时寄存器中: lw $t0, 0($t1) # 临时寄存器$t0 = A[i]
f = (g + h) – (i + j);
【解答】 add t0, g, h # 临时变量t0=g + h的和 add t1, i, j # 临时变量t1=i + j的和
最后做减法,把差放在f中: sub f, t0, t1 # f=t0 - t1的值
完成一个类似于加法的操作需要3个操作数:2个数参与 运算,1个数存放结果。每条指令刚好包含3个操作数,不多 也不少,这是遵循简化硬件的原则,因为操作数的个数不定 的硬件实现比个数固定的硬件实现复杂得多。这就是硬件设 计要考虑的第一条原则:
数据传送指令中的常量称为偏移量(offset),用来计 算地址的寄存器称为基地址寄存器(base register)。
内存有效地址EA=offset(偏移量)+ rs(基地址寄存器)
2、存字指令(Store Word)SW
指令格式: sw rt, offset(rs) #注释 指令功能:将rt寄存器中的数据存入【(rs)+offset】内存单元 注意事项:同lw指令
例3.5 使用取指令和存储指令进行编译 : C语句: A[12] = h + A[8];
【解答】 首先应该使用lw指令将A[8]取到寄存器中,再做加法运
算,最后利用sw指令将和存入A[12]。假设变量h在$s2寄存 器中,数组A的基址在$s3中,则该C语句的MIPS汇编指令 代码如下:
lw $t0, 32($s3) # 临时寄存器$t0存放A[8]的值 add $t0, $s2, $t0 # 临时寄存器$t0存放h+A[8]的值 sw $t0, 48($s3) # 把h+A[8]的值存储到A[12]中
① offset为偏移量,是数组首地址到数组中某元素存储位置的 字节偏移量,是一个常数。
② rs是存储数组首地址的寄存器,称为基址寄存器 ③ rt为目的操作数寄存器,存放取自【(rs)+offset】的数据 注意:offset(rt)表示存放数据的内存单元地址,即内存地址。
例3.4 编译有一个操作数在内存中的C语言赋值语句: g = h + A[8]; 设数组A[100]
op
rs
rt
rd shamt funct
相关主题