MIPS核心指令续3
| 数据传输(指令格式) | DT | DT | DT | DT | DT |
|---|---|---|---|---|---|
| 指令种类 | ARM v.4 | Thumb | SuperH | M32R | MIPS16 |
| 加载有符号字节 | LDRSB | LDRSB | MOV.B | LDB | LB |
| 加载无符号字节 | LDRB | LDRB | MOV.B; EXTU.B | LDUB | LBU |
| 加载有符号半字 | LDRSH | LDRSH | MOV.W | LDH | LH |
| 加载无符号半字 | LDRH | LDRH | MOV.W; EXTU.W | LDUH | LHU |
| 加载一个字 | LDR | LDR | MOV.L | LD | LW |
| 保存字节 | STRB | STRB | MOV.B | STB | SB |
| 保存半字 | STRH | STRH | MOV.W | STH | SH |
| 保存一个字 | STR | STR | MOV.L | ST | SW |
| 读写特殊寄存器 | MRS, MSR | - | LDC, STC | MVFC, MVTC | MOVE |
表14:MIPS对应的嵌入式指令传输指令。等价MIPS指令的几条顺序指令,由分号分隔。注意的是嵌入式RISC一般没有浮点指令定义。Thumb和MIPS16是16位指令,是ARM和MIPS指令集的子集,可以在执行中切换模式,到执行完整的指令集。破折号1说明存在32位指令,但是不存在16指令。
| 算术/逻辑(指令格式) | R-R, R-I | R-R, R-I | R-R, R-I | R-R, R-I | R-R, R-I |
|---|---|---|---|---|---|
| 指令种类 | ARM v.4 | Thumb | SuperH | M32R | MIPS16 |
| 加法 | ADD | ADD | ADD | ADD, ADDI, ADD3 | ADDU, ADDIU |
| 加法(溢出触发异常) | ADDS; SWIVS | ADDS; BVC .+4; SWI | ADDV | ADDV, ADDV3 | —(1) |
| 减法 | SUB | SUB | SUB | SUB | SUBU |
| 减法(溢出触发异常) | SUBS; SWIVS | ADDS; BVC .+4; SWI | SUBV | SUBV | —(1) |
| 乘法 | MUL | MUL | MUL | MUL | MULT, MULTU |
| 除法 | — | — | DIV1, DIVoS, DIVoU | DIV, DIVU | DIV, DIVU |
| 与 | AND | AND | AND | AND, AND3 | AND |
| 或 | ORR | ORR | OR | OR, OR3 | OR |
| 异或 | EOR | EOR | XOR | XOR, XOR3 | XOR |
| 加载寄存器高位 | — | — | SETH | —(1) | |
| 逻辑左移 | LSL(3) | LSL(2) | SHLL, SHLLn | SLL, SLLI, SLL(3) | SLLV, SLL |
| 逻辑右移 | LSR(3) | LSR(2) | SHRL, SHRLn | SRL, SRLI, SRL(3) | SRLV, SRL |
| 算术右移 | ASR(3) | ASR(2) | SHRA, SHAD | SRA, SRAI, SRA(3) | SRAV, SRA |
| 比较 | CMP, CMN, TST, TEQ | CMP, CMN, TST | CMP/cond, TST | CMP/I, CMPU/I | CMP/I(2), SLT/I, SLT/IU |
表15:MIPS对应的嵌入式RISC算术/逻辑指令。破折号代表那个体系结构没有对应的指令,或者说不是几条指令就可以得到等价的操作。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。Thumb和MIPS16是16位指令,是ARM和MIPS指令集的子集,可以在执行中切换模式,到执行完整的指令集。括号1说明存在32位指令,但是不存在16位指令。括号2代表只存在16位的模式中。ARM在所有数据操作指令中都可以移位,因此括号3代表是move指令的一个变种,比如LSR(3)。
| 控制(指令格式) | B,J,C | B,J,C | B,J,C | B,J,C | B,J,C |
|---|---|---|---|---|---|
| 指令种类 | ARM v.4 | Thumb | SuperH | M32R | MIPS16 |
| 整数比较分支 | B/cond | B/cond | BF, BT | BEQ, BNE, BC, BNC, B_Z | BEQZ(2), BNEZ(2), BTEQZ(2), BTNEZ(2) |
| 跳转,寄存器跳转 | MOV pc,ri | MOV pc,ri | BRA, JMP | BRA, JMP | B2, JR |
| 调用,寄存器调用 | BL | BL | BSR, JSR | BL, JL | JAL, JALR, JALX(2) |
| Trap | SWI | SWI | TRAPA | TRAP | BREAK |
| 从中断返回 | MOVS pc, r14 | —(1) | RTS | RTE | —(1) |
表16:MIPS对应的嵌入式RISC控制指令。Thumb和MIPS16是16位指令,是ARM和MIPS指令集的子集,可以在执行中切换模式,到执行完整的指令集。破折号括号1说明存在32位指令,但是不存在16指令。括号2代表只存在16位的模式中。
| 约定 | ARM v.4 | Thumb | SuperH | M32R | MIPS16 |
|---|---|---|---|---|---|
| 返回地址寄存器 | R14 | R14 | PR(特殊) | R14 | RA(特殊) |
| 空操作 | MOV r0, r0 | MOV r0, r0 | NOP | NOP | SLL r0, r0 |
| 操作数顺序 | OP Rd, Rs1, Rs2 | OP Rd, Rs1 | OP Rs1, Rd | OP Rd, Rs1 | OP Rd, Rs1, Rs2 |
表17:MIPS对应的嵌入式RISC约定。