一
什么是 MIPS?
1.1 MIPS(无互锁流水线微处理器)是一种精简(RISC)指令集体系结构(ISA)。
不同版本的指令集,数量,位数会有不同。
1.2 CISC & RISC
CISC(Complex Instruction Set Computer)复杂指令计算机。Intel 的 X86 , AMD 的 K5,K6 为该类型.
RISC(Reduced Instruction Set Computer)精简指令集计算机 . Acorn 公司的 ARMIBN 的 PowerPC,MIPS 公司的 MIPS 为该类型.
1.3CISC & RISC 区别
1.4 MIPS 结构的基本特点
·1、所有指令都是 32 位编码.
·2、有些指令有 32 位供目标地址编码;有些则只有 16 位。因此要想加载任何一个 32 位值,就得用两个加载指令。16
位的目标地址意味着,指令的跳转或子函数的位置必须在 64K 以内(上下 32K).
·3、所有的动作原理上要求必须在 1 个时钟周期内完成,一个动作一个阶段.
·4、有 32 个通用寄存器,每个寄存器 32 位(对 32 位机)或 64 位(对 64 位机).
·5、本身没有任何帮助运算判断的标志寄存器,要实现相应的功能时,是通过测试两个寄存器是否相等来完成的.
·6、所有的运算都是基于 32 位的,没有对字节和对半字的运算(MIPS 里,字定义为 32 位,半字定义为 16 位).
·7、没有单独的栈指令,所有对栈的操作都是统一的内存访问方式.
·8、由于 MIPS 固定指令长度,所以造成其编译后的二进制文件和内存占用空间比 x86 的要大.
9、寻址方式:只有一种内存寻址方式。就是基地址加一个 16 位的地址偏移.
·10、内存中的数据访问必须严格对齐(至少 4 字节对齐).
·11、跳转指令只有 26 位目标地址,再加上 2 位的对齐位,可寻址 28 位的空间,即 256M.
·12、条件分支指令只有 16 位跳转地址,加上 2 位的对齐位,共 18 位寻址空间,即 256K.
·13、MIPS 默认不把子函数的返回地址(就是调用函数的受害指令地址)存放到栈中,而是存放到$31 寄存器中.
·14、流水线效应。由于采用了高度的流水线,结果产生了一些对程序员来说可见的效应,需要注意。最重要的两个
效应就是分支延迟效应和载入延迟效应.
1.5 MIPS 大小端: MIPS,MIPSEL
☆ 假如有一个 4 字节的数据为 0x12345678(十进制:305419896,0x12 为高字节,0x78 为低字节),若将其存放于地址 0x40008000 中
(可以想象成一个鸡蛋,鸡蛋正常时小端在上,从上往下填满 0x12 34 56 78 ,这里大端模式就是将鸡蛋大端朝上【鸡蛋倒立】所以 0x12 在低地址开始,往后依次向上扩展;小端模式则反过来,【鸡蛋立正】,最低处即低地址是 0x78,依次向上扩展)
mips :big-endian 的 mips 架构
mipsel:little-endian 的 mips 架构
MIPS 应用领域
MIPS 寄存器
(寄存器,cpu 可以直接操作,速度非常快,每个寄存器都有不同的功能,并且都集成到了我们的 CPU 内部,这是我们能控制的,就是我们人为能控制的最小的一个单元。如果我们能控制寄存器的话,那么我们已经操纵我们整个计算机了)
r0 永远为 0;r1 存放下一条指令的位置;r2-r3 存放返回结果/返回值;r4-r7 存放参数;r8-r15 临时存储数据(作为一个中转);r16-23 额外的寄存器但是呢,如果我们它可以保存我们用户的信息,但是我们得使用特定指令来将我们这些数据保存到我们寄存器里面;r24 到 r 25,这也是一个附加的寄存器,不会对我们的内容进行保存;r26-r27 给我们系统用的,系统调用就会用到该寄存器;r28 全局指针 ,相当于 x86 的 PC,代表当前指令执行到哪个位置;r29 r30,就是我们的fp 是我们的堆栈寄存器;r31 用来存放返回地址。
右边寄存器用于浮点数计算,加快计算速度的寄存器。
MIPS 流水线
1.取指令:将指令从指令 Cache 中取出,并计算下一条指令的地址;
2.读操作数及转移:根据指令从寄存器中读出操作数,同时若为转移类指令,满足转移条件时设置 PC;
3.执行:根据指令进行计算,若为存取类指令,则计算地址;
4.访问存储器:若为存取类指令,对进行数据 Cache 进行读写;
5.写结果:将执行或存取的结果写回寄存器。
二
MIPS 寻址方式
*立即数寻址
OP RS RT Immediate
op 代表什么类型,rs,rt 是寄存器,Immediate 是立即数,我们想要寻址的话就要根据立即数里面的值进行寻址。
*寄存器寻址
*基址寻址或偏移寻址
*PC 相对寻址
*伪直接寻址
MIPS 指令格式***
MIPS 汇编
ADD
下面那些指令就是操作数的类型,如浮点什么的,对应的指令也是有些不同的。
SLL 指令 (左移指令)
将 s2 左移十位放到 s1 里面。
XoR 逻辑运算(异或运算)
BNE 跳转指令 ,根据 offset 偏移进行跳转
拿数据取数据,通过 LW,取偏移的地址放到 rt 寄存器里面。
MIPS 环境搭建
MIPS 汇编实战
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于