知识
MIPS汇编语言
数量单位
MIPS架构标准寄存器
1.32个32bit的通用寄存器
寄存器编号 | 寄存器名 | 寄存器用途 |
---|---|---|
0 | zero | 永远返回0 |
1 | $at | 汇编保留寄存器(不可用作其他用途) |
2-3 | v0-v1 | (value的简写)存储表达式或者函数的返回值 |
4-7 | a0-a3 | (Argument简写)存储子程序的前4个参数,在子程序调用过程中释放 |
8-15 | t0-t7 | (temp简写)临时变量,同上调用时不保存 |
16-23 | s0-s7 | (Save or Static简)静态变量?调用时保存 |
24-25 | t8-t9 | (Temp简写)算是前面0-7的继续,属性同t0-t7 |
26-27 | k0-k1 | (break off简写)中断函数返回值,不可做其他用途 |
28 | gp | (GlobalPointer简写)指向静态数据块的中间地址 |
29 | $sp | (Stack Pointer简写)栈指针,指向栈顶 |
30 | s8/fp | (Save / Frame Pointer)帧指针 |
31 | $ra | 返回地址,目测不可用作其他用途 |
2.PC 无法直接修改,通过跳转指令可以改动
3.HI 和 LO :这两个寄存器特别用来保存乘法、除法、乘法累加的结果。
内存
除了寄存器以外,内存地址也可能作为MIPS指令的操作数,内存中每个字节有一个编号,因此连续的两个word的地址编号相差4。
MIPS架构中的地址为32位,也就是说地址编号从0 到 4,294,967,295,每个数字代表内存中的一个byte。
整数
32bits表示整数范围:0 到 +4,294,967,295(无符号数),或–2,147,483,648 到 +2,147,483,647(有符号数)。
位扩展
两种可能造成位扩展的指令
-
addi: extend immediate value
-
lb, lh: extend loaded byte/halfword
对于无符号数直接高位补0,对于有符号数高位补符号位。
指令结构
MIPS寻址方式:
(1)寄存器寻址:
(2)立即数寻址:
(3)基址偏移量寻址
通用寄存器作为基址,操作数在存储器中
(4)PC相对寻址
(5)无条件跳转寻址
寻址总结:
7条MIPS指令(关于上面的寻址)
算术运算类:ADD and SUB(R型指令的代表)
add rd, rs, rt (加法)
M[PC],PC ← PC + 4
从PC所指的内存单元中取指令。 PC加4,使PC指向下一条指令。
R[rd] ← R[rs] + R[rt]
从rs、rt 所指的寄存器中取数后相加。 若结果不溢出,则将结果送rd所指的寄存器中;若结果溢出,则不送结果,转到“溢出处理程序”执行。
sub rd, rs, rt (减法)
M[PC],PC ← PC + 4
从PC所指的内存单元中取指令。 PC加4,使PC指向下一条指令。
R[rd] ← R[rs] - R[rt]