MIPS体系结构设计4个准则
- 简单设计有助于规整化
- 加快常见功能
- 越小的设计越快
- 好的设计需要好的折中方法
两种设计理念的计算机
- MIPS(Reduced Instruction Set Computer)精简指令集计算机
- CISC(Complex Instruction Set Computer)复杂指令集计算机
MIPS汇编
MIPS有32个寄存器,汇编用s0
s开头代表保存寄存器,t开头代表临时寄存器
大小端
MIPS的指令
MIPS指令采用32位,按操作类型分为3类:R指令,I指令,J指令
R指令
op是0
rs,rt是源寄存器
rd是目的寄存器
funct是R指令具体方法
例子
I指令
rs,imm是源数
rt是目的数
J指令
跳转指令
逻辑指令
移位指令
乘法和除法指令
使用两个特殊的寄存器hi和lo
mult s1 (结果的高位存放到hi,低32位存放到lo)
div s1 (商保存到lo, 余存到hi中)
条件指令
beq 当两个寄存器相等时,执行跳转语句
bne 当两个寄存器不等时,执行跳转语句
跳转指令
j 跳转到一个汇编标号位置
jr 跳转到一个寄存器地址
比较指令
slt rd rs rt 当rs<rt时rd=1,当rs>rt时rd=0
设置地址指令
lui s0, 0x1000 //s0=0x1000000 给s0高位设置0x1000
ori s0, s0, 0x700 // s0=0x10007000 给s0低位设置0x7000
装入字节指令
lbu 装入无符号字节(装入时0扩展)
lb 装入字节(装入时符号扩展)
sb 存储字节
函数调用
调用函数调用前把参数放在 a3中(多出来的参数放在栈里)
被调用函数将返回值放在v1(如果返回64位,则使用v1)
使用jal 调用一个函数(把下一条指令地址保存在ra寄存器的地址)
s0~s7是受保护寄存器,被调用函数应该保证他们不被修改
t0~t1是非保护寄存器,被调用函数可以随便修改他们
寻址方式
- 寄存器寻址
- 立即数寻址
- 基地址寻址
- PC相对寻址
伪直接寻址
伪直接寻址:因为32位的指令有6位保存opcode,只有26位留给addr,不够32位地址,有一种办法来实现。首先寻址的地址是对齐的,所以最后两位一定是0,那就剩下32-26-2=4位,剩下4位取当前PC的最高位4位,这种寻址方式称为伪直接寻址
伪指令
MIPS内存映射
异常
- 由键盘等IO设备触发的异常称为中断
- 软件中断由自陷(trap)
- 被0除、尝试读不存在的内存,硬件故障等
异常处理
在MIPS,异常处理程序总是位于0x80000180,使用cause专用的寄存器来保存中断的原因