赞
踩
(1)R型指令格式
000000 (op) | Rs | Rt | Rd | shamt | funct |
---|---|---|---|---|---|
6bits | 5bits | 5bits | 5bits | 5bits | 6bits |
注意: 该类型指令操作数和保存结果均通过寄存器进行。
操作 | 含义 |
---|---|
op | 操作码,所有R型指令都全为0 |
rs | 寄存器编号,对应第一个源操作数 |
rt | 寄存器编号,对应第二个源操作数 |
rd | 寄存器编号,保存结果 |
shamt | 常数,在移位指令中使用 |
funct | 功能码,指定指令的具体功能 |
(2)具体R型指令
注意: R型指令根据操作的寄存器数可以分为三种不同类型。
【1】带有3个寄存器
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 11] | [10 : 6] | [5 : 0] | 指令功能 |
---|---|---|---|---|---|---|---|
add | 000000 | rs | rt | rd | 00000 | 100000 | 寄存器加 |
sub | 000000 | rs | rt | rd | 00000 | 100010 | 寄存器减 |
and | 000000 | rs | rt | rd | 00000 | 100100 | 寄存器与 |
or | 000000 | rs | rt | rd | 00000 | 100101 | 寄存器或 |
xor | 000000 | rs | rt | rd | 00000 | 100110 | 寄存器异或 |
$rd = $rs op $rt
【2】带有2个寄存器
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 11] | [10 : 6] | [5 : 0] | 指令功能 |
---|---|---|---|---|---|---|---|
sll | 000000 | 00000 | rt | rd | sa | 100000 | 逻辑左移 |
srl | 000000 | 00000 | rt | rd | sa | 000010 | 逻辑右移 |
sll | 000000 | 00000 | rt | rd | sa | 000011 | 算术右移 |
$rd = $rt shift sa
【3】带有1个寄存器
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 11] | [10 : 6] | [5 : 0] | 指令功能 |
---|---|---|---|---|---|---|---|
jr | 000000 | rs | 00000 | 00000 | 00000 | 001000 | 寄存器跳转 |
jr rs;
PC = rs
(1)I型指令格式
OP | Rs | Rt | imm(立即数) |
---|---|---|---|
6bits | 5bits | 5bits | 16bits |
注意: 操作数中涉及立即数,结果保存到寄存器
操作 | 含义 |
---|---|
op | 标识指令的操作功能 |
rs | 第一个源操作数,是寄存器操作数 |
rt | 目的寄存器编号,用来保存运算结果 |
imm | 第二个源操作数,立即数 |
(2)具体I型指令
注意: I型指令存在4种不同的类型
【1】面向运算的I型指令
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 0] | 指令功能 |
---|---|---|---|---|---|
addi | 001000 | rs | rt | imm | 寄存器和立即数“加” |
andi | 001100 | rs | rt | imm | 寄存器和立即数“ |
ori | 001101 | rs | rt | imm | 寄存器和立即数“或” |
xori | 001110 | rs | rt | imm | 寄存器和立即数“异或” |
第一条指令是对立即数进行符号拓展,其他都是0拓展
addi rt, rs, imm;
$rt = $rs op E(imm)
【2】面向访存的I型指令
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 0] | 指令功能 |
---|---|---|---|---|---|
lw | 100011 | rs | rt | imm | 从存储器种读取数据 |
sw | 101011 | rs | rt | imm | 把数据保存到存储器 |
MIPS 32中唯一两条访问存储器的指令(RISC)
lw rt, imm(rs) #rt = mem [ rt = mem[rt=mem[rs+E(imm)]
sw rt, imm(rs) #mem [ mem[mem[rs+E(imm)] = $rt
【3】面向数位设置的I型指令
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 0] | 指令功能 |
---|---|---|---|---|---|
lui | 001111 | 00000 | rt | imm | 设置寄存器的高16位 |
lui rt, imm #$rt = imm<<16(空位补0)
【4】面向条件转移(分支)的I型指令
指令 | [31 : 26] | [25 : 21] | [20 : 16] | [15 : 0] | 指令功能 |
---|---|---|---|---|---|
beq | 000100 | rs | rt | imm | 寄存器相等则转移 |
bne | 000101 | rs | rt | imm | 寄存器不相等则转移 |
beq rs, rt, imm #if(rs = = rt) PC=PC+E(imm)<<2
bne rs, rt, imm #if(rs ! = rt) PC=PC+E(imm)<<2
标准的PC相对寻址方式
(1)J型指令格式
OP | 立即数 |
---|---|
6bits | 26bits |
(2)具体J型指令
指令 | [31 : 26] | [25 : 0] | 指令功能 |
---|---|---|---|
j | 000010 | address | 无条件跳转 |
jal | 001100 | address | 调用与联接 |
j address;
$ PC=($PC+4)H4 U (address<<2)
jal address;
$ra = $PC+4(保存返回地址)
$ PC=($PC+4)H4 U (address<<2)
MIPS 指令集(共31条)
助记符 | 指令格式 | 示例 | 示例含义 | 操作及其解释 | |||||
Bit # | 31…26 | 25…21 | 20…16 | 15…11 | 10…6 | 5…0 | |||
R-type | op | rs | rt | rd | shamt | func | |||
add | 000000 | rs | rt | rd | 00000 | 100000 | add $1,$2,$3 | $1=$2+$3 | rd <- rs + rt ;其中rs=$2,rt=$3, rd=$1 |
addu | 000000 | rs | rt | rd | 00000 | 100001 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。