标记 | op | rs | rt | rd | shamt | funct |
---|---|---|---|---|---|---|
位数 | 31-26 | 25-21 | 20-16 | 15-11 | 10-6 | 5-0 |
功能 | 操作符 | 源操作数寄存器1 | 源操作数寄存器2 | 目的操作数寄存器 | 位移量 | 操作符附加段 |
指令 | op | rs | rt | rd | shamt | funct | 功能 |
---|---|---|---|---|---|---|---|
add | 000000 | rs | rt | rd | 00000 | 100000 | rd=rs+rt |
addu | 000000 | rs | rt | rd | 00000 | 100001 | rd=rs+rt(无符号数) |
sub | 000000 | rs | rt | rd | 00000 | 100010 | rd=rs-rt |
subu | 000000 | rs | rt | rd | 00000 | 100011 | rd=rs+rt(无符号数) |
slt | 000000 | rs | rt | rd | 00000 | 101010 | rd=(rs<rt)?1:0 |
sltu | 000000 | rs | rt | rd | 00000 | 101011 | rd=(rs<rt)?1:0(无符号数) |
指令 | op | rs | rt | rd | shamt | funct | 功能 |
---|---|---|---|---|---|---|---|
and | 000000 | rs | rt | rd | 00000 | 100101 | rd=rs&rt |
or | 000000 | rs | rt | rd | 00000 | 100101 | rd=rs|rt |
xor | 000000 | rs | rt | rd | 00000 | 100110 | rd=rs xor rd |
nor | 000000 | rs | rt | rd | 00000 | 100111 | rd=!(rs|rt) |
指令 | op | rs | rt | rd | shamt | funct | 功能 |
---|---|---|---|---|---|---|---|
sll | 000000 | 00000 | rt | rd | shamt | 000000 | rd=rt<<shamt |
srl | 000000 | 00000 | rt | rd | shamt | 000010 | rd=rt>>shamt |
sra | 000000 | 00000 | rt | rd | shamt | 000011 | rd=rt>>shamt(符号位保留) |
sllv | 000000 | rs | rt | rd | 00000 | 000100 | rd=rt<<rs |
srlv | 000000 | rs | rt | rd | 00000 | 000110 | rd=rt>>rs |
srav | 000000 | rs | rt | rd | 00000 | 000111 | rd=rt>>rs(符号位保留) |
指令 | op | rs | rt | rd | shamt | funct | 功能 |
---|---|---|---|---|---|---|---|
jr | 000000 | rs | 00000 | 00000 | 00000 | 001000 | PC=rs |
标记 | op | rs | rd | im |
---|---|---|---|---|
位数 | 31-26 | 25-21 | 20-16 | 15-0 |
功能 | 操作符 | 源操作数寄存器 | 目的操作数寄存器 | 立即数 |
指令 | op | rs | rd | im | 功能 |
---|---|---|---|---|---|
addi | 001000 | rs | rd | im | rd=rs+im |
addiu | 001001 | rs | rd | im | rd=rs+im(无符号数) |
slti | 001010 | rs | rd | im | rd=(rs<im)?1:0 |
sltiu | 001011 | rs | rd | im | rd=(rs<im)?1:0(无符号数) |
指令 | op | rs | rd | im | 功能 |
---|---|---|---|---|---|
andi | 001100 | rs | rd | im | rd=rs&im |
ori | 001101 | rs | rd | im | rd=rs|im |
xori | 001110 | rs | rd | im | rd=rs xor im |
指令 | op | rs | rd | im | 功能 |
---|---|---|---|---|---|
lui | 001111 | 00000 | rd | im | rt=im*65536 |
lw | 100011 | rs | rd | im | rt=memory[rs+im] |
sw | 101011 | rs | rd | im | memory[rs+im]=rt |
指令 | op | rs | rd | im | 功能 |
---|---|---|---|---|---|
beq | 000100 | rs | rd | im | PC=(rs==rt)?PC+4+im<<2:PC |
bne | 000101 | rs | rd | im | PC=(rs!=rt)?PC+4+im<<2:PC |
标记 | op | address |
---|---|---|
位数 | 31-26 | 25-0 |
功能 | 操作符 | 地址 |
指令 | op | address | 功能 |
---|---|---|---|
j | 000010 | addr | PC={(PC+4)[31,28],addr,00} |
jal | 000011 | addr | $31=PC;PC={(PC+4)[31,28],addr,00} |
MIPS_order.png
不同格式的指令具有不同的功能,其中:
以上的指令包括以下几种与指令有关的数据通路:
同时还有几种必备的与指令无关的数据通路:
当使用哈弗结构时,数据通路框图如下所示:
MIPS_dataflow.png
若使用流水线实现,可以将流水线划分为:取指->译码->准备操作数->执行->回写四个阶段: