MIPS汇编
MIPS简介
MIPS(无互锁流水线微处理器)是一种精简指令集体系结构(RISC)
从MIPS 1发展到现在的MIPS 32/64,不同版本支持的指令集数量和操作位数不同(如32位或64位),同时具备可拓展性,可根据实际需求灵活扩充指令。
CISC和RISC
指令数量:
RISC:指令少(约50种),寻址模式简单(4-5种)
CISC:指令多(数百种),寻址模式复杂
操作方式:
RISC:仅支持寄存器-寄存器操作,内存操作需通过load/store指令
CISC:支持寄存器-寄存器、寄存器-内存、寄存器-I/O多种操作
执行速度:
RISC:单时钟周期完成指令,速度快
CISC:多时钟周期完成复杂指令,速度相对慢
开发特点:
RISC:开发周期长但执行效率高
CISC:开发周期短但执行效率较低
MIPS架构
指令特性:
所有指令32位编码,固定长度
部分指令只有16位目标地址编码,跳转范围受限(±32K)
执行效率:
单时钟周期完成一个阶段动作
高度流水线设计带来分支延迟和载入延迟效应
寄存器设计:
32个通用寄存器(32位或64位)
无标志寄存器,通过比较两个寄存器实现判断
内存访问:
数据访问严格对齐(4字节对齐)
栈操作通过统一内存访问实现
寻址方式:
唯一内存寻址方式:基地址+16位偏移
子函数返回地址存放在$31寄存器而非栈中
大小端:
mips:大端序
mipsel:小端序
MIPS寄存器
共32个寄存器(r0-r31),每个32位(4字节),每个寄存器都有特定用途,类似不同工具具备不同功能
| 寄存器 | 作用 |
|---|---|
r0($zero) |
恒为零值寄存器,用于比较运算和清零操作 例如:比较a和b时,通过将a-b结果与r0比较判断大小关系 |
r1($at) |
汇编器保留寄存器,用于地址存储 |
r2-r3($v0-$v1) |
函数返回值寄存器 |
r4-r7($a0-$a3) |
函数参数传递寄存器 |
r8-r15($t0-$t7) |
临时寄存器,内容不保存 |
r16-r23($s0-$s7) |
可保存寄存器,需特定指令保存用户数据 |
r26-r27($k0-$k1) |
操作系统保留寄存器,用于系统调用 |
r28($gp) |
全局指针寄存器,指示当前指令位置 |
r29($sp) |
栈指针 |
r30($fp) |
帧指针(Frame Pointer),可理解为Base Pointer |
r31($ra) |
返回地址寄存器,存储函数调用后的返回位置 |
32位处理器中每个寄存器固定为32位(4字节)、寄存器间操作速度远快于寄存器与立即数操作
MIPS流水线
五级流水线结构:
取指令(IF):从指令Cache中取出当前指令,并计算下一条指令的地址(PC值)
译码/读操作数(ID):从寄存器读取操作数,若为转移指令则判断条件并设置PC
执行(EX):执行算术逻辑运算,存取类指令则计算内存地址
访存(MEM):专门处理load/store指令,与数据Cache交互
写回(WB):将运算结果或内存数据写回寄存器文件
MIPS指令集
R格式:
特点:纯寄存器操作,opcode全0,用funct字段区分指令
应用:算术/逻辑运算,如add $t0, $t1, $t2
I格式:
特点:包含立即数,最多2个寄存器,opcode区分指令
应用:加载/存储指令,如addi $t0, $t1, 5、bne $1, $2, 10
J格式:
特点:长跳转指令,仅含立即数操作数
应用:无条件跳转,如j 0x00400010
寻址
立即数寻址:操作数直接包含在指令中,格式为|OP|RS|RT|Immediate|
寄存器寻址:操作数存储在寄存器中,格式为|op|rs|rt|rd||funct|
基址/偏移寻址:内存地址=基址寄存器值+偏移量,如lw/sw指令
PC相对寻址:地址=PC值+指令中的常数偏移
伪直接寻址:跳转地址由指令中26位字段与PC高位拼接而成