MIPS有三种指令格式:

R型

6 5 5 5 5 6
op rs rt rd shamt funct

功能:寄存器-寄存器ALU操作 (算术运算,逻辑运算)

I型

6 5 5 16
op rs rt 立即数操作

功能:条件分支,跳转

J型

6 26
op 跳转地址

功能:跳转

MIPS常用指令集

lb / lh / lw :      从存储器中读取一个byte/half word/word的数据到寄存器中.

sb/sh/sw:        把一个byte/half word/word的数据从寄存器存储到存储器中

mov/movz/movn:               复制,n为负,z为零。mov $1,$2; movz $1,$2,$3($3为零则复制$2到$1)。
trap:                                    根据地址向量转入管态。 
eret:                                    从异常中返回到用户态。

算术类:
add/addu:       把两个定点寄存器的内容相加;u为不带符号加,如 rd = rs + rt

addi/addiu:     把一个寄存器的内容加上一个立即数;u为不带符号加。 rd = rs + im
sub/subu:    把两个定点寄存器的内容相减。 rd = rs - rt
div/divu:         两个定点寄存器的内容相除。 
mul/mulu:       两个定点寄存器的内容相乘。

slt/slti/sltui:    如果rs的值小于rt,那么设置rd的值为1,否则设置rd的值为0。 rd = (rs < rt) ? 1 : 0  ; rd = (rs < im) ? 1 : 0

逻辑类:
and/andi:        与运算,两个寄存器中的内容相与 ;i为立即数。 rd = rs & rt ; rd = rs & im
or/ori:              或运算。  rd = rs | rt ; rd = rs | im
xor/xori:         异或运算。  rd = rs ^ rt ;rd = rs ^ im

nor/nori:         取反运算。 rd = !(rs | rt)

跳转类:
j/jr/jal/jalr:                            j直接跳转  PC = { (PC+4) [31,28] , addr, 00};jr使用寄存器跳转 PC = rs; jal    $31 = PC;PC = {(PC+4) [31,28],addr,00}

beq/beqz/benz/bne:            条件转移eq相等,z零,ne不等。  beq ,  PC = (rs == rt) ?  PC+4+im << 2  :   PC  ;  bne ,  PC = (rs != rt) ?  PC+4+im << 2  :   PC

载入类:
lui:                                       把一个16位的立即数填入到寄存器的高16位,低16位补零。 rt = im * 65536(2^16)

lw:                                        rt = memory[ rs + im]

sw:                                       memory[ rs + im] = rt

位移类:
sll/srl:                                  逻辑左移/右移。  rd = rs << shamt  ; rd = rs >> shamt 

32个通用寄存器

MIPS下一共有32个通用寄存器 ;在汇编中,寄存器标志由$符开头。寄存器表示可以有两种方式:直接使用该寄存器对应的编号,例如:从$0到$31;使用对应的寄存器名称,例如:$t1, $sp。

0       ($zero)      : 永远返回值为0 
1       ($at)          : 用做汇编器的暂时变量 
2-3    ($v0-$v1)  : 子函数调用返回结果 
4-7    ($a0-$a3)  : 子函数调用的参数 
8-15  ($t0-$t7)    : 暂时变量,子函数使用时不需要保存与恢复 
16-23($s0-$s7)  : 子函数寄存器变量。子函数必须保存和恢复使用过的变量在函数返回之前,从而调用函数知道这些寄存器的值没有变化。 
24-25($t8-$t9)    : 暂时变量,子函数使用时不需要保存与恢复 
26-27($k0-$k1)  : 通常被中断或异常处理程序使用作为保存一些系统参数 
28     ($gp)        : 全局指针。一些运行系统维护这个指针来更方便的存取“static“和”extern”变量。 
29     ($sp)        : 堆栈指针 
30     ($s8/$fp)  : 第9个寄存器变量。子函数可以用来做栈指针 
31     ($ra)         : 子函数的返回地 
cp0                    :协处理器0,MIPS对CPU的控制用cp0完成

