MIPS的寄存器、指令和寻址方式的分类
MIPS的32个寄存器
| 助记符 | 编号 | 作用 |
| zero | 0 | 恒为0 |
| at | 1 | (assembly temporary)保留给汇编器使用 |
| v0,v1 | 2-3 | (values)子程序返回,即函数调用时的返回值 |
| a0-a3 | 4-7 | (arguments)子程序调用的前几个参数 |
| t0-t7 | 8-15 | (temporaries)临时变量,子程序使用时无需保存 |
| t8-t9 | 24-25 | |
| s0-s7 | 16-23 |
(saved)子程序寄存器变量:子程序写入时必须保存 其值并在返回前恢复原值 |
| k0-k1 | 26-27 | (Reserved for OS Kernel)保留给中断处理程序使用;其值可能在你眼皮子底下改变 |
| gp | 28 |
(globe pointer)全局指针;一些运行系统维护这个指针以便 存取static和extern变量(全局变量) |
| sp | 29 | (stack pointer)堆栈指针;指向栈顶的指针 |
| fp/s9 | 30 | (frame pointer)第九个寄存器变量;需要的子程序可以用来做帧指针 |
| ra | 31 |
(return address)子程序的返回值 |
MIPS的指令
R型

I型

J型

基本指令格式

两点注意:
1、移位指令是R型指令,但没有使用rs寄存器
例如,sll $t2,$s0,4 #reg $t2 = reg $s0 << 4 bits,其对应的机器语言是

指令sll的opcode和funct字段都为0,rd为10(寄存器t2),rt为16(寄存器s0),shamt为4,rs字段没有使用,被置为0
2、I型指令,rs为源寄存器,rt为目的寄存器
机器码的解码
比如,0Xaf8020这条机器指令对应的汇编语言是什么?
1、转化成二进制
0000 0000 1010 1111 1000 0000 0010 0000
2、看opocde,即高6位,即26-31
000 000,所以是R型指令
清单一:opcode的含义表

3、(只考虑基本指令格式,不考虑浮点指令格式)如果opcode=000000表示R型指令,还需要结合funct字段才能判断出指令类型。而I型、J型直接从opcode就能判断出来。
清单二:R型的funct含义表

MIPS寻址方式

- 模式3是基址偏移量寻址,例如lw和sw,是将16位地址字段做符号扩展成32位与PC相加
- 模式4是PC相对寻址,将16位地址左移2位与PC(已更新为PC+4)相加。为什么要左移2位?16位偏移量左移2位以指示以字为单位的偏移量,这样做将偏移量能表示的有效范围扩大了4倍。其次,16位地址看作有符号数,一般在流水线设计时,先将16位地址符号扩展成32位,然后左移2位,再与PC相加
- 模式5是伪直接寻址,把26位地址左移2位与PC高4位相连。这里的26位地址是无符号的,PC是加4之后的,在流水线设计中,就是将PC+4的高4位、26位地址、末尾00拼接成32位跳转目标
参考链接:
1、http://www.cnblogs.com/junuh/archive/2009/06/12/1502030.html
2、https://blog.csdn.net/qq_32146369/article/details/79006728
3、https://zhuanlan.zhihu.com/p/38534417
MIPS的寄存器、指令和寻址方式的分类的更多相关文章
- 批量Load/Store指令的寻址方式
批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的 ...
- MIPS 跳转指令BAL vs JAL
今天调试程序,发现在windows和Linux下,diab编译的结果不一样,一个能跑一个不能跑.最后定位到了函数跳转上. 程序代码里的函数跳转写的是BAL,在windows下编译结果正常,在Linux ...
- MIPS rev.1 指令参数
由于MIPS各个版本之间的操作数会变,如果出现无法识别的情况 需要根据官方的MIPS instruction手册逐条核对,此处的版本为Rev.1 //******MIPS-55*********// ...
- LDR、STR指令
LDR(load register)指令将内存内容加载入通用寄存器 STR(store register)指令将寄存器内容存入内存空间中 #define GPJ0CON 0xE0200240 _sta ...
- ARM指令分类及其寻址方式
ARM指令分类及其寻址方式 一:ARM指令的分类 ARM指令集可以分为以下6类: •跳转指令: •数据处理指令: •程序状态寄存器(PSR)传输指令: •load/store指令: •协处理器指令: ...
- 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示
上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...
- 3.6 MIPS指令简介
计算机组成 3 指令系统体系结构 3.6 MIPS指令简介 MIPS秉承着指令数量少,指令功能简单的设计理念.那这样的设计理念是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点. 相比于X86 ...
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...
- Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap
Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap 1.1. 虚拟机的构成 java虚拟机--处理器.堆栈.寄存器.指令系统. 1 1.2. 虚拟机执行过程 ...
随机推荐
- wpa_supplicant - 强有力的终端 wifi 配置工具【转】
本文转载自:http://rickgray.me/2015/08/03/useful-command-tool-for-wifi-connection.html 最近网购了一套Raspberry-Pi ...
- 网站图片增强JS插件2.0(兼容IE&FF)
网站图片增强JS插件2.0简单介绍:插件可以增强网站互动能力与外链建设,用户在欣赏图片的同时,把看好的图片直接制作成自己喜欢的样式后通过QQ等传播,增强外链建设,通过用户互动创造外链.(支持:放大缩小 ...
- 使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序
写这篇文章的目的在于帮助那些既要使用Visual Studio编写程序又要开发和调试嵌入式Linux 程序的苦命程序员们! 第一步, 安装 WinGDB ,下载位置 http://www.wingd ...
- SDL2:封装媒体显示播放Csdl2
Github https://github.com/gongluck/SDL2-study/tree/master/Csdl2 Csdl2.h #ifndef __CSDL2_H__ #define ...
- bzoj 1609[Usaco2008 Feb]Eating Together麻烦的聚餐【dp】
设up[i][j]为第i位升序为j的最小修改数,down为降序 #include<iostream> #include<stdio.h> using namespace std ...
- bzoj 2876: [Noi2012]骑行川藏【拉格朗日乘数法+二分】
详见: http://blog.csdn.net/popoqqq/article/details/42366599 http://blog.csdn.net/whzzt/article/details ...
- 把pdf传给kindle
对于不是纯文本的,最好主题不要用convert,虽说用了之后可以转换为大小更合适的字体,但是会破坏本来PDF的格式,变得更加不合适阅读
- Logstash读取文本信息并写入到ES
Logstash读取文本信息并写入到ES 前提是ELK安装没问题 进入到logstash安装目录下的bin目录(我的logstash安装目录:/usr/local/) [root@es1 bin]# ...
- Elasticsearch的功能、使用场景以及特点
1.Elasticsearch的功能,干什么的 2.Elasticsearch的适用场景,能在什么地方发挥作用 3.Elasticsearch的特点,跟其他类似的东西不同的地方在哪里 1.Elasti ...
- POJ2482 Stars in Your Window(扫描线+区间最大+区间更新)
Fleeting time does not blur my memory of you. Can it really be 4 years since I first saw you? I stil ...