首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MIPS指令集与简要分析R格式指令I格式指令J格式指令指令分析

MIPS指令集与简要分析R格式指令I格式指令J格式指令指令分析

作者头像
月见樽
发布于 2018-04-27 06:09:39
发布于 2018-04-27 06:09:39
9.2K0
举报

R格式指令

基本格式

标记

op

rs

rt

rd

shamt

funct

位数

31-26

25-21

20-16

15-11

10-6

5-0

功能

操作符

源操作数寄存器1

源操作数寄存器2

目的操作数寄存器

位移量

操作符附加段

指令

算数类指令

指令

op

rs

rt

rd

shamt

funct

功能

add

000000

rs

rt

rd

00000

100000

rd=rs+rt

addu

000000

rs

rt

rd

00000

100001

rd=rs+rt(无符号数)

sub

000000

rs

rt

rd

00000

100010

rd=rs-rt

subu

000000

rs

rt

rd

00000

100011

rd=rs+rt(无符号数)

slt

000000

rs

rt

rd

00000

101010

rd=(rs<rt)?1:0

sltu

000000

rs

rt

rd

00000

101011

rd=(rs<rt)?1:0(无符号数)

逻辑类指令

指令

op

rs

rt

rd

shamt

funct

功能

and

000000

rs

rt

rd

00000

100101

rd=rs&rt

or

000000

rs

rt

rd

00000

100101

rd=rs|rt

xor

000000

rs

rt

rd

00000

100110

rd=rs xor rd

nor

000000

rs

rt

rd

00000

100111

rd=!(rs|rt)

位移类指令

指令

op

rs

rt

rd

shamt

funct

功能

sll

000000

00000

rt

rd

shamt

000000

rd=rt<<shamt

srl

000000

00000

rt

rd

shamt

000010

rd=rt>>shamt

sra

000000

00000

rt

rd

shamt

000011

rd=rt>>shamt(符号位保留)

sllv

000000

rs

rt

rd

00000

000100

rd=rt<<rs

srlv

000000

rs

rt

rd

00000

000110

rd=rt>>rs

srav

000000

rs

rt

rd

00000

000111

rd=rt>>rs(符号位保留)

跳转指令

指令

op

rs

rt

rd

shamt

funct

功能

jr

000000

rs

00000

00000

00000

001000

PC=rs

I格式指令

基本格式

标记

op

rs

rd

im

位数

31-26

25-21

20-16

15-0

功能

操作符

源操作数寄存器

目的操作数寄存器

立即数

指令

算数指令

指令

op

rs

rd

im

功能

addi

001000

rs

rd

im

rd=rs+im

addiu

001001

rs

rd

im

rd=rs+im(无符号数)

slti

001010

rs

rd

im

rd=(rs<im)?1:0

sltiu

001011

rs

rd

im

rd=(rs<im)?1:0(无符号数)

逻辑类指令

指令

op

rs

rd

im

功能

andi

001100

rs

rd

im

rd=rs&im

ori

001101

rs

rd

im

rd=rs|im

xori

001110

rs

rd

im

rd=rs xor im

载入类指令

指令

op

rs

rd

im

功能

lui

001111

00000

rd

im

rt=im*65536

lw

100011

rs

rd

im

rt=memory[rs+im]

sw

101011

rs

rd

im

memory[rs+im]=rt

跳转类指令

指令

op

rs

rd

im

功能

beq

000100

rs

rd

im

PC=(rs==rt)?PC+4+im<<2:PC

bne

000101

rs

rd

im

PC=(rs!=rt)?PC+4+im<<2:PC

J格式指令

基本格式

标记

op

address

位数

31-26

25-0

功能

操作符

地址

指令

指令

op

address

功能

j

000010

addr

PC={(PC+4)[31,28],addr,00}

jal

000011

addr

$31=PC;PC={(PC+4)[31,28],addr,00}

指令分析

指令格式

MIPS_order.png

