0%

MIPS指令系统简易入门

MIPS 指令系统

MIPS指令中数据的表示

  • 提供 32 个通用寄存器
  • 大端存储
  • 只能通过 Load / Store 指令访问存储器数据

MIPS 指令格式和寻址方式

指令格式

  • 所有指令都是 32 位宽,需按字地址对齐,字地址为 4 的倍数
  • R- Type(RR 型指令)
    • 寻址方式:寄存器寻址
    • 若是双目运算类指令,则 rs 和 rt 的内容分别作为第一和第二源操作数,结果送 rd;
    • 若是移位指令,则对 rt 的内容进行移位,结果送 rd ,所移位数由 shamt 字段给出
    • 指令格式如下:
OP rs rt rd shamt func
操作码:000000(6 个 0)(31-26:6位 第一源操作数(25-21:5位 第二源操作数(20-16:5位 存储结果(15-11:5位 移位指令位移量(10-6:5位 操作类型(如 sub add等)(5-0:6位
  • I-Type(立即数型指令)
    • 寻址方式:寄存器寻址、立即数寻址、相对寻址、基址寻址、变址寻址
    • 若是双目运算类指令,则将 rs 的内容和立即数分别作为第一和第二源操作数,结果送 rt
    • 若是 Load/Store 指令,则将 rs 的内容和立即数符号扩展后的内容相加作为内存单元地址,Load 指令将内存单元内容送 rt, Store 指令将 rt 内容送内存
    • 若是条件转移(分支)指令,则对 rs 和 rt 内容进行指定运算,根据运算结果决定是否转到转移目标地址处执行。(转移目标地址通过相对寻址方式得到,即将 PC 的内容和立即数符号扩展后的内容相加得到)
    • 指令格式如下
OP rs rt 立即数
操作码(31-26:6位 第一源操作数(25-21:5 位 存储结果(20-16:5 位 第二源操作数(15-0:16位
  • J-Type(无条件跳转指令)
    • 寻址方式:变通的直接寻址
    • 将当前 PC 的高 4 位拼上 26 位直接地址,最后添上两个 0 ,即得到 32 位的跳转目标地址
    • 指令格式如下
OP 直接地址
操作码:000010 或 000011(31-26:6 位 (25-0:26 位
  • 注: MIPS 中寻址方式由指令格式来确定,而指令格式由 op 来确定(6 位全 0 为 R 型;6 位 低三位为 010 或 011 为 J 型;剩余为 I 型)

MIPS 汇编语言

类别 指令名称 汇编举例 含义
算数运算 add add s1, s2, s3 s1 = s2 + s3
subtract subtract s1, s2, s3 s1 = s2 - s3
存储访问 load word lw s1, 100( 2 ) s1 = Memory[s2 + 100]
store word sw s1, 100( 2 ) Memory[s2 + 100] = s1
逻辑运算 and and s1, s2, s3 s1 = s2 & s3
or or s1, s2, s3 s1 = s2 \(|\) s3
nor nor s1, s2, s3 s1 = ~(s2 \(|\) s3)
and immediate andi s1, s2, 100 s1 = s2 & 100
or immediate ori s1, s2, 100 s1 = s2 \(|\) 100
shift left logical sll s1, s2, 10 s1 = s2 << 10
shift right logical srl s1, s2, 10 s1 = s2 >> 10
条件分支 branch on equal beq s1, s2, L if(s1 == s2) goto L
branch on not equal bne s1, s2, L if(s1 != s2) goto L
set on less than slt s1, s2, s3 if(s2 < s3) s1 = 1; else s1 = 0
set on less than immediate slti s1, s2, 100 if(s2 < 100) s1 = 1; else s1 = 0
无条件跳转 jump j L goto L
jump register j ra goto ra
jump and link jal L ra = PC + 4; goto L(为什么加 4 因为每条指令 32 位【4 个字节】)