MIPS系统指令系统超详细
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
32位为字长。MIPS体系中的数据字、指令字都是32位。 MIPS寄存器汇编符号记为$s0、$s1、 $s2、$s3 …$s7,
对应编码为:16、17、… 23; 以及$t0、$t1、 $t2、 $t3 …$t7,对应编码为:8、9、… 15。
寄存器和编程语言的变量的一个主要区别是,寄存器数 量有限,现在的计算机中一般是32个。MIPS也只有32个寄 存器。为什么限于32个寄存器?
【解答】
操作数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中
① offset为偏移量,是数组首地址到数组中某元素存储位置的 字节偏移量,是一个常数。
② rs是存储数组首地址的寄存器,称为基址寄存器 ③ rt为目的操作数寄存器,存放取自【(rs)+offset】的数据 注意:offset(rt)表示存放数据的内存单元地址,即内存地址。
例3.4 编译有一个操作数在内存中的C语言赋值语句: g = h + A[8]; 设数组A[100]
例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)的形式实现取数指令:
③该指令执行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中
op
rs
rt
rd shamt funct
6位
5位
5位
5位
5位
6位
这些字段的意义是: op:指令的操作码,传统上称为opcode,此处为0。
rs:表示第1个源操作数的寄存器。
rt:表示第2个源操作数的寄存器。
rd:表示目的操作数的寄存器,用来保存操作的结果。
通过学习机器指令,你会了解到计算机中的 一个重要概念:存储程序(stored-rogram)
着重介绍的是MIPS指令集 ,涉及到MIPS指令的操 作数、指令格式及指令类别
一、指令系统的发展
1、CISC---复杂指令系统计算机
Complex Instruction Set Computer,20世纪60年代后期,随 着IC、LSI、VLSI的出现和发展,计算机硬件成本不断下降,人们热 衷于在指令系统真增加更多的指令和复杂的指令,来提高操作系统的 效率,促使指令系统越来越复杂,这一时期的计算机称为CISC。
三、MIPS简介
1、处理器的缩写 ① Million Instruction Per Second,泛指每秒能执行百万条指令的处理器 ② Microprocessor without Interlocking Pipeline Stage,
一种无内锁的流水线微处理器 2、MIPS公司
3.2 计算机硬件的操作指令
例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]中
硬件/软件接口 编译器不仅把变量同寄存器联系起来,还为数 组和结构这样的数据结构分配内存空间。这样,编译器就能 把恰当的基地址放入数据传送指令中。
二、操作数在内存单元中
计算机如何表示和存取数组这样的复杂数据结构呢?
处理器只能在寄存器中保存很少的数据,而内存则可以存放 数以百万计的数据单元。因此,数组这样的数据结构存放在 内存中。
最后把A[i]和h加起来,放到变量g中: add $s1, $s2, $t0 # g = h + A[i]
四、软硬件接口:溢出(spilling)寄存器
很多程序中变量的数量比寄存器的数量多。因此, 编译器尽量把使用最频繁的变量保持在寄存器中,而把 其余的放在内存中,并用取数和存储指令在寄存器和内 存之间传送数据。将不常用或是以后才用到的变量存入 内存的过程称为溢出(spilling)寄存器。
数据传送指令中的常量称为偏移量(offset),用来计 算地址的寄存器称为基地址寄存器(base register)。
内存有效地址EA=offset(偏移量)+ rs(基地址寄存器)
2、存字指令(Store Word)SW
指令格式: sw rt, offset(rs) #注释 指令功能:将rt寄存器中的数据存入【(rs)+offset】内存单元 注意事项:同lw指令
2、地址码 根据一条指令中有几个操作数地址,可将该指令称为几地
址指令,一般有三地址指令、二地址指令、一地址指令和零地 址指令格式:
OP
OP
A
OP OP
A1
A1
A2
A2 A3
三、MIPS算术运算指令
1、加法指令 add rd, rs, rt
#注释
①每条指令只执行一个操作,并且有且只有三个变量
②书写时,每一行只有一条指令,注释放在行尾,由#号引出
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]
2、RISC---精简指令系统计算机
Reduced Instruction Set Computer ,1975年IBM公司开始研 究指令系统的合理性问题,IBM的John Cocke提出精简指令的想法, 本书作者David A. Patterson创造了RISC一词,并定义了其含义,后 来John L. Hennessy带领他在斯坦福的研究小组研制成功MIPS机, 精简指令系统计算机从此诞生并发展起来。
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汇 编指令
二、RISC的特点
1、优先选取一些使用频率最高的简单指令,以及一些很有用但不 复杂的指令,避免复杂指令。
2、指令长度固定,指令格式种类少,寻址方式种类少,指令各字 段的划分比较一致,各字段功能较规整。
3、只有存数、取数指令访问存储器,其余指令的操作都在寄存器 之间进行。
4、CPU中通用寄存器数量较多。
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个操作数,不多 也不少,这是遵循简化硬件的原则,因为操作数的个数不定 的硬件实现比个数固定的硬件实现复杂得多。这就是硬件设 计要考虑的第一条原则:
一、指令的基本格式
指令格式,是指令用二进制代码表示的结构形式,通常有 操作码字段和地址码字段组成。操作码表示指令的操作特性和 功能,而地址码通常指定参与操作的操作数的地址,故指令基 本格式如下:
OP
A
1、操作码
操作码字段的位数取决于指令系统的规模,例如,只有8条 指令的指令系统,OP字段有3位就够了,如果系统包含32条指令, 则OP字段需要5位操作码。一般来说一个包含n位的操作码能够 表示2n条指令。
设计原则1:简单性来自规则性。(Simplicity favors regularity. )
3.3 计算机硬件的操作数
计算机硬件的操作数放在什么地方? cpu的寄存器(register) 中---寄存器操作数
寄存器是建造计算机的基石,因为它们是硬件设计中用到 的基本单元,对于程序员也是可见的,但其数量有限。 存储器中---存储器操作数
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
五、小结
P83 图3—4,指令与操作数小结
3.4 指令的计算机内部表示
计算机如何识别和解释指令呢?首先要了解机器指令的 表示。
在计算机内部,指令体现为二进制数,由连续的0,1串组 成,计算机为了识别指令,会将这个32位的二进制数分成几 个字段,用来表示不同的信息,如表示操作码、寄存器号等。 机器指令格式以二进制表示:
第三章 指令系统
3.1 概述 3.2 计算机硬件的操作 3.3 计算机硬件的操作数 3.4 指令的计算机内部表示 3.5 决策指令 3.6 计算机硬件对过程的支持 3.7 计算机对字符的处理(略去) 3.8 MIPS的其他寻址方式
3.1 概述
要给计算机硬件直接下命令,就必须使用机器 的语言。机器语言中的“单词”称为指令,其“词 汇表”称为指令集。本章将介绍现实中计算机所使 用的指令集系统。
内存单元用地址编号表示,叫内存地址 ,例:
实际MIPS内存地址:一个字=4字节表示,按字节编址:
字节寻址还影响数组的索引。要得到正确的地址,加到基 址上的偏移量应该乘以4。
三、数据传送指令 : LW与 SW
1、取字指令(Load Word)LW 指令格式: Lw rt, offset(rs) #注释
复杂数据结构,如数组、结构体等包含大量数据元素,不 可能映射到数量有限的寄存器上,只能存储到存储器中。
指令中---立即数 有些操作数直接与指令存放在一起,称为立即数,而
MIPS中专门设置有一Baidu Nhomakorabea立即数指令,如addi,slti等。
一、MIPS的寄存器 在MIPS体系结构中,一个寄存器的长度是32位;又称
对应编码为:16、17、… 23; 以及$t0、$t1、 $t2、 $t3 …$t7,对应编码为:8、9、… 15。
寄存器和编程语言的变量的一个主要区别是,寄存器数 量有限,现在的计算机中一般是32个。MIPS也只有32个寄 存器。为什么限于32个寄存器?
【解答】
操作数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中
① offset为偏移量,是数组首地址到数组中某元素存储位置的 字节偏移量,是一个常数。
② rs是存储数组首地址的寄存器,称为基址寄存器 ③ rt为目的操作数寄存器,存放取自【(rs)+offset】的数据 注意:offset(rt)表示存放数据的内存单元地址,即内存地址。
例3.4 编译有一个操作数在内存中的C语言赋值语句: g = h + A[8]; 设数组A[100]
例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)的形式实现取数指令:
③该指令执行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中
op
rs
rt
rd shamt funct
6位
5位
5位
5位
5位
6位
这些字段的意义是: op:指令的操作码,传统上称为opcode,此处为0。
rs:表示第1个源操作数的寄存器。
rt:表示第2个源操作数的寄存器。
rd:表示目的操作数的寄存器,用来保存操作的结果。
通过学习机器指令,你会了解到计算机中的 一个重要概念:存储程序(stored-rogram)
着重介绍的是MIPS指令集 ,涉及到MIPS指令的操 作数、指令格式及指令类别
一、指令系统的发展
1、CISC---复杂指令系统计算机
Complex Instruction Set Computer,20世纪60年代后期,随 着IC、LSI、VLSI的出现和发展,计算机硬件成本不断下降,人们热 衷于在指令系统真增加更多的指令和复杂的指令,来提高操作系统的 效率,促使指令系统越来越复杂,这一时期的计算机称为CISC。
三、MIPS简介
1、处理器的缩写 ① Million Instruction Per Second,泛指每秒能执行百万条指令的处理器 ② Microprocessor without Interlocking Pipeline Stage,
一种无内锁的流水线微处理器 2、MIPS公司
3.2 计算机硬件的操作指令
例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]中
硬件/软件接口 编译器不仅把变量同寄存器联系起来,还为数 组和结构这样的数据结构分配内存空间。这样,编译器就能 把恰当的基地址放入数据传送指令中。
二、操作数在内存单元中
计算机如何表示和存取数组这样的复杂数据结构呢?
处理器只能在寄存器中保存很少的数据,而内存则可以存放 数以百万计的数据单元。因此,数组这样的数据结构存放在 内存中。
最后把A[i]和h加起来,放到变量g中: add $s1, $s2, $t0 # g = h + A[i]
四、软硬件接口:溢出(spilling)寄存器
很多程序中变量的数量比寄存器的数量多。因此, 编译器尽量把使用最频繁的变量保持在寄存器中,而把 其余的放在内存中,并用取数和存储指令在寄存器和内 存之间传送数据。将不常用或是以后才用到的变量存入 内存的过程称为溢出(spilling)寄存器。
数据传送指令中的常量称为偏移量(offset),用来计 算地址的寄存器称为基地址寄存器(base register)。
内存有效地址EA=offset(偏移量)+ rs(基地址寄存器)
2、存字指令(Store Word)SW
指令格式: sw rt, offset(rs) #注释 指令功能:将rt寄存器中的数据存入【(rs)+offset】内存单元 注意事项:同lw指令
2、地址码 根据一条指令中有几个操作数地址,可将该指令称为几地
址指令,一般有三地址指令、二地址指令、一地址指令和零地 址指令格式:
OP
OP
A
OP OP
A1
A1
A2
A2 A3
三、MIPS算术运算指令
1、加法指令 add rd, rs, rt
#注释
①每条指令只执行一个操作,并且有且只有三个变量
②书写时,每一行只有一条指令,注释放在行尾,由#号引出
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]
2、RISC---精简指令系统计算机
Reduced Instruction Set Computer ,1975年IBM公司开始研 究指令系统的合理性问题,IBM的John Cocke提出精简指令的想法, 本书作者David A. Patterson创造了RISC一词,并定义了其含义,后 来John L. Hennessy带领他在斯坦福的研究小组研制成功MIPS机, 精简指令系统计算机从此诞生并发展起来。
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汇 编指令
二、RISC的特点
1、优先选取一些使用频率最高的简单指令,以及一些很有用但不 复杂的指令,避免复杂指令。
2、指令长度固定,指令格式种类少,寻址方式种类少,指令各字 段的划分比较一致,各字段功能较规整。
3、只有存数、取数指令访问存储器,其余指令的操作都在寄存器 之间进行。
4、CPU中通用寄存器数量较多。
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个操作数,不多 也不少,这是遵循简化硬件的原则,因为操作数的个数不定 的硬件实现比个数固定的硬件实现复杂得多。这就是硬件设 计要考虑的第一条原则:
一、指令的基本格式
指令格式,是指令用二进制代码表示的结构形式,通常有 操作码字段和地址码字段组成。操作码表示指令的操作特性和 功能,而地址码通常指定参与操作的操作数的地址,故指令基 本格式如下:
OP
A
1、操作码
操作码字段的位数取决于指令系统的规模,例如,只有8条 指令的指令系统,OP字段有3位就够了,如果系统包含32条指令, 则OP字段需要5位操作码。一般来说一个包含n位的操作码能够 表示2n条指令。
设计原则1:简单性来自规则性。(Simplicity favors regularity. )
3.3 计算机硬件的操作数
计算机硬件的操作数放在什么地方? cpu的寄存器(register) 中---寄存器操作数
寄存器是建造计算机的基石,因为它们是硬件设计中用到 的基本单元,对于程序员也是可见的,但其数量有限。 存储器中---存储器操作数
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
五、小结
P83 图3—4,指令与操作数小结
3.4 指令的计算机内部表示
计算机如何识别和解释指令呢?首先要了解机器指令的 表示。
在计算机内部,指令体现为二进制数,由连续的0,1串组 成,计算机为了识别指令,会将这个32位的二进制数分成几 个字段,用来表示不同的信息,如表示操作码、寄存器号等。 机器指令格式以二进制表示:
第三章 指令系统
3.1 概述 3.2 计算机硬件的操作 3.3 计算机硬件的操作数 3.4 指令的计算机内部表示 3.5 决策指令 3.6 计算机硬件对过程的支持 3.7 计算机对字符的处理(略去) 3.8 MIPS的其他寻址方式
3.1 概述
要给计算机硬件直接下命令,就必须使用机器 的语言。机器语言中的“单词”称为指令,其“词 汇表”称为指令集。本章将介绍现实中计算机所使 用的指令集系统。
内存单元用地址编号表示,叫内存地址 ,例:
实际MIPS内存地址:一个字=4字节表示,按字节编址:
字节寻址还影响数组的索引。要得到正确的地址,加到基 址上的偏移量应该乘以4。
三、数据传送指令 : LW与 SW
1、取字指令(Load Word)LW 指令格式: Lw rt, offset(rs) #注释
复杂数据结构,如数组、结构体等包含大量数据元素,不 可能映射到数量有限的寄存器上,只能存储到存储器中。
指令中---立即数 有些操作数直接与指令存放在一起,称为立即数,而
MIPS中专门设置有一Baidu Nhomakorabea立即数指令,如addi,slti等。
一、MIPS的寄存器 在MIPS体系结构中,一个寄存器的长度是32位;又称