不同格式的指令具有不同的功能,其中:

  • R格式指令为纯寄存器指令,所有的操作数(除移位外)均保存在寄存器中。Op字段均为0,使用funct字段区分指令
  • I格式指令为带立即数的指令,最多使用两个寄存器,同时包括了load/store指令。使用Op字段区分指令
  • J格式指令为长跳转指令,仅有一个立即数操作数。使用Op字段区分指令

数据通路

以上的指令包括以下几种与指令有关的数据通路:

  • 指令——寄存器组:R格式指令均为寄存器指令,需要指令提供寄存器地址
  • 指令——运算单元(ALU):运算指令由指令提供运算类型,同时提供参与运算的立即数和位移量
  • 指令——存储器:load/store指令的寻址方式仅为寄存器偏移量寻址,需要指令提供立即数偏移量
  • 指令——PC:J格式指令需要将指令中的立即数载入PC中

同时还有几种必备的与指令无关的数据通路:

  • 寄存器组——运算单元(ALU):寄存器组为运算单元提供操作数,运算结果存在寄存器组中
  • 寄存器组——存储器:load/store指令的两端
  • 寄存器组——PC:跳转指令与寄存器组有关

当使用哈弗结构时,数据通路框图如下所示:

MIPS_dataflow.png

流水线划分

