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. Lightoj 1003 - Drunk(拓扑排序)

    One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...

  2. shell网络管理

    背景知识 联网就是通过网络将主机进行互联并采用不同的规范配置网络上的节点.我们以 TCP/IP 作为网络栈,所有的操作都是基于它进行的.网络是计算机系统中重要的部分.连接在网络上的每个节点都分配了一个 ...

  3. Serializable and XmlEnum

    The easiest way is to use [XmlEnum] attribute like so: [Serializable] public enum EnumToSerialize { ...

  4. Java 并发 —— 读写锁(ReadWriteLock)

    读写锁(ReadWriteLock),顾名思义,就是在读写某文件时,对该文件上锁. 1. ReentrantReadWriteLock 三部曲: 加锁: 读写操作: 解锁:(为保证解锁操作一定执行,通 ...

  5. 2-12 tensorflow运算原理

    #opencv tensorflow #类比 语法 api 原理 #基础数据类型 运算符 流程 字典 数组 import tensorflow as tf #data1 = tf.constant(2 ...

  6. Wait示例分析

    wait方法使"当前线程"进入阻塞(等待)状态. 示例分析: public class TestWait { public static void main(String[] ar ...

  7. Gym 100531A Alarm Clock (水题)

    题意:给定一个被高亮的数,问你是不是有个时间恰好高亮是这个数. 析:直接暴力,直接暴力,枚举每一位时间,当然也可以枚举时间,能找到就是有,找不到就算了. 代码如下: #pragma comment(l ...

  8. [知识积累]python3使用xlwt时写入文档字体颜色和边框样式

    可借鉴的网址:https://www.programcreek.com/python/example/39979/xlwt.Alignment 可以直接通过pip安装xlwt 个人理解: xlwt中对 ...

  9. React实战之将数据库返回的时间转换为几分钟前、几小时前、几天前的形式。

    React实战之将数据库返回的时间转换为几分钟前.几小时前.几天前的形式. 不知道大家的时间格式是什么样子的,我先展示下我这里数据库返回的时间格式 ‘2019-05-05T15:52:19Z’ 是这个 ...

  10. 打开CAD时出现“acvmtools.arx ARX命令中发生异常

    打开CAD时出现“acvmtools.arx ARX命令中发生异常     解决办法1: 试试进入CAD安装的目录,删掉它acvmtools.arx,重新打开cad.(注:acvmtools.arx一 ...