MIPS指令大全

52条基本指令和 5条特权指令如下:

指令

31:26

25:21

20:16

15:11

10:6

5:0

描述

8条逻辑运算指令

and rd, rs, rt

000000

rs

rt

rd

00000

100100

将rs 与rt 寄存器内的数据进行逻辑运算,结果存入rd 寄存器中

or rd, rs, rt

000000

rs

rt

rd

00000

100101

xor rd, rs, rt

000000

rs

rt

rd

00000

100110

nor rd, rs, rt

000000

rs

rt

rd

00000

100111

andi rt, rs, immediate

001100

rs

rt

immediate

addi ori xori:寄存器 rs 中的值与 0 扩展至 32 位的立即数 imm 按位逻辑运算,结果写入寄存器 rt 中。

LUI:将 16 位立即数 imm 写入寄存器 rt 的高 16 位,寄存器 rt 的低 16 位置 0。

xori rt, rs, immediate

001110

rs

rt

immediate

lui rt, immediate

001111

00000

rt

immediate

ori rs, rt, immediate

001101

rs

rt

immediate

6条移位运算指令

sll rd, rt, sa

00000

00000

rt

rd

sa

000000

由立即数sa指定位移量,sll,srl分别对寄存器rt的值逻辑左移、逻辑右移,结果写入rd寄存器中.sraj则进行算数右移(左边补上符号位)

srl rd, rt, sa

00000

00000

rt

rd

sa

000010

sra rd, rt, sa

00000

00000

rt

rd

sa

000011

sllv rd, rt, rs

00000

rs

rt

rd

00000

000100

由寄存器rs的值指定位移量,其余同上

srlv rd, rt, rs

00000

rs

rt

rd

00000

000110

srav rd, rt, rs

00000

rs

rt

rd

00000

000111

4条数据移动指令

补充:乘法中,两个32位数相乘结果位64位,而在除法中除了商数外还有余数。因此为了避免32位通用寄存器存不下这些数的问题,MIPS架构使用了额外的HI、LO寄存器来完成乘除法运算。

MFHI rd

000000

00000

00000

rd

00000

010000

HI寄存器内容->rd寄存器

MFLO rd

000000

00000

00000

rd

00000

010010

LO寄存器内容->rd寄存器

MTHI rs

000000

rs

00000

00000

00000

010001

rs寄存内容器-> HI寄存器

MTLO rs

000000

rs

00000

00000

00000

010011

rs寄存内容器->LO寄存器

14条算数指令

add rd, rs, rt

000000

rs

rt

rd

00000

100000

加(可产生溢出例外)

addu rd, rs, rt

000000

rs

rt

rd

00000

100001

加(不可产生溢出例外)

addi rt, rs, immediate

001000

rs

rt

immediate

加立即数(可产生溢出例外)

addiu rt, rs, immediate

001001

rs

rt

immediate

加立即数(不可产生溢出例外)

sub rd, rs, rt

000000

rs

rt

rd

00000

100010

减(可产生溢出例外)

subu rd, rs, rt

000000

rs

rt

rd

00000

100011

减(不可产生溢出例外)

slt rd, rs, rt

000000

rs

rt

rd

00000

101010

若rs 有符号小于 rt 则rd置1

sltu rd, rs, rt

000000

rs

rt

rd

00000

101011

若rs 无符号小于 rt 则rd置1

slti rt, rs, immediate

001010

rs

rt

immediate

若rs 有符号小于 立即数 则rd置1

sltiu rt, rs, immediate

001011

rs

rt

immediate

若rs 无符号小于 立即数 则rd置1

div rs, rt

000000

rs

rt

00000

00000

011010

有符号字除和无符号字除,rs/rt的值存入LO寄存器,rs%rt的值存入HI寄存器

divu rs, rt

000000

rs

rt

00000

00000

011011

mult rs, rt

000000

rs

rt

00000

00000

011000

有符号字乘和无符号字乘,rs*rt的低32位和高32位分别存入LO和HI寄存器中

multu rs, rt

000000

rs

rt

00000

00000

011001

12条跳转指令

beq rs, rt, offset

000100

rs

rt

offset

rs,rt寄存器内的值相等时跳转

bne rs, rt, offset

000101

rs

rt

offset

rs,rt寄存器内的值不相等时跳转

bgez rs, offset

000001

rs

00001

offset

rs寄存器内的值大于等于0时跳转

bgtz rs, offset

000111

rs

00000

offset

rs寄存器内的值大于0时跳转

blez rs, offset

000110

rs

00000

offset

rs寄存器内的值小于等于0时跳转

bltz rs, offset

000001

rs

00000

offset

rs寄存器内的值小于0时跳转

bltzal rs, offset

000001

rs

10000

offset

rs寄存器内的值小于0时跳转并保存返回地址

bgezal rs, offset

000001

rs

10001

offset

rs寄存器内的值大于等于0时跳转并保存返回地址

j target

000010

target

无条件跳转

jal targrt

000011

target

无条件跳转并保存返回地址

jr rs

000000

rs

00000

00000

00000

001000

无条件跳转至寄存器内的PC值

jral rs

000000

rs

00000

00000

00000

001001

无条件跳转至寄存器内的PC值并保存返回地址

8条访存指令

lb rt, offset(rs)

100000

rs

rt

offset

从rs偏移offset处取一个字节并做有符号扩展存入rt

lbu rt, offset(rs)

100100

rs

rt

offset

从rs偏移offset处取一个字节并做无符号扩展存入rt

lh rt, offset(rs)

100001

rs

rt

offset

从rs偏移offset处取一半字并做有符号扩展存入rt

lhu rt, offset(rs)

100101

rs

rt

offset

从rs偏移offset处取一个半字并做无符号扩展存入rt

lw rt, offset(rs)

100011

rs

rt

offset

取字

sb rt, offset(rs)

101000

rs

rt

offset

存字节

sh rt, offset(rs)

101001

rs

rt

offset

存半字

sw rt, offset(rs)

101011

rs

rt

offset

存字

5条特权指令

break

000000

code

001101

发生断点异常,立即无条件地将控制权转到异常处理程序。code字段可用作软件参数,但异常处理程序只能通过加载包含指令的内存字的内容来检索。

syscall

000000

code

001100

发生断点异常,立即无条件地将控制权转到异常处理程序。code字段可用作软件参数,但异常处理程序只能通过加载包含指令的内存字的内容来检索。

eret

010000

1 000 0000 0000 0000 0000

011000

在中断、异常或错误处理完成时返回中断指令。ERET不执行下一条指令(即,它没有延迟槽)。

mtco

010000

00100

rt

rd

0000 0000 sel(3位)

通用寄存器rt的内容加载到由rd和sel组合指定的协处理器CP0寄存器中。

mfco

010000

00000

rt

rd

0000 0000 sel(3位)

由rd和sel组合指定的CP0寄存器的数据加载到通用寄存器rt中

你可能感兴趣的:(学习笔记,硬件工程,fpga开发,risc-v)