文章目录
- 0 Preview:
- 寄存器
- 32通用
- 0 $zero
- 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
- 29 $sp
- 30 $fp
- 指令系统
- 运算
- 存储器
0 Preview:
MIPS架构有32位版本和64位版本,本文介绍32位版本
寄存器
正如笔者曾说,窃以为学习一款架构,首先应该学习的就是寄存器堆,会用寄存器堆,基本就能汇编语言编程,而且寄存器堆也是制作编译器的关键。
- 32个寄存器
- 3个特殊寄存器
每个寄存器都是32bits,也就是一个word
32通用
首先通过这张表格总览:
0 $zero
the constant value zero, 零号寄存器,编号为0,存储的值也永远为0,主要用于在一些指令中起辅助作用,实现复制、掩码等功能。
例1.实现分支:
1 $at
保留寄存器,用于处理32位立即数
2—3 $v0-$v1
values,用于保存函数返回值
4—7 $a0-$a3
用于保存函数的前四个参数,过程调用时不用保存,但如果是嵌套过程(即递归)就需要保存
8—15 $t0-$t7
temporaries, 用于存放一些临时产生的计算的中间结果,调用子过程的话不用保存
16—23 $s0-$s7
saved values,编译期将程序中的那些有名变量保存在 s 0 − s0- s0−s7中,调用其他过程的话需要压栈保存这些寄存器的值
24—25 $t8-$t9
t 0 − t0- t0−t7的扩充,
26—27 $k0-$k1
saved for OS kernel ,用于异常处理,
28 $gp
global pointer 全局指针,存放一个地址,指向内存中静态区(也称全局区)的中间位置,用于定位整个静态区
29 $sp
stack pointer 栈指针,存放栈顶位置,也就是内存中栈区的顶部位置,也就是栈区的地址最小的位置(栈区是栈底到栈顶地址逐渐减小)
30 $fp
指令系统
掌握了各个寄存器的功能之后我们就可以学习指令系统并进行汇编编程
MIPS指令系统,按照寻址方式可以分为5种:
- 基址寻址
- 立即数寻址
- 直接寻址
运算
(TODO)
存储器
(TODO)