数量单位:


MIPS架构标准的寄存器:
-
32个32bit的通用寄存器(R0~R31):
通用寄存器
- program counter (PC) 无法直接修改,通过跳转指令可以改动
- HI 和 LO :这两个寄存器特别用来保存乘法、除法、乘法累加的结果。
内存:
除了寄存器以外,内存地址也可能作为MIPS指令的操作数,内存中每个字节有一个编号,因此连续的两个word的地址编号相差4。MIPS架构中的地址为32位,也就是说地址编号从0 到 4,294,967,295,每个数字代表内存中的一个byte。
汇编语言与机器码:
汇编语言执行之前要通过assembler翻译成机器码。
整数:
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,对于有符号数高位补符号位。
指令结构:
指令长度都是32bit。
R型结构

I型结构

移位指令
Shift left logical(sll)
Shift left and fill with 0
sll by i bits multiplies by 2i
Shift right logical(srl)
Shift right and fill with 0
srl by i bits divides by 2i (unsigned only)
位移指令可以用来快速做整数乘除2^n的计算
AND和OR
前面我们说过,使用addi操作16bit的数据会造成位扩展,也就是有时高位补1有时补0。用AND或OR来操作16bit数就不同,只会对高位补0。
跳转指令
使用label来指定跳转位置:



尽量只使用简单的beq和bne,它们只需要更短的时钟周期,能避免拖慢始终的速度。
针对unsigned的指令与针对signed的指令的不同
指令名中的u表示该指令将寄存器中的数字当作无符号数处理:

sltui: Set on Less Than Unsigned Immediate
网友评论