Skip to content
Liu Xiaolong edited this page Dec 10, 2022 · 2 revisions

Welcome to the -Computer-System-Practice wiki!

数据格式

处理器可处理的数据格式定义如下:

比特(bit, b)

字节(Byte, 8bits, B)

半字(Halfword, 16bits, H)

字(Word, 32bits, W)

1.2 寄存器

处理器包含的软件可见的寄存器种类如下:

32 个 32 位通用寄存器,r0~r31。其中有两个被赋予了特殊含义:r0,0 号通用寄存器,值永远为 0;r31,31 号通用寄存器,被 JAL,BLTZAL 和 BGEZAL 指令隐式的用作目标寄存器,存放返回地址。

HI/LO 寄存器。HI 寄存器存放乘法指令结果的高半部分或是除法指令结果的余数,LO 寄存器存放乘法指令结果的低半部分或是除法指令结果的商。

程序计数器(PC)。这个寄存器软件无法直接访问。

控制寄存器(CP0)。一组用于中断、例外控制的寄存器。

1.3 大小尾端

处理器中的字节顺序和比特顺序均采用小尾端模式,即第 0 字节永远是最低有效字节,第 0 比特永远是最低有效比特。

1.4 存储访问类型

处理器至少支持不可缓存(uncached)这种存储访问类型。属于此类型的访问将直接读、写物理内存(或物理内存地址映射的寄存器),但不会访问或修改各级缓存中的内容。

2 操作模式

处理器永远处于核心态模式(Kernel Mode)。该操作模式下处理器可以执行所有指令,访问 32 位全地址空间。

3 指令定义

3.1 指令格式

所有指令长度均为 32 比特。

除个别指令外,所有指令的格式均为立即数型(I-Type)、跳转型(J-Type)和寄存器型(R-Type)三种类型中的一种。三类指令格式如下所示。

I-Type

0 31 26 16 15 25 21 20

opcode rt immediate rs

J-Type

0 31 26 25

opcode instr_index

R-Type

0 31 26 16 15 25 21 20 11 10 6 5

opcode rs rt rd sa function

3.2 指令功能分类

处理器需要实现的指令包括除 4 条非对齐指令外的所有 MIPS I 指令以及 MIPS32 中的 ERET 指令,有 14 条算术运算指令、8 条逻辑运算指令,6 条移位指令、8 条分支跳转指令、4 条数据移动指令、2 条自陷指令、12 条访存指令、3 条特权指令,共计 57 条。下面分类给出各部分指令的简要功能介绍。

算术运算指令

指令名称格式 指令功能简述

ADD rd, rs, rt 加(可产生溢出例外)

ADDI rt, rs, immediate 加立即数(可产生溢出例外)

ADDU rd, rs, rt 加(不产生溢出例外)

ADDIU rt, rs, immeidate 加立即数(不产生溢出例外)

SUB rd. rs, rt 减(可产生溢出例外)

SUBU rd, rs, rt 减(不产生溢出例外)

SLT rd, rs, rt 有符号小于置 1

SLTI rt, rs, immediate 有符号小于立即数设置 1

SLTU rd, rs, rt 无符号小于设置 1

SLTIU rt, rs, immediate 无符号小于立即数[1]设置 1

DIV rs, rt 有符号字除

DIVU rs,rt 无符号字除

MULT rs, rt 有符号字乘

MULTU rs, rt 无符号字乘

逻辑运算指令

指令名称格式 指令功能简述

AND rd, rs, rt 位与

ANDI rt, rs, immediate 立即数位与

LUI rt,immediate 寄存器高半部分置立即数

NOR rd, rs, rt 位或非

OR rd, rs, rt 位或

ORI rt, rs, immediate 立即数位或

XOR rd, rs, rt 位异或

XORI rt, rs, immediate 立即数位异或

请注意虽然是无符号比较,但是立即数仍是进行有符号扩展。

移位指令

指令名称格式 指令功能简述

SLL rd, rt, sa 立即数逻辑左移

SLLV rd, rt, rs 变量逻辑左移

SRA rd, rt, sa 立即数算术右移

SRAV rd, rt, rs 变量算术右移

SRL rd, rt, sa 立即数逻辑右移

SRLV rd, rt, rs 变量逻辑右移

分支跳转指令

指令名称格式 指令功能简述

BEQ rs, rt, offset 相等转移

BNE rs, rt, offset 不等转移

BGEZ rs, offset 大于等于 0 转移

BGTZ rs, offset 大于 0 转移

BLEZ rs, offset 小于等于 0 转移

BLTZ rs, offset 小于 0 转移

BLTZAL rs, offset 小于 0 调用子程序并保存返回地址

BGEZAL rs, offset 大于等于 0 调用子程序并保存返回地址

J target 无条件直接跳转

JAL target 无条件直接跳转至子程序并保存返回地址

JR rs 无条件寄存器跳转

JALR rd, rs 无条件寄存器跳转至子程序并保存返回地址下

数据移动指令

指令名称格式 指令功能简述

MFHI rd HI 寄存器至通用寄存器

MFLO rd LO 寄存器至通用寄存器

MTHI rs 通用寄存器至 HI 寄存器

MTLO rs 通用寄存器至 LO 寄存器

自陷指令

指令名称格式 指令功能简述

BREAK 断点

SYSCALL 系统调用

访存指令

指令名称格式 指令功能简述

LB rt, offset(base) 取字节有符号扩展

LBU rt, offset(base) 取字节无符号扩展

LH rt, offset(base) 取半字有符号扩展

LHU rt, offset(base) 取半字无符号扩展

LW rt, offset(base) 取字

SB rt, offset(base) 存字节

SH rt, offset(base) 存半字

SW rt, offset(base) 存字

自陷指令

指令名称格式 指令功能简述

ERET 例外处理返回

MFC0 读 CP0 寄存器值至通用寄存器

MTC0 通用寄存器值写入 CP0 寄存器

Clone this wiki locally