MIPS指令 MIPS架构
华中科技大学 - 计算机组成原理
华中科技大学 - 计算机硬件系统设计
Microprocessor without Interlocked Pipleline Stages
无内部互锁流水级的微处理器
- 属于RISC
MIPS指令格式
R型指令
6 bits | 5 bits | 5 bits | 5 bits | 5 bits | 6 bits |
---|---|---|---|---|---|
000000 | Rs | Rt | Rd | shamt | funct |
第一源操作数 | 第二源操作数 | 目标操作数,保存结果 | 在移位指令中使用 | 指定指令的具体功能 |
三寄存器R型指令
add
000000 | Rs | Rt | Rd | 00000 | 100000 |
---|
sub
000000 | Rs | Rt | Rd | 00000 | 100010 |
---|
and
000000 | Rs | Rt | Rd | 00000 | 100100 |
---|
or
000000 | Rs | Rt | Rd | 00000 | 100101 |
---|
xor
000000 | Rs | Rt | Rd | 00000 | 100110 |
---|
两寄存器R型指令
sll(逻辑左移)
000000 | 00000 | Rt | Rd | 偏移量 | 000000 |
---|
srl(逻辑右移)
000000 | 00000 | Rt | Rd | 偏移量 | 000010 |
---|
sra(算术右移)
000000 | 00000 | Rt | Rd | 偏移量 | 000011 |
---|
单寄存器R型指令
jr(寄存器跳转)
000000 | Rs | 00000 | 00000 | 00000 | 001000 |
---|
R型指令中的无条件分支指令:jr,jalr
I型指令
6 bits | 5 bits | 5 bits | 16 bits |
---|---|---|---|
OP | Rs | Rt | |
标识操作功能 | 第1个源操作数 | 目的寄存器编号 | 第2个源操作数 |
双目运算、LOAD/STORE:Rs和立即数是源操作数,Rt为目标操作数
条件转移:Rs、Rt均为源操作数
面向运算的I型指令
addi
001000 | Rs | Rt | imm |
---|
andi
001100 | Rs | Rt | imm |
---|
ori
001101 | Rs | Rt | imm |
---|
xori
001110 | Rs | Rt | imm |
---|
addi的立即数扩展为符号扩展
(若为负数高16位补1)
其他三条进行0扩展
(高16位补0)
面向访存的I型指令
lw(从存储器读数据)
100011 | Rs | Rt | imm |
---|
sw(把数据保存到存取器)
101011 | Rs | Rt | imm |
---|
面向数位设置的I型指令
lui(把立即数加载到寄存器的高16位)
001111 | 00000 | Rt | imm |
---|
面向条件转移的I型指令
beq(寄存器相等则转移)
000100 | Rs | Rt | imm |
---|
bne(寄存器不相等则转移)
000101 | Rs | Rt | imm |
---|
I型指令中的有条件分支指令:beq, bne, bgtz( > 0 ), bgez( >= 0 ),bltz( < 0 ), blez( <= 0 )
J型指令
6 bits | 26 bits |
---|---|
OP | 立即数 |
跳转目标地址的部分地址 |
j(无条件跳转)
000010 | address |
---|
jal(调用与联接)
001100 | address |
---|
类似于X86架构的CALL。jal要保存返回地址
J型指令的无条件分支指令:j, jal
MIPS寄存器
在R和I型指令格式中,寄存器操作数字段均为5位,可编号32个寄存器
寄存器名 | 寄存器编号 | 说明 |
---|---|---|
$s0 | 0 | 保存固定的常数0 |
$at | 1 | 汇编器的临时变量 |
$v0 - $v1 | 2 - 3 | 字函数调用返回结果 |
$a0 - $a3 | 4 - 7 | 函数调用参数1-3 |
$t0 - $t7 | 8 - 15 | 临时变量,函数调用时不需要保存和恢复 |
$s0 - $s7 | 16 - 23 | 函数调用时需要保存和恢复的寄存器变量 |
$t8 - $t9 | 24 - 25 | 临时变量,函数调用时不需要保存和恢复 |
$k0 - $k1 | 26 -27 | 中断、异常处理程序使用 |
$gp | 28 | 全局指针变量(Global Pointer) |
$sp | 29 | 堆栈指针变量(Stack Pointer) |
$fp | 30 | 帧指针变量(Frame Pointer) |
$ra | 31 | 返回地址(Return Address) |
另外还有
- 32个32位单精度浮点寄存器f0 - f31
- 2个32位乘、商寄存器Hi和L0:运算乘法时分别存放64位乘积的高、低32位; 除法时分别存放余数和商
浮点寄存器和乘商寄存器没有编号,对程序员来说是透明的
MIPS寻址方式
MIPS32指令集中不单设寻址方式说明字段
- R型指令:由OP和funct字段共同隐含说明(R型指令字段全为0,需要结合funct字段表示)
- I、J型指令:由OP字段隐含
立即数寻址
immediate addressing
寄存器直接寻址
register addressing
add $t0,$s1,$s2 ;($t0 = $s1 + $s2)
基址寻址
basic addressing
使用通用寄存器作为基址寄存器,以立即数作为偏移量,立即数带符号扩展为32位,和基址寄存器的值一起得到主存地址
使用基址寻址的指令:lw, sw, lh, sh, lb, lbu等
相对寻址
PC的值和偏移量相加得到主存地址,以立即数为偏移量。立即数带符号扩展为32位并左移2位再和PC的内容相加
PC的值会被修改为相加结果
使用相对寻址的指令:beq, bne
页面寻址
26位的地址码左移2位变为28位,作为地址的低28位,PC的值会被修改
高4位是PC改变后的值(取出指令后PC自动增加)
单周期MIPS架构
取指Dp
由于需要在一个周期内完成取指译码执行的过程,不设置AR,DR,IR。
取指令和取操作数要同时完成,为了避免访存冲突将程序和数据分开存放(哈佛结构):
- 指令Cache
- 数据Cache
ALU和PC累加器分开
R型指令数据通路
以add $s0, $s1, $s2为例
- 以PC的内容访问IM,解析指令字段,分出3个寄存器编号
- 以寄存器编号访问寄存器堆
- 输出两路寄存器值,根据AluOP信号运算
- 当时钟到来,给出RegWrite,将结果写入寄存器堆
寄存器堆要支持两路读和一路写
I型指令数据通路
以lw $s0, 32($31)为例(从存储器读数据)
- 以PC的内容访问IM,解析指令字段,分出2个寄存器编号和立即数字段
- 以寄存器编号访问寄存器堆
- 立即数字段进行符号扩展单元,扩展为32位
- 输出一路寄存器值,和立即数相加得到DM地址
- 经过一个存储器延迟,数据到达WD端
- 时钟到来写入寄存器堆
sw $s0, 32($31)(从存储器读数据)
单周期MIPS数据通路
对于有多输入源的引脚,加上多路选择器和信号选择信号
beq数据通路的建立
J型指令的数据通路建立
需要增加JUMP控制信号,PC输入增加一个跳转地址
单周期MIPS控制器
单周期架构下,无时序逻辑
输入 | 输出 |
---|---|
OP + funct | 多路选择器选择信号 |
寄存器写使能信号 | |
内存访问控制信号 | |
运算器控制信号 | |
指令译码信号 |
单周期MIPS关键路径
lw的最长路径
时钟周期 = Tclk_to_Q + Tmem + Tregfile_read + Talu + Tmem + Tmux + Tsetup
多周期MIPS架构
不区分指令和数据存储器(冯诺依曼结构),功能部件分时使用
时钟周期变小,传输通路变短
功能部件输出端增加寄存器锁存数据
多周期MIPS CPU数据通路
取指令T1
PC += 4
- PC的内容传输到ALU的输入端和
- ALUSrcB信号选择4传输到ALU的输入端
- AluOP信号选择运算方式
- 时钟到来,在PCWrite信号的配合下结果送回PC
根据PC的内容从主存取指令
- 给出IRWrite信号,时钟到来时PC值写入IR锁存,同时PC原有的值更新为PC+4
取指令T2
- 将IR的内容送入控制器产生控制信号
- 计算条件分支转移的地址(图紫色部分)
时钟到来,取出的数据锁存在AB
R型指令执行T3-T4
- 给出AluOP和ALUSrcA、ALUSrcB信号,完成信号
- 时钟到来C更新
- C的内容输出,在RegDst和RegWrite信号配合下,写回寄存器堆
lw执行T3-T5
4. A和立即数相加计算操作数地址,时钟到来结果锁存在C
5. 将C的内容传输到主存,时钟到来数据锁存在DR
6. DR的内容写入寄存器堆(IR给出目标寄存器编号)
beq执行T3
- AB内容传输到ALU的输入端,进行比较,相等在给出equal信号,与branch信号与后输入到PC作为写使能
多周期状态转换图
多周期MIPS CPU控制器
输入 | 输出 |
---|---|
OP + funct | 多路选择器选择信号 |
时钟信号 | 寄存器写使能信号 |
复位信号 | 内存访问控制信号 |
运算器控制信号 | |
指令译码信号 |
MIPS指令 MIPS架构相关推荐
- MIPS和ARM架构简单对比
MIPS的优势主要有以下几点 1.MIPS支持64bit指令和操作,ARM目前只到32bit . 2.MIPS有专门的除法器,可以执行除法指令 . 3.MIPS的内核寄存器比ARM多一倍,所以同样的性 ...
- 【实验报告】实验一 MIPS指令系统和MIPS体系结构
文章目录 实验一 MIPS指令系统和MIPS体系结构 实验目的 实验要求 实验内容 实验平台 实验步骤 拓展内容(选做) 实验结果 心得体会 参考资料 实验一 MIPS指令系统和MIPS体系结构 实验 ...
- 计算机原理与设计-32位MIPS 指令
MIPS指令基础 基本知识 MIPS指令集 指令格式 I型指令 R型指令 J型指令 寄存器与编码 指令详情 算数指令 数据传输指令 逻辑指令 分支指令 跳转指令 MIPS指令翻译示例 斐波那契数列 字 ...
- MIPS指令以及数据通路
MIPS指令以及数据通路 MIPS 1字=4字节 1字节=8位 即:1字=32位 每一个时钟周期:IM取指令->译码->ALU执行->DM访存->回写Reg ADDI addi ...
- 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路
本次笔记内容: P19 计算机组成原理(19) P20 计算机组成原理(20) 本节课对应幻灯片: 组成原理24 singlecycle.pptx 基于上节课的7条MIPS指令的数据通路,分别针对7条 ...
- 实验2:MIPS指令系统和MIPS体系结构
实验2:MIPS指令系统和MIPS体系结构 一.实验目的 (1)了解和熟悉指令级模拟器 (2)熟悉掌握MIPSsim模拟器的操作和使用方法 (3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作语 ...
- 计算机组成原理mips与arm,计算机组成原理之MIPS指令系统和MIPS体系结构
一.实验目的 (1)了解和熟悉指令级模拟器 (2)熟悉掌握MIPSsim模拟器的操作和使用方法 (3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解 (4)熟悉MIPS体系结构 模拟器 ...
- MIPS指令集和汇编
MIPS指令集和汇编 一.寄存器与内存 1.1 字节与字 关于对字(word)的理解,我又有了新的认识,word是一种操作单位,而且是最常见的操作单位(不是最小的),内存的地址是用一个字(32位二 ...
- 计算机组成原理学习笔记第5章指令系统 5.6——MIPS指令详解
有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) First (在文末点击使用,返回文章首部) 目录 0.思维导图 1.R型指令 ...
- 【使用verilog、五级流水和MIPS指令集设计CPU】
内容 大概描述 设计思想 设计内容 设计处理器的结构和方法 处理器的操作过程 代码 测试部分 总结 参考文献 备注 大概描述 参考<自己动手写CPU>这本书,这本书算是手把手教学写CPU, ...
最新文章
- 递归神经网络(Recurrent Neural Networks,RNN)
- python做excel表格柱状图_Python Excel 绘制柱形图
- 以后外卖还可以买手机了!饿了么与上海迪信通达成合作
- matlab基数排序,如何在MATLAB中编写基数排序的程序
- asp.net session 如何知道是哪个浏览器客户端_小弟该如何复习 Java?
- 实例快速上手shell脚本
- 让Node.js在Azure上运行-3
- WLT8016:模组通信调试
- wps文档服务器授权怎么解,如何解决WPS提示授权已到期的问题
- opencv-python的颜色检测追踪
- 十二个“一”的演义小故事
- 2022 AI 岗位风向标
- hibernate学习之四——Query和Criteria接口
- 微信公众号引流的方法有哪些?
- 通达信 服务器 修改,通达信金融交易终端(开心果交易版)V2020版,修改导航菜单...
- MySQL之正则表达式
- root用户执行sourc /etc/profile命令提示权限不够
- cfa的pv怎么用计算机算,CFA考试规定使用的计算器,以及它的使用方法
- double和Double区别
- 1000份电子技术(模电、数电、电子元件、电路视频教程)全套资料!
热门文章
- Mybatis 批量更新运行异常,数据库 postgres
- 硬盘格式化怎么操作 硬盘格式化后数据还在吗
- 使用excel导入功能时日期数据变成数字的解决
- 中国未来5年最“吃香”的4大行业,市场需求大,堪比铁饭碗!
- 也许你看了一本假的天龙八部
- SGX软硬件栈(三)——驱动接口、SGX API
- 将一个数组划分成总和相等的两部分
- 2022年最新软件测试面试题,自动化测试面试题,接口自动化测试面试题详解,对标大厂。
- 从来没有一种工作叫钱多、事少、离家近
- 15b万用表怎么测电容_万用表怎么用?福禄克15B+一机详解万用表的使用方法