MIPS 汇编

什么是 MIPS?

1.1 MIPS(无互锁流水线微处理器)是一种精简(RISC)指令集体系结构(ISA)。

image

不同版本的指令集,数量,位数会有不同。

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 区别

image

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 中

image

(可以想象成一个鸡蛋,鸡蛋正常时小端在上,从上往下填满 0x12 34 56 78 ,这里大端模式就是将鸡蛋大端朝上【鸡蛋倒立】所以 0x12 在低地址开始,往后依次向上扩展;小端模式则反过来,【鸡蛋立正】,最低处即低地址是 0x78,依次向上扩展)

mips :big-endian 的 mips 架构

mipsel:little-endian 的 mips 架构

MIPS 应用领域

image

MIPS 寄存器

(寄存器,cpu 可以直接操作,速度非常快,每个寄存器都有不同的功能,并且都集成到了我们的 CPU 内部,这是我们能控制的,就是我们人为能控制的最小的一个单元。如果我们能控制寄存器的话,那么我们已经操纵我们整个计算机了)

image

r0 永远为 0;r1 存放下一条指令的位置;r2-r3 存放返回结果/返回值;r4-r7 存放参数;r8-r15 临时存储数据(作为一个中转);r16-23 额外的寄存器但是呢,如果我们它可以保存我们用户的信息,但是我们得使用特定指令来将我们这些数据保存到我们寄存器里面;r24 到 r 25,这也是一个附加的寄存器,不会对我们的内容进行保存;r26-r27 给我们系统用的,系统调用就会用到该寄存器;r28 全局指针 ,相当于 x86 的 PC,代表当前指令执行到哪个位置;r29 r30,就是我们的fp 是我们的堆栈寄存器;r31 用来存放返回地址。

右边寄存器用于浮点数计算,加快计算速度的寄存器。

MIPS 流水线

image

1.取指令:将指令从指令 Cache 中取出,并计算下一条指令的地址;

2.读操作数及转移:根据指令从寄存器中读出操作数,同时若为转移类指令,满足转移条件时设置 PC;

3.执行:根据指令进行计算,若为存取类指令,则计算地址;

4.访问存储器:若为存取类指令,对进行数据 Cache 进行读写;

5.写结果:将执行或存取的结果写回寄存器。

MIPS 寻址方式

*立即数寻址

OP RS RT Immediate

op 代表什么类型,rs,rt 是寄存器,Immediate 是立即数,我们想要寻址的话就要根据立即数里面的值进行寻址。

*寄存器寻址

image

*基址寻址或偏移寻址

image

*PC 相对寻址

image

*伪直接寻址

image

MIPS 指令格式***

image

image

image

MIPS 汇编

image

ADD

image

下面那些指令就是操作数的类型,如浮点什么的,对应的指令也是有些不同的。

SLL 指令 (左移指令)

image

将 s2 左移十位放到 s1 里面。

image

XoR 逻辑运算(异或运算)

image

image

BNE 跳转指令 ,根据 offset 偏移进行跳转

image

拿数据取数据,通过 LW,取偏移的地址放到 rt 寄存器里面。

MIPS 环境搭建

image

MIPS 汇编实战

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...