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的寄存器、指令和寻址方式的分类的更多相关文章

  1. 批量Load/Store指令的寻址方式

    批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的 ...

  2. MIPS 跳转指令BAL vs JAL

    今天调试程序,发现在windows和Linux下,diab编译的结果不一样,一个能跑一个不能跑.最后定位到了函数跳转上. 程序代码里的函数跳转写的是BAL,在windows下编译结果正常,在Linux ...

  3. MIPS rev.1 指令参数

    由于MIPS各个版本之间的操作数会变,如果出现无法识别的情况 需要根据官方的MIPS instruction手册逐条核对,此处的版本为Rev.1 //******MIPS-55*********// ...

  4. LDR、STR指令

    LDR(load register)指令将内存内容加载入通用寄存器 STR(store register)指令将寄存器内容存入内存空间中 #define GPJ0CON 0xE0200240 _sta ...

  5. ARM指令分类及其寻址方式

    ARM指令分类及其寻址方式 一:ARM指令的分类 ARM指令集可以分为以下6类: •跳转指令: •数据处理指令: •程序状态寄存器(PSR)传输指令: •load/store指令: •协处理器指令: ...

  6. 计算机系统6-> 计组与体系结构3 | MIPS指令集(中)| MIPS汇编指令与机器表示

    上一篇计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统从顶层讲解了一个指令集 / 指令系统应当具备哪些特征和工作原理.这一篇就聚焦MIPS指令集(MIPS32),看看其汇 ...

  7. 3.6 MIPS指令简介

    计算机组成 3 指令系统体系结构 3.6 MIPS指令简介 MIPS秉承着指令数量少,指令功能简单的设计理念.那这样的设计理念是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点. 相比于X86 ...

  8. [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符

    说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...

  9. Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap

    Atitit.java 虚拟机的构成 与指令分类 与 指令集合 以及字节码查看工具javjap 1.1. 虚拟机的构成 java虚拟机--处理器.堆栈.寄存器.指令系统. 1 1.2. 虚拟机执行过程 ...

随机推荐

  1. wpa_supplicant介绍【转】

    本文转载自:https://zhuanlan.zhihu.com/p/24246712 一.什么是wpa_spplicant wpa_supplicant本是开源项目源码,被谷歌修改后加入Androi ...

  2. TibetanFont | ཡིག་གཟུགས། | 藏文字体

    1.Microsoft Himalaya 微软喜马拉雅字体 2007年1月30日,微软公司向全球市场同步发布了其最新操作系统Windows Vista,并自带藏文字体和输入法,Windows Vist ...

  3. I.MX6 PLL5 clock hakcing

    /************************************************************************** * I.MX6 PLL5 clock hakci ...

  4. 并不对劲的trie树

    听上去像是破坏植物的暴力行为(并不). 可以快速查询某个字符串在某个字符串集中出现了几次,而且听上去比字符串哈希靠谱. 把整个字符串集建成树,边权是字符,对于字符串结尾的节点进行特殊标记. 这样一方面 ...

  5. yum: Cannot find a valid baseurl for repo: migsrv解决方法

    yum安装程序报错: Loaded plugins: fastestmirror Setting up Update Process Determining fastest mirrors Could ...

  6. E20180219-hm-xa

    comparison n. 比较,对照; [语] 比喻; 比较级; conjunction  n. 连接; 连词; 联合,结合物; (恒星.行星等的) 合; [例句] assignment  n. 分 ...

  7. 记一次线上环境的内存溢出(java.lang.OutOfMemoryError)

    事故背景 今天客户说风控项目有个别用户查询不到数据不是报错就是一直卡在那里,我就去那个接口看了下. 一看项目日志今天的都几个g了,平常也就几百兆吧,很明显出了问题. 请求接口后使用命令tail -f ...

  8. Pycharm安装及第一次使用导航

    Pycharm:Pycharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元 ...

  9. Code:Blocks 中文乱码问题原因分析和解决方法

    下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...

  10. 关于Http的小常识(转载,仅供参考)

    HTTP请求头提供了关于请求,响应或者其他的发送实体的信息.HTTP的头信息包括通用头.请求头.响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成. 通用头标:即可用于请求,也可用 ...