MIPS核心指令
几乎所有的体系结构都可以找到跟MIPS核心指令相似的指令,就像表9到表13所示的那样。指令可以分为四类:数据传输(表9);算术,逻辑(表10);控制(表11);浮点指令(表12)。第五类(表13)是寄存器使用的约定和各个体系结构的伪指令。如果一条MIPS核心指令在另外的体系结构中需要顺序的几条指令来替代,在表9到表13中用分号来连接。(为了防止混淆,在这个附录中,目的寄存器总是最左边的那个,不一定跟各个指令集中原本的用法一样。)表14到表17罗列的是嵌入式RISC中等价的指令。嵌入式RISC中一般不会定义浮点指令。
数据传输(指令格式) | R-I | R-I | R-I,R-R | R-I,R-R | R-I,R-R |
---|---|---|---|---|---|
指令种类 | Alpha | MIPS64 | PA-RISC 2.0 | PowerPC | SPARC v.9 |
加载有符号字节 | LDBU;SEXTB | LB | LDB;EXTRW,S 31,8 | LBZ; EXTSB | LDSB |
加载无符号字节 | LDBU | LBU | LDB, LDBX, LDBS | LBZ | LDUB |
加载有符号半字 | LDWU;SEXTW | LH | LDH; EXTRW,S 31,16 | LHA | LDSH |
加载无符号半字 | LDWU | LHU | LDH, LDHX, LDHS | LHZ | LDUH |
加载一个字 | LDLS | LW | LDW, LDWX, LDWS | LW | LD |
加载单精度浮点 | LDS* | LWC1 | FLDWX, FLDWS | LFS | LDF |
加载双精度浮点 | LDT | LDC1 | FLDDX, FLDDS | LDF | LDDF |
保存字节 | STB | SB | STB, STBX, STBS | STB | STB |
保存半字 | STW | SH | STH, STHX, STHS | STH | STH |
保存一个字 | STL | SW | STW, STWX, STWS | STW | ST |
保存单精度浮点 | STS | SWC1 | FSTWX, FSTWS | STFS | STF |
保存双精度浮点 | STT | SDC1 | FSTDX, FSTDS | STFD | STDF |
读写特殊寄存器 | MF_,MT_ | MF,MT_ | MFCTL, MTCTL | MFSPR, MF_,MTSPR, MT_ | RD, WR, RDPR,WRPR, LDXFSR,STXFSR |
移动整数到浮点寄存器 | ITOFS | MFC1/DMFC1 | STW; FLDWX | STW; LDFS | ST; LDF |
移动浮点到整数寄存器 | FTTOIS | MTC1/DMTC1 | FSTWX; LDW | STFS; LW | STF; LD |
表9:MIPS对应的桌面RISC数据传输指令。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。在这个图中,半字是16bit,一个字是32个bit。注意在Alpha中,LDS将单精度浮点转换成双精度浮点,并且填满了整个64位寄存器。
算术/逻辑(指令格式) | R-R, R-I | R-R, R-I | R-R, R-I | R-R, R-I | R-R, R-I |
---|---|---|---|---|---|
指令种类 | Alpha | MIPS64 | PA-RISC 2.0 | PowerPC | SPARC v.9 |
加法 | ADDL | ADDU, ADDU | ADDL, LD0, ADDI,UADDCM | ADD, ADDI | ADD |
加法(溢出触发异常 | ADDLV | ADD, ADDI | ADDO, ADDIO | ADDO;MCRXR; BC | ADDcc; TVS |
减法 | SUBL | SUBU | SUB, SUBI | SUBF | SUB |
减法(溢出触发异常) | SUBLV | SUB | SUBTO, SUBIO | SUBF/oe | SUBcc; TVS |
乘法 | MULL | MULT,MULTU | SHiADD;..;(i=1,2,3) | MULLW, MULLI | MULX |
乘法(溢出触发异常) | MULLV | — | SHiADDO;...; | — | — |
除法 | — | DIV, DIVU | DS;...; DS | DIVW | DIVX |
除法(溢出触发异常) | — | — | — | — | — |
与 | AND | AND, ANDI | AND | AND, ANDI | AND |
或 | BIS | OR, ORI | OR | OR, ORI | OR |
异或 | XOR | XOR, XORI | XOR | XOR, XORI | XOR |
加载寄存器高位 | LDAH | LUI | LDIL | ADDIS | SETHI (B fmt.) |
逻辑左移 | SLL | SLLV, SLL | DEPW, Z 31-i,32-i | RLWINM | SLL |
逻辑右移 | SRL | SRLV, SRL | EXTRW, U 31, 32-i | RLWINM 32-i | SRL |
算术右移 | SRA | SRAV, SRA | EXTRW, S 31, 32-i | SRAW | SRA |
比较 | CMPEQ, CMPLT, CMPLE | SLT/U, SLTI/U | COMB | CMP(I)CLR | SUBcc r0,... |
表10:MIPS对应的桌面RISC算术/逻辑指令。破折号代表那个体系结构没有对应的指令,或者说不是几条指令就可以得到等价的操作。等价MIPS指令的几条顺序指令,由分号分隔,如果有好几条指令可以对应,则用逗号分隔。在算术/逻辑类指令中,除了SPARC的体系结构都用不同的指令助记符来标明一个立即数操作。SPARC直接提供多个立即数版本的指令(当然,它们是独立的操作符)。