MIPS汇编指令集的更多相关文章

  1. MIPS汇编及模拟器下载

    1. 简述汇编语言发展 在计算机发展初期,人们用0-1序列来表示每一条语言,亦即二进制的机器指令 由于机器指令过于繁琐,程序员们开发出了一种新的语言,这种用符号表示的计算机语言被称为汇编语言 计算机继 ...

  2. MIPS汇编学习

    MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...

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

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

  4. iot漏洞mips汇编基础

    1 基础概念 MIPS(Microprocessor without Interlocked Piped Stages architecture),是一种采取精简指令集(RISC)的处理架构,由MIP ...

  5. ARM汇编指令集_学习笔记(1)

    一.什么是ARM汇编? 运行在ARM处理器上的汇编语言就叫ARM汇编. C程序运行在X86平台,底层就是X86汇编:运行在ARM平台,底层就是ARM汇编.ARM汇编与X86汇编有显著区别. X86属于 ...

  6. MIPS 汇编指令学习

    MIPS 寄存器 MIPS comes with 32 general purpose registers named $0. . . $31Registers also have symbolic ...

  7. x86汇编指令集大全(带注释)

    X86和X87汇编指令大全(有注释) PUSH 压栈.POP 来说是出栈.入栈(push):---------- 一.数据传输指令 ---------------------------------- ...

  8. 汇编 | x86汇编指令集大全(带注释)

    做mit-6.828的时候遇到了很多汇编知识,但是无奈学校还没学汇编,只能狠心啃啃硬骨头,在网上查到了很多的资料,归档!方便查看 ----------------------------------- ...

  9. ARM汇编指令集

    一.跳转指令.跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转. Ⅰ.使用专门的跳转指令.Ⅱ.直接向程序计数器PC写入跳转地址值. 通过向程序计数器PC写入跳转地址值 ...

随机推荐

  1. PowerScript语句

    赋值语句 赋值语句可以把一个表达式的结果或者变量和常量的值,赋给一个变量或者对象的属性或成员变量.赋值语句的格式是: variablename = expression 其中variablename代 ...

  2. python爬虫系列之初识爬虫

    前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识,做网络爬虫还是需要基本的前端的 ...

  3. http/2.0与http/1.1的区别

    http/2是http协议自1999年http1.1发布后的首个更新  主要基于SPDY协议 2.0  采用二进制 而不是文本格式 完全多路复用 而不是有序并阻塞的   只需要一个连接即可实现并行 使 ...

  4. 好用的.NET控制台测试项目

    在工作和学习上,我们经常需要创建项目,引用些其他的库,测试下自己的想法是否正确,需要捕捉一下异常.调用一下异步方法.记录一下log等等,这样的项目都是需要花费时间,为了较少花费的时间,产生了一个这样的 ...

  5. 12.Redis运维点

    12.Redis运维点12.1 Linux配置优化12.1.1 内存分配控制12.1.2 swappiness12.1.3 THP12.1.4 OOM killer12.1.5 使用NTP12.1.6 ...

  6. 探索未知种族之osg类生物---渲染遍历之Renderer::draw()简介

    我们今天进入上一节的遗留问题Renderer::draw()的探究. 1.从_drawQueue中取出其中一个sceneView对象.SceneView是对scene和view类的封装,通过他可以方便 ...

  7. CSS样式内容

    CSS代码规范:尽量不要在标签内使用样式代码. .css文档内部声明不换行可以节省内存. 谨记: 常犯的错误是.html文档和.css样式表都写好了,但总会忘记插入样式表. 1.字体的样式 ​  2. ...

  8. shell速查

    Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有: bash:是Linux标准默认的shell.bash由Brian Fox和Chet Ramey共同完成,是Bourn ...

  9. 安装和使用JD-Eclipse插件

    http://www.cnblogs.com/0616--ataozhijia/p/3924411.html http://aniyo.iteye.com/blog/1336622

  10. 一年web网站测试总结

    1. 页面链接检查 每一个链接是否都有对应的页面,并且页面之间切换正确.可以使用一些工具,如LinkBotPro.File-AIDCS.HTML Link Validater.Xenu等工具.Link ...