MIPS-mini指令集手册
盖了功能访运分跳 每编码 格式 描述 操作
示例 约束
编码
格式 描述
操作
示例 其他
本文从MIP 了MIPS 指令分类 指令类型访存
I-TYPE I-TYPE 运算
R-TYP R-TYP R-TYP 分支 I-TYPE 跳转
J-TYPE 每条指令具体表2:lw
31 26 lw 100011
6 lw rt, offset(GPR[rt] ← m Addr ← GPR GPR[rt] ← m lw $v1, 8($s Addr 必须是否则产生地表4:31 26 25 2special 000000
rs
6 5 add rd, rs, rt GPR[rd] temp ← (GP (GPR[rt]31||G if temp 32 ≠ te Signa else GPR[r add $s1, $s2不考虑溢出PS 指令集中选令集中典型的型 助记符
E LW E
SW
PE ADD
PE SUB PE
OR E BEQ 等E
J
体的指令编码w 加载字 25 21 20 base
rt
5 5 (base)
memory[GPR[b R[base] + sign_memory[Addr] 0)
是4的倍数(即Ad 地址错误异常
add 加 21 20 16 15 1rt rd
5 5
GPR[rs]+GPR[PR[rs]31||GPR[rs GPR[rt])
emp 31 then
alException(Int rd] ← temp 31..0 , $s3 。
MIPS 选择了7条典R-TYPE 指令表1
功能 OPC 加载字 存储字 加 减 或 等于转移跳转
码、指令功能 16 15 offset
16
base]+offset] _ext(offset)
ddr 1..0必须为00 11 10 6 5 0 00000ad 100 5 6[rt] s]) + tegerOverflow)
S-mini 指典型的指令构令、I-TYPE 1 MIPS-mini CODE/FUNCT (16 进制) 23H 2BH 0/20H 0/22H 0/25H 4H 2H
能以及约束如 00), 0dd
0000
)
编码格式描述操作示例其他
编码格式描述操作示例约束指令集
构成了MIPS 指令、J-TY 指令集 T
(R[rt] = Me Mem[ GPR GPR[rd] =GPR[rd] =GPR[rd] = if (GPR[rs]PC = PC PC= JumpA 如表2至表8所 表3: 码
31 26 25special 000000
6 式or rd, rs, r 述GPR[rd] 作GPR[rd] 例or $s1, $s 他
码
31 26sw 101011
6 式sw rt, offse 述memory[GP 作
Addr ← GP memory[A 例sw $v1, 8($束Addr 必须是否则产生地S-mini 指令集PE 指令,如操作
(VerilogHDL 语em[ GPR[rs]+si R[rs]+sign_ext(GPR[rs] + GPR GPR[rs] - GPR GPR[rs] | GPR ] == GPR[rt]) C + 4 + BranchA Addr
所示。
sw 存储字
表5:or 或
5 21 20 1
6 15 1rs rt rd
5 5 5 rt
← GPR[rs] OR ← GPR[rs] OR 2, $s3 6 25 21 20 base
rt
5 5 t(base)
PR[base]+offse PR[base] + sign ddr] ← GPR[rt $s0)
是4的倍数(即A 地址错误异常 集。
MIPS-mi 如表1所示。
语法描述)
ign_ext(offset) (offset) ] = R[R[rt] R[rt] R[rt] Addr 11 10 6 5 0 00000 o
100 5 6
R GPR[rt] R GPR[rt] 16 15 offse 16 et] ← GPR[rt] n_ext(offset) t] Addr1..0必须为
ni 涵
] [rt] 0
or 0101
6 0
et
为00),
编码
格式描述
操作
示例其他31 26 25
special
000000
6
sub rd,
GPR[rd]
temp←{G
{
if temp32
SignalE
else
GPR[rd]
endif
sub $s1,
temp32≠ te
不考虑溢出
编码
格式
描述
操作
示例
其他
表6:sub减
5 21 20 1
6 15
rs rt rd
5 5 5
rs, rt
← GPR[rs] >
GPR[RS]31,GPR
{GPR[rt]31 ,GP
≠ temp31 then
xception ( Integ
] ← temp 31…
$s2, $s3
emp31 代表计算
出。
31 26 2
j
000010
6
j target
J指令是PC
可以在当前P
PC ←{ (P
j Loop_End
如果需要跳转
11 10 6 5
d
00000 1
5 5
>> GPR[rt]
R[rs]}–
R[rt] }
gerOverflow )
算结果溢出。
表
25
相关的转移指
PC所在的256
PC31 . . 28), i
d
转范围超出了当
sub
00010
6
编码
格式
描述
操作
示例
其他
8:J跳转
instr_in
26
指令。
当把4GB
6MB区域内任
instr_index, 2
当前PC所在的
表7:be
码
31 26 2
beq
000100
6
式beq rs,
述If ( GPR[r
作
If ( GPR[r
PC←PC
else
PC ← P
例beq $s1
他
转
ndex
6
B划分为16
意跳转。
2’b00 }
的256MB区域
eq相等转移
25 21 20 1
rs rt
5 5
rt, offset
rs] == GPR[rt]
rs] == GPR
C+4 + sign_ext
PC + 4
, $s2, -2
个256MB区域,
内时,可以使J
16 15 0
offset
16
) then 转移
R[rt] )
tend( offset||02 )
,j指令
JR指令。
移
)。
mips汇编指令集功能的介绍
知道了什幺是指令集,这个时候还有一个概念就是编译。
编译其实就是把高级语言编程机器语言。也就是二进制的东西。烧录
openwrt的时候,用hex编辑器打开看看,里面全是二进制代码,这些就是翻
译后的机器语言。(当然,固件中处理指令集后,还有数据,数据就是普通的
资源文件,不会去控制cpu)。
因为更多的寄存器需要更多的指令空间对寄存器编码,也会增加上下
文切换的负担。
于一条指令集;(这里不讨论什幺汉字是笔画组成的,形象的比喻而已)
但是无论汉语和英语,都能实现人类基本交流。
例如:英语虽然只有26个字母,但是汉字却有几千个。但是有时候
翻译表达同一个意思,往往比中文要复杂。比如中文的诗句,简单的几个汉
字,就可以描述此次此刻的心境。
指令集就是cpu能读懂的指令,命令,就是人们预先定义好的,控制
MIPS指令集就是MIPS架构的CPU能读懂的语言。
MIPS汇编
MIPS指令集
MIPS指令集属于精简指令集
MIPS的所有指令都是32位,指令格式简单,而X86的指令长度不
是固定的。
简单的指令和格式易于译码和流水线操作,但是代码密度不高,导致
二进制ቤተ መጻሕፍቲ ባይዱ件大
MIPS有32个通用寄存器REG,为什幺是32个而不是更多呢?
mips汇编指令集功能的介绍
简单来说,指令集就是CPU能看得懂的语音,可以称之为机器语
言。
CPU指令集主要包括CISC(复杂指令集)和RISC(精简指令集)。
形象点说,
CISC类似于汉语,每一句话都是由汉字组成,而每一个汉字就相当
于一条指令集;
RISC类似于英语,每一句话都是由字母组成,而每一个字母就相当
MIPS基准指令集手册
第一届全国大学生计算机系统能力培养大赛基础指令集规范(v1.00)第一届全国大学生计算机系统能力培养大赛(以下简称“大赛”)技术方案中要求各参赛队开发支持MIPS 基准指令集的MIPS微系统。
本文档对需要支持的MIPS基准指令集进行明确规定。
各参赛队提交的设计作品必须实现本文档中的所有内容,但不限于。
如果发现本文档中有定义不精确之处,请查阅参考文献[1-3]中的相关章节;如发现两者存在冲突,以参考文献[1-3]中的内容为准。
本文档定义的MIPS基准指令集是在MIPS32指令集基础之上进行一定程度地裁剪,在控制系统设计规模的前提下,保证最简单系统的可实现性。
概要来说,这套指令集包含了所有非浮点MIPS I指令和MIPS32中的ERET指令,少量的CP0寄存器以支持中断和系统调用,不实现TLB MMU和特权等级。
本文档包含如下章节:第1章,“编程模型”,对支持的数据类型、软件可见寄存器、大小尾端进行定义。
第2章,“操作模式”,对处理器需要支持的操作模式进行定义。
第2章,“指令定义”,对需实现指令逐条定义。
第3章,“存储管理”,定义一套线性虚实地址映射机制。
第4章,“中断与例外”,介绍需实现的中断和例外的相关定义。
第5章,“系统控制寄存器”,对需实现的系统控制寄存器(俗称CP0寄存器)逐个进行定义。
1编程模型1.1 数据格式处理器可处理的数据格式定义如下:◆比特(bit, b)◆字节(Byte, 8bits, B)◆半字(Halfword, 16bits, H)◆字(Word, 32bits, W)1.2 寄存器处理器包含的软件可见的寄存器种类如下:◆32个32位通用寄存器,r0~r31。
其中有两个被赋予了特殊含义:r0,0号通用寄存器,值永远为0;r31,31号通用寄存器,被JAL,BLTZAL和BGEZAL指令隐式的用作目标寄存器,存放返回地址。
◆HI/LO寄存器。
HI寄存器存放乘法指令结果的高半部分或是除法指令结果的余数,LO寄存器存放乘法指令结果的低半部分或是除法指令结果的商。
MIPS指令集汇总(2021年整理精品文档)
MIPS指令集汇总编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(MIPS指令集汇总)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为MIPS指令集汇总的全部内容。
令功能应用实例LB从存储器中读取一个字节的数据到寄存器中LB R1,0(R2)LH从存储器中读取半个字的数据到寄存器中LH R1, 0(R2)LW从存储器中读取一个字的数据到寄存器中LW R1, 0(R2)LD从存储器中读取双字的数据到寄存器中LD R1, 0(R2)L。
S从存储器中读取单精度浮点数到寄存器中L.S R1,0(R2)L.D从存储器中读取双精度浮点数到寄存器中L。
D R1,0(R2)LBU功能与LB指令相同,但读出的是不带符号的数据功能与LH指令相同,但读出的是不带符号的数据LHU R1, 0(R2)LWU功能与LW指令相同,但读出的是不带符号的数据LWU R1, 0(R2)SB把一个字节的数据从寄存器存储到存储器中SB R1,0(R2)SH把半个字节的数据从寄存器存储到存储器中SH R1,0(R2)SW把一个字的数据从寄存器存储到存储器中SW R1, 0(R2)SD把两个字节的数据从寄存器存储到存储器中SD R1,0(R2)S.S把单精度浮点数从寄存器存储到存储器中S.S R1,0(R2)S。
D把双精度数据从存储器存储到存储器中把两个定点寄存器的内容相加,也就是定点加DADD R1,R2,R3DADDI把一个寄存器的内容加上一个立即数DADDI R1,R2,#3DADDU不带符号的加DADDU R1,R2,R3DADDIU把一个寄存器的内容加上一个无符号的立即数DADDIU R1,R2,#3ADD.S把一个单精度浮点数加上一个双精度浮点数,结果是单精度浮点数ADD。
mips指令集(24条指令)的字段和功能描述
MIPS指令集(24条指令)的字段和功能描述指令集概述M I PS(M ic ro pr oc es s or wi th ou tI nt erl o ck ed Pi pe li ne dSt a ge s)指令集是一种精简指令集(R IS C)体系结构,广泛应用于计算机体系结构的教学和实践中。
本文将介绍M IP S指令集中的24条常用指令,并对它们的字段和功能进行详细描述。
加载和存储指令1.l w指令字段描述:-指令格式:lw$r t,o f fs et($rs)-r s(源寄存器):指定存储单元的基址寄存器-r t(目标寄存器):指定目标寄存器,用于存储从存储单元中加载的数据-o ff se t:用于指定存储单元的偏移量,计算出实际地址功能描述:l w指令用于从存储单元中加载数据到目标寄存器。
它通过基址寄存器和偏移量计算出实际地址,并将存储单元中的数据加载到目标寄存器中。
2.s w指令字段描述:-指令格式:sw$r t,o f fs et($rs)-r s(源寄存器):指定存储单元的基址寄存器-r t(目标寄存器):指定源寄存器,用于存储到存储单元中的数据-o ff se t:用于指定存储单元的偏移量,计算出实际地址功能描述:s w指令用于将源寄存器中的数据存储到指定的存储单元中。
它通过基址寄存器和偏移量计算出实际地址,并将源寄存器中的数据存储到该地址对应的存储单元中。
算术和逻辑指令3.a d d指令字段描述:-指令格式:ad d$rd,$rs,$rt-r s(源寄存器1):参与运算的第一个源寄存器-r t(源寄存器2):参与运算的第二个源寄存器-r d(目标寄存器):用于存储运算结果功能描述:a d d指令用于将两个源寄存器中的数据相加,并将结果存储到目标寄存器中。
4.s u b指令字段描述:-指令格式:su b$rd,$rs,$rt-r s(源寄存器1):参与运算的第一个源寄存器-r t(源寄存器2):参与运算的第二个源寄存器-r d(目标寄存器):用于存储运算结果功能描述:s u b指令用于将源寄存器2中的数据从源寄存器1中的数据减去,并将结果存储到目标寄存器中。
MIPS指令集(共31条)
注意:因为MIPS16只有16个16位的寄存器,所以JAL指令中$31改成$15, 所有立即数均无需扩展,LUI指令直接就是将立即数付给RT寄存器。
$1=0
if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
sltu
000000
rs
rt
rd
00000
101011
sltu $1,$2,$3
if($2<$3)
$1=1 else
$1=0
if (rs < rt) rd=1 else rd=0 ;其中rs=$2,rt=$3, rd=$1
goto PC+4+40
if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2
slti
001010
rs
rt
immediate
slti $1,$2,10
if($2<10)
$1=1 else
$1=0
if (rs <(sign-extend)immediate) rt=1 else rt=0 ;
PC <- rs
I-type
op
rs
rt
immediate
addi
001000
rs
rt
immediate
addi $1,$2,100
$1=$2+100
rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2
addiu
001001
MIPS指令集
MIPS CPU的一次操作可加载或存储1到8个字节的数据。
由于乘法的结果返回的速度不足以使下一条指令能够自动得到这个结果,乘法结果寄存器是互锁的(interlocked)。
在乘法操作完成之前试图读取结果寄存器就是导致CPU停止运行,直到完成。
和其他一些更简单的RISC体系结构相比,MIPS体系结构的目标之一是:体系结构朝着64位发展,从而使得地址的段式结构变得没有任何必要。
(在64位版本的X86核PowerPC中还有这个负担)功能分组:空操作:nop、ssnop(不能和其他指令同时发射,至少需要一个时钟周期)寄存器间的数据传送指令:move、movf、movt、movn、movz(后四个为条件传递指令)常数加载指令:dla、la(获取某些标号地址或程序中变量地址的宏指令);dli、li(加载常数立即数指令);lui(加载高位立即数指令)算术/逻辑操作指令:addu、addiu、daddu,daddiu(加法指令);dsub、sub(会触发溢出陷入的减法操作);dsubu、subu(普通减法指令);abs、dabs(求绝对值操作);dneg、neg、dnegu、negu(一元非操作);and、andi、or、ori、xor、xori、nor、not(按位逻辑指令);drol、dror、rol、ror(循环左移和右移);dsll、dsll32、dsllv(64位左移,低位补零);dsra、dsra32、dsrav(64位算术右移指令);dsrl、dsrl32、dsrlv(64位逻辑右移指令);sll、sllv(32位左移指令);sra、srav(32位算术右移指令);srl、srlv(32位逻辑右移指令);slt、slti、sltiu、sltu(硬件指令,条件满足就写入1,否则写0);seq、sge、sgeu、sgt、sgtu、sle、slue、sne (根据更复杂的条件设置目的寄存器的宏指令)整数乘法、除法以及求余指令:ddiv、ddivu、div、divu(整数除法的3操作数宏指令分别处理64位或32位有符号或无符号数);divo、divou(明确该指令是带有溢出检查的除法指令);dmul、mul(3操作数64位或32位乘法指令,没有溢出检查);mulo、mulou、dmulo、dumlou(乘法宏指令,如果结果不能存入一个通用寄存器,发生溢出,触发异常);dmult、dmultu、mult、multu(执行有符号/无符号32/64位乘法的机器指令);drem、dremu、rem、remu(求余操作);mfhi、mflo、mthi、mtlo(用于访问整数乘除单元的结果寄存器hi和lo)存取指令(内存访问指令):lb、lbu(加载一个字节,高位可以补零,或进行符号扩展,以补充整个寄存器的长度);ld(加载一个双字);ldl、ldr、lwl、lwr、sdl、sdr、swl、swr(向左、向右加载、存储一个字、双字);lh、lhu(加载一个半字,高位可以补零,或进行符号扩展,以补充整个寄存器的长度);lw、lwu(加载一个字);pref、prefx(把数据预取到缓冲);sb、sd、sh、sw(存储字节、双字、半字、字);uld、ulh、ulhu、ulw、usd、usw、ush(地址非对齐的数据存取宏指令);l.d、l.s、s.d、s.s(存取双精度和单精度浮点数的指令,地址必须对齐);ldxcl、lwxcl、sdxcl、swxcl(采用基址寄存器+偏移寄存器的寻址方式存取指令);跳转、分支和子程序调用指令:j(无条件跳转到一个绝对地址,访问256M的代码空间);jal、jalr(直接或间接子程序调用,这种跳转不仅能跳转到指定地址,而且可以顺便把返回地址(当前指令地址+8)放到ra寄存器中);b(基于当前指令地址的无条件相对跳转);bal (基于当前地址的函数调用指令);bc0f、bc0f1、bc0t、bc0t1、bc2f、bc2f1、bc2t、bc2t1(根据协处理器0和2的条件标志进行跳转);bc1f、bc1f1、bc1t、bc1t1(根据浮点条件标志位进行跳转);beq、beq1、beqz、beqz1、bge、bge1、bgeu、bgeu1、bgez、bgez1、bgt、bgt1、bgtu、bgtu1、bgtz、bgtz1、ble、ble1、bleu、bleu1、blez、blez1、blt、blt1、bltu、bltu1、bltz、bltz1、bne、bnel、bnez、bnezl(双操作数和单操作数的比较跳转指令);bgeza1、bgeza11、bltza1、bltza11(如果需要,这些指令是用于有条件函数调用的原始机器指令);断点及陷阱指令:break(产生一个“断点”类型的异常);sdbbp(产生EJTAG异常的断点指令);syscall(产生一个约定用于系统调用的异常类型);teq、teqi、tge、tgei、tgeiu、tgeu、tlt、tlti、tltiu、tltu、tne、tnei(条件异常指令,对一个或两个操作数进行条件测试);协处理器0的功能:cfc0、ctc0(把数据拷进和拷出协处理器0的控制寄存器);mfc0、mtc0、dmfc0、dmtc0(在通用寄存器和协处理器0寄存器之间交换数据);cfc2、ctc2、dmfc2、dmtc2、mfc2、mtc2(协处理器2的指令)。
mips汇编指令手册
MIPS汇编指令手册是一本详细介绍MIPS架构下汇编语言的书籍。
它包含了所有MIPS处理器支持的指令,以及这些指令的具体用法和示例。
首先,我们需要了解什么是MIPS架构。
MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集计算机(RISC)架构,由斯坦福大学开发。
它的设计理念是简单、清晰和易于实现,这使得它在嵌入式系统和教育领域得到了广泛的应用。
在MIPS汇编指令手册中,我们可以看到各种类型的指令,包括数据传输指令、算术逻辑指令、控制流指令等。
每种指令都有其特定的格式和操作数,例如,数据传输指令通常包括一个源操作数和一个目标操作数,而算术逻辑指令则可能有一个或多个操作数。
在编写MIPS汇编程序时,我们需要遵循一定的规则。
首先,我们需要使用正确的指令格式。
其次,我们需要确保我们的程序没有语法错误。
最后,我们需要确保我们的程序能够正确地执行我们想要的操作。
在实际操作中,我们可以使用MIPS汇编器来编译我们的程序。
MIPS汇编器会将我们的汇编代码转换为机器代码,然后我们可以将这个机器代码加载到MIPS处理器上运行。
总的来说,MIPS汇编指令手册是学习和使用MIPS汇编语言的重要工具。
通过阅读和理解这本书,我们可以掌握MIPS汇编语言的基本知识和技能,从而能够编写出高效、可靠的MIPS 汇编程序。
c语言 mips指令
c语言 mips指令MIPS指令集是一种32位精简指令集(RISC)体系结构,它在计算机体系结构领域具有非常广泛的应用。
在编写C语言程序时,通常需要将高级语言的代码转化为MIPS指令集的汇编代码。
以下是一些关于C语言和MIPS指令集的相关参考内容,其中不包含链接的详细解释:1. C语言的数据类型映射到MIPS指令集的寄存器:- int类型通常映射到整数寄存器($t0-$t9)- float类型通常映射到浮点寄存器($f0-$f31)- char类型通常也映射到整数寄存器,但需要使用指令来执行字节操作2. C语言的条件语句(if-else语句)在MIPS指令集中的实现: - 使用比较指令(比如"slt", "sltu")将两个操作数进行比较- 根据比较的结果,使用分支指令(比如"beq", "bne", "j")跳转到不同的代码块- 可以使用标签(label)来标记不同的代码块,以便跳转3. C语言的循环语句(for循环、while循环)在MIPS指令集中的实现:- 使用比较指令判断循环条件,如果条件满足,则执行循环体内的指令- 在循环体内执行相应的操作,包括更新循环变量的值- 使用分支指令(比如"beq", "bne", "j")跳转到循环开头或循环结束的位置4. C语言的函数调用和参数传递在MIPS指令集中的实现:- 使用特殊的寄存器(比如$ra、$fp、$sp)来保存函数的返回地址、帧指针和栈指针- 将函数参数保存在寄存器或者栈中,并在函数内部使用它们- 使用分支指令跳转到函数的入口,执行函数体内的指令- 使用jr指令返回到调用函数的位置5. C语言中的数组和指针在MIPS指令集中的实现:- 使用基址寄存器(比如$gp)和偏移量来访问数组的元素- 使用la指令加载数组的地址到寄存器,使用lw和sw指令进行读取和存储操作- 使用指针变量保存地址,进行间接寻址操作6. C语言中的结构体和联合体在MIPS指令集中的实现:- 结构体和联合体的成员通常按照顺序在内存中排列- 使用指令来访问结构体和联合体的成员,比如使用lb和sb指令加载和存储字节型成员这些参考内容可以帮助程序员理解在C语言程序中,各种语法和语义对应着MIPS指令集的实现方式。
MIPS指令集汇总
MIPS指令集汇总以下是一些常用的MIPS指令:1.算术和逻辑操作:- add:将两个寄存器中的值相加,并将结果存储到目标寄存器中。
- sub:将第一个寄存器的值减去第二个寄存器的值,并将结果存储到目标寄存器中。
- mult:将两个寄存器中的值相乘,并将结果存储在两个特殊寄存器(HI和LO)中。
- div:将第一个寄存器的值除以第二个寄存器的值,并将结果存储在两个特殊寄存器(HI和LO)中。
- and:对两个寄存器中的值进行按位与操作,并将结果存储到目标寄存器中。
- or:对两个寄存器中的值进行按位或操作,并将结果存储到目标寄存器中。
- xor:对两个寄存器中的值进行按位异或操作,并将结果存储到目标寄存器中。
2.数据传输指令:- lw:从内存中加载一个字(4个字节)的数据到指定的寄存器中。
- sw:将指定寄存器中的数据存储到内存的指定位置中。
- lb:从内存中加载一个字节的数据到指定的寄存器中。
- sb:将指定寄存器中的数据的低8位存储到内存的指定位置中。
3.分支和跳转指令:- beq:如果两个寄存器中的值相等,则跳转到目标地址。
- bne:如果两个寄存器中的值不相等,则跳转到目标地址。
-j:无条件跳转到目标地址。
- jr:无条件跳转到一个寄存器中存储的地址。
- jal:有条件跳转到目标地址,并将返回地址保存在链接寄存器($ra)中。
4.系统调用指令:- syscall:执行一个系统调用,通过系统调用号(存储在$v0寄存器中)来定义执行的操作。
5.位移指令:- srl:对寄存器中的值进行逻辑右移。
- sll:对寄存器中的值进行逻辑左移。
- sra:对寄存器中的值进行算术右移。
除了上述指令外,还有一些其他的MIPS指令,如条件分支和加载延迟等。
此外,MIPS还支持浮点运算指令集(MIPS-FP),用于处理浮点运算。
总结起来,MIPS指令集包含了各种算术和逻辑操作、数据传输、分支和跳转、系统调用以及位移指令。
MIPS指令详解
MIPS指令详解计算机组成原理第五章指令系统5.6 MIPS指令详解1R 型指令000000R s R t shamt R d 6bits funct5bits 5bits 5bits 5bits 6bits R 型指令操作数和保存结果均通过寄存器进行;◆op :操作码,所有R 型指令中都全为0;◆rs :寄存器编号,对应第1个源操作数;◆rt :寄存器编号,对应第2个源操作数;◆rd :寄存器编号,据此保存结果;◆shamt :常数,在移位指令中使用;◆funct :功能码,指定指令的具体功能;1R型指令3寄存器R 型指令■R 型指令存在3种不同类型指令功能:$rd ← $rs op $rt指令[31:26][25:21][20:16][15:11][10:6][5:0]指令功能add 000000rs rt rd 00000100000寄存器加sub 000000rs rt rd 00000100010寄存器减and 000000rs rt rd 00000100100寄存器与or 000000rs rt rd 00000100101寄存器或xor000000rsrtrd00000100110寄存器异或1R 型指令1R型指令2寄存器R型指令指令[31:26][25:21][20:16][15:11][10:6][5:0]指令功能sll00000000000rt rd sa000000逻辑左移srl00000000000rt rd sa000010逻辑右移sra00000000000rt rd sa000011算术右移指令功能:$rd ← $rt shift sajr rs;1寄存器R 型指令指令[31:26][25:21][20:16][15:11][10:6][5:0]指令功能jr000000rs000000000000000001000寄存器跳转1R 型指令PC ← rs◆op :标识指令的操作功能;◆rs :第1个源操作数,是寄存器操作数;◆rt :目的寄存器编号,用来保存运算结果;◆imm :第2个源操作数,立即数;操作数中涉及立即数,结果保存到寄存器;OPRs R t6bits 立即数5bits 5bits 16bitsI 型指令2I 型指令指令[31:26][25:21][20:16][15:0]指令功能addi001000rs rt imm 寄存器和立即数“加”andi 001100rs rt imm 寄存器和立即数“与”ori 001101rs rt imm 寄存器和立即数“或”xori 001110rs rt imm 寄存器和立即数“异或”lw 100011rs rt imm 从存储器中读取数据sw 101011rs rt imm 把数据保存到存储器beq 000100rs rt imm 寄存器相等则转移bne 000101rsrt imm 寄存器不等则转移lui00111100000rt imm设置寄存器的高16位2I 型指令■I 型指令存在4种不同类型面向运算的I 型指令指令[31:26][25:21][20:16][15:0]指令功能addi 001000rs rt imm 寄存器和立即数“加”andi 001100rs rt imm 寄存器和立即数“与”ori 001101rs rt imm 寄存器和立即数“或”xori001110rsrtimm寄存器和立即数“异或”addi/andi/ori/xorirt, rs, imm; # $rt ← $rs op E(imm)2I 型指令第一条指令是进行符号扩展,其余是0扩展面向访存的I 型指令指令[31:26][25:21][20:16][15:0]指令功能lw 100011rs rt imm 从存储器中读取数据sw 101011rs rt imm 把数据保存到存储器lw rt, imm(rs) # $rt ← mem[$rs+E(imm)]sw rt, imm(rs) # mem[$rs+E(imm)] ←$rtMIPS32中唯一两条访问存储器的指令(RISC)2I 型指令面向数位设置的I 型指令指令[31:26][25:21][20:16][15:0]指令功能lui 00111100000rt imm 设置寄存器的高16位lui rt, imm # $rt ← imm<<16(空位补0)2I 型指令面向条件转移(分支)的I 型指令指令[31:26][25:21][20:16][15:0]指令功能beq 000100rs rt imm 寄存器相等则转移bne000101rsrtimm寄存器不等则转移beq rs, rt, imm bne rs, rt, imm#if($rs==$rt) PC←PC+E(imm)<<2是标准的PC 相对寻址方式其中imm 要先“带符号扩展”成32位,再左移2位。