若使用流水线实现,可以将流水线划分为:取指->译码->准备操作数->执行->回写四个阶段:

  • 取指阶段:按PC从指令寄存器中取出完整的32位指令,之后PC自增
  • 译码阶段:按指令的高6位(Op字段)将指令解释为相应的格式
  • 准备操作数阶段:按指令中的对应字段准备操作数,包括:计算地址(load/store指令),取出寄存器中的操作数置于数据总线(寄存器指令),计算PC值(跳转指令)等
  • 执行阶段:执行指令,包括:访问存储器(load/store指令),ALU运算(计算类指令),刷新PC值(跳转指令)等
  • 回写阶段:将结果存入寄存器中,包括:ALU的运算结果(计算类指令),访存结果(load指令),原PC值(带返回跳转指令)等
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.02.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
单周期CPU
1、理解 MIPS 常用的指令系统并掌握单周期 CPU 的工作原理与逻辑功能实现。
ttony0
2022/12/26
2.5K0
单周期CPU
『计算机的组成与设计』-指令:计算机的语言
计算机语言中的基本单词称为指令。一台计算机的全部指令称为该计算机的指令集。 尽管机器语言种类繁多,但他们之间十分相似,其差异性更像人类语言的”方言”。 本篇讲解 MIPS 指令集。
1ess
2021/10/29
3.1K0
『计算机的组成与设计』-指令:计算机的语言
MIPS汇编语言指令分类及寻址模式
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126986.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/01
1.8K0
MIPS汇编语言指令分类及寻址模式
《我的Vivado实战—单周期CPU指令分析》
不知道你是否和我有过同样的感受,《计算机组成原理》这门学科学起来如此的艰难:一节课下来,教室黑板上留下了满满的 “足迹”,看上去也挺简单的,不就是 0 和 1 嘛。但这些看起来简简单单的 0 1 码却成为了我当时学习路上的绊脚石。源码、反码、补码等等等等,各种的码制转换令我一头雾水,我曾一度怀疑这就是计算机干的活儿吗?
攻城狮杰森
2022/01/17
8600
《我的Vivado实战—单周期CPU指令分析》
RISC-V指令集讲解(4)R-Type 整数寄存器-寄存器指令
上文RISC-V指令集讲解(3)I-Type 移位指令和U-type指令介绍完了整数寄存器-立即数指令,本文开始进行整数寄存器-寄存器指令的讲解。
IC知识库
2021/07/30
6.5K0
RISC-V指令集讲解(4)R-Type 整数寄存器-寄存器指令
ARM指令集介绍「建议收藏」
ARM 指令集是针对ARM体系架构设计的指令。在BootLoader引导的第一阶段以及内核的第一阶段都会有一个使用汇编语言编写的文件,在不跑操作系统的裸板中也有一段用来初始化开发板环境的汇编代码。所以无论是开发带操作系统的板子,还是裸板开发,汇编语言都很有必要学习一番,最少要了解一些常用的汇编指令。要想设计出性能超强的系统,ARM的工作原理是必须掌握的。
全栈程序员站长
2022/11/15
2.9K0
ARM指令集介绍「建议收藏」
MIPS五级流水线_工业级CPU报价
流水线CPU就是指将一条分解为多步,在同一周期内进行多条指令的同时执行。MIPS五级流水线就是将指令分为:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)五个阶段。举个例子:
全栈程序员站长
2022/09/25
1.9K0
MIPS五级流水线_工业级CPU报价
ARM指令集
ARM指令的基本格式为: <Opcode> {<Cond>} {S} <Rd>, <Rn> { , <Opcode2> } 其中,<>内的项是必需的,{}内的项是可选的。 1)Opcode项 Opcode是指令助记符,即操作码,说明指令需要执行的操作,在指令中是必需的。 2)Cond项(command) Cond项表明了指令的执行的条件,每一条ARM指令都可以在规定的条件下执行,每条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。 条件码共有16种,每种条件码用2个字符表示,这两个字符可以添加至指令助记符的后面,与指令同时使用。 当指令的执行条件满足时,指令才被执行,否则指令被忽略。如果在指令后不写条件码,则使用默认条件AL(无条件执行)。 指令的条件码 条 件 码 助记符后缀 标 志 含 义 0000 EQ Z置位 相等equal 0001 NE Z清零 不相等not equal 0010 CS C置位 无符号数大于或等于Carry Set 0011 CC C清零 无符号数小于 0100 MI N置位 负数minus 0101 PL N清零 正数或零plus 0110 VS V置位 溢出 0111 VC V清零 没有溢出 1000 HI C置位Z清零 无符号数大于high 1001 LS Z置位C清零 无符号数小于或等于less 1010 GE N等于V 带符号数大于或等于 1011 LT N不等于V 带符号数小于least 1100 GT Z清零且(N等于V) 带符号数大于great 1101 LE Z清零或(N不等于V) 带符号数小于或等于 1110 AL 忽略 无条件执行all 1111 条件码应用举例: 例:比较两个值大小,并进行相应加1处理,C语言代码为: if ( a > b ) a++; else b++; 对应的ARM指令如下(其中R0中保存a 的值,R1中保存b的值): CMP R0, R1 ; R0与R1比较,做R0-R1的操作 ADDHI R0, R0, #1 ;若R0 > R1, 则R0 = R0 + 1 ADDLS R1, R1, #1 ; 若R0 <= R1, 则R1 = R1 + 1 CMP比较指令,用于把一个寄存器的内容和另一个寄存器的内容或一个立即数进行比较,同时更新CPSR中条件标志位的值。指令将第一操作数减去第二操作数,但不存储结果,只更改条件标志位。 CMP R1, R0 ;做R1-R0的操作。 CMP R1,#10 ;做R1-10的操作。 3)S项(sign) S项是条件码设置项,它决定本次指令执行的结果是否影响至CPSR寄存器的相应状态位的值。该项是可选的,使用时影响CPSR,否则不影响CPSR。 4)
全栈程序员站长
2022/07/05
9030
嵌入式:ARM指令集分类及编码
ARM指令使用的基本格式如下: 〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉} < > 是必须项 , {}是可选项
timerring
2022/12/16
2.2K0
嵌入式:ARM指令集分类及编码
Verilog实现MIPS的5级流水线cpu设计(Modelsim仿真)[通俗易懂]
1.1:实验目的 (1)CPU各主要功能部件的实现 (2)CPU的封装 (3)了解提高CPU性能的方法 (4)掌握流水线MIPS微处理器的工作原理 (5)理解并掌握数据冒险、控制冒险的概念以及流水线冲突的解决方法 (6)掌握流水线MIPS微处理器的测试仿真方法 1.2:实验要求 (1)至少实现MIPS中的三类指令,即R类,I内,J类指令 (2)采用5级流水线技术 (3)完成Lw指令的数据冒险的解决 (4)在ID段完成控制冒险的解决
全栈程序员站长
2022/09/24
1.7K0
Verilog实现MIPS的5级流水线cpu设计(Modelsim仿真)[通俗易懂]
RISC-V指令集讲解(6)load/store指令
RV32I是一个加载-存储(load-store)架构。也是只有load和store指令才能访问存储器和外设(CPU 内的寄存器只能由算术指令操作) [1]。load和store指令将寄存器和存储器/外设的值相互交换。
IC知识库
2021/07/31
7.8K0
RISC-V指令集讲解(6)load/store指令
嵌入式:数据处理指令详解
如果数据操作有结果,则结果为32位宽,放在一个寄存器中(有一个例外是长乘指令的结果是64位的);
timerring
2022/12/21
1.3K0
嵌入式:数据处理指令详解
【计算机系统概论】
冯诺依曼机 核心思想:存储程序 工作方式: 任何要计算机完成的工作都要先被编写成程序,然后将程序和原始 数据送入主存并启动执行。一旦程序被启动,计算机应能在不需操 作人员干预下,自动完成逐条取出指令和执行指令的任务。 主要思想:
devi
2021/08/18
1.2K0
RISC-V指令集讲解(3)I-Type 移位指令和U-type指令
上文RISC-V指令集讲解 (2) I-Type整数寄存器-立即数指令介绍了I-type中的6个指令,本文将继续介绍I-type中其余的整数寄存器-立即数指令(这里是属于I-type的移位指令)和U-type中的整数寄存器-立即数指令。
IC知识库
2021/07/30
2.4K0
RISC-V指令集讲解(3)I-Type 移位指令和U-type指令
【AI系统】CPU 指令集架构
我们知道,计算机指令是指挥机器工作的指示和命令,程序就是一系列指令按照顺序排列的集合,执行程序的过程就是计算机的工作过程。从微观上看,我们输入指令的时候,计算机会将指令转换成二进制码存储在存储单元里面,然后在即将执行的时候拿出来。那么计算机是怎么知道我们输入的是什么指令,指令要怎么执行呢?
用户11307734
2024/11/26
3250
WinMIPS64汇编指令详解
以PC程序计数器和指令中常数之和作为地址,即16位地址左移2位(即乘以4)与PC计数器相加
叶茂林
2023/10/23
8620
WinMIPS64汇编指令详解
OpenHarmony 内核源码分析 (编码方式篇) | 机器指令是如何编码的?
本篇说清楚 ARM指令是如何被编码的,机器指令由哪些部分构成,指令有哪些类型,每种类型的语法又是怎样的 ?
小帅聊鸿蒙
2025/04/03
1420
OpenHarmony 内核源码分析 (编码方式篇) | 机器指令是如何编码的?
【计算机组成与设计】Chisel取指和指令译码设计
输入位32bit的一个机器字,按照课本MIPS 指令格式,完成add、sub、lw、sw指令译码,其他指令一律译码成nop指令。输入信号名为Instr_word,对上述四条指令义译码输出信号名为add_op、sub_op、lw_op和sw_op,其余指令一律译码为nop;
叶茂林
2023/11/07
6440
【计算机组成与设计】Chisel取指和指令译码设计
『计算机的组成与设计』-处理器
前面几篇我们说过,一台计算机的性能有三个关键因素决定: 指令数目,时钟周期长度和每条指令所需要的时钟周期数 CPI。 编译器和指令集决定了一个程序所需的指令数目,而处理器则决定了时钟周期长度和 CPI。 本篇通过一个基本 MIPS 实现,来了解实现一个处理器所需要的原理和技术。
1ess
2021/10/29
5050
『计算机的组成与设计』-处理器
计算机组成原理 CPU的功能和基本结构和指令执行过程
用户不可见的寄存器 (对用户透明,用户不可编程) : SR,T,MAR,MDR,IR
onenewcode
2024/01/22
8330
推荐阅读
相关推荐
单周期CPU
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档