MIPS指令集
### MIPS指令集详解 MIPS(Microprocessor without Interlocked Pipeline Stages)是一种精简指令集计算机(RISC)架构的标准,由MIPS Technologies Inc.设计。MIPS指令集旨在简化处理器设计并提高执行效率,其指令格式清晰,易于理解和实现。 #### MIPS-C指令集概述 MIPS-C指令集是从MIPS32指令集中精选出来的常用指令集合,能够支持大多数定点运算程序,并具备了CP0寄存器的操作以及异常处理机制,为简单的操作系统运行提供支持。该指令集总共包含55条指令,按照功能被细分为九个子类。 #### 指令详解 下面将对MIPS-C指令集中的一些基本指令进行详细介绍: ##### 加载与保存指令 - **LB** (Load Byte): 加载一个带符号的字节到寄存器中。 - **操作**: `R[rt] = {24{Mem[GPR[rs] + sign_ext(offset)][7]}, Mem[GPR[rs] + sign_ext(offset)][7:0]}` - **LBU** (Load Byte Unsigned): 加载一个无符号的字节到寄存器中。 - **操作**: `R[rt] = {24'b0, Mem[GPR[rs] + sign_ext(offset)][7:0]}` - **LH** (Load Halfword): 加载一个带符号的半字到寄存器中。 - **操作**: `R[rt] = {16{Mem[GPR[rs] + sign_ext(offset)][15]}, Mem[GPR[rs] + sign_ext(offset)][15:0]}` - **LHU** (Load Halfword Unsigned): 加载一个无符号的半字到寄存器中。 - **操作**: `R[rt] = {16'b0, Mem[GPR[rs] + sign_ext(offset)][15:0]}` - **LW** (Load Word): 加载一个字到寄存器中。 - **操作**: `R[rt] = Mem[GPR[rs] + sign_ext(offset)]` - **SB** (Store Byte): 将寄存器中的低八位保存到内存地址。 - **操作**: `Mem[GPR[rs] + sign_ext(offset)][7:0] = R[rt][7:0]` - **SH** (Store Halfword): 将寄存器中的低十六位保存到内存地址。 - **操作**: `Mem[GPR[rs] + sign_ext(offset)][15:0] = R[rt][15:0]` - **SW** (Store Word): 将整个寄存器的值保存到内存地址。 - **操作**: `Mem[GPR[rs] + sign_ext(offset)] = R[rt]` ##### 算术与逻辑指令 - **ADD** (Add): 对两个寄存器的值进行带符号加法。 - **操作**: `GPR[rd] = GPR[rs] + GPR[rt]` - **ADDU** (Add Unsigned): 对两个寄存器的值进行无符号加法。 - **操作**: `GPR[rd] = GPR[rs] + GPR[rt]` - **SUB** (Subtract): 对两个寄存器的值进行带符号减法。 - **操作**: `GPR[rd] = GPR[rs] - GPR[rt]` - **SUBU** (Subtract Unsigned): 对两个寄存器的值进行无符号减法。 - **操作**: `GPR[rd] = GPR[rs] - GPR[rt]` - **AND** (And): 对两个寄存器的值进行按位与运算。 - **操作**: `GPR[rd] = GPR[rs] AND GPR[rt]` - **OR** (Or): 对两个寄存器的值进行按位或运算。 - **操作**: `GPR[rd] = GPR[rs] OR GPR[rt]` - **XOR** (Xor): 对两个寄存器的值进行按位异或运算。 - **操作**: `GPR[rd] = GPR[rs] XOR GPR[rt]` - **NOR** (Nor): 对两个寄存器的值进行按位或非运算。 - **操作**: `GPR[rd] = ~(GPR[rs] OR GPR[rt])` ##### 移位指令 - **SLL** (Shift Left Logical): 进行逻辑左移。 - **操作**: `GPR[rd] = GPR[rt] << shamt` - **SRL** (Shift Right Logical): 进行逻辑右移。 - **操作**: `GPR[rd] = GPR[rt] >> shamt` - **SRA** (Shift Right Arithmetic): 进行算术右移。 - **操作**: `GPR[rd] = GPR[rt] >>a shamt` ##### 跳转与条件指令 - **BEQ** (Branch on Equal): 如果两个寄存器的值相等,则跳转到指定地址。 - **操作**: 如果 `GPR[rs] == GPR[rt]`,则跳转。 - **BNE** (Branch on Not Equal): 如果两个寄存器的值不相等,则跳转到指定地址。 - **操作**: 如果 `GPR[rs] != GPR[rt]`,则跳转。 - **BGTZ** (Branch on Greater Than Zero): 如果寄存器的值大于零,则跳转到指定地址。 - **操作**: 如果 `GPR[rs] > 0`,则跳转。 - **BLTZ** (Branch on Less Than Zero): 如果寄存器的值小于零,则跳转到指定地址。 - **操作**: 如果 `GPR[rs] < 0`,则跳转。 - **J** (Jump): 无条件跳转到指定地址。 - **操作**: `PC = target_address` - **JAL** (Jump and Link): 无条件跳转到指定地址,并将当前PC值保存在$ra寄存器中。 - **操作**: `GPR[ra] = PC; PC = target_address` - **JALR** (Jump and Link Register): 通过寄存器的值跳转,并将当前PC值保存在另一个寄存器中。 - **操作**: `GPR[rd] = PC; PC = GPR[rs]` ##### 寄存器间指令 - **JR** (Jump Register): 通过寄存器的值进行无条件跳转。 - **操作**: `PC = GPR[rs]` ##### 特殊指令 - **BREAK** (Break): 设置断点,通常用于调试。 - **操作**: 停止执行,进入调试模式。 - **SYSCALL** (System Call): 发起系统调用。 - **操作**: 触发特定的系统服务。 - **ERET** (Exception Return): 从异常处理中返回。 - **操作**: 恢复状态并继续执行。 #### 总结 MIPS-C指令集是基于MIPS32指令集的一个子集,它包含了足够的指令来支持大多数定点运算程序,并且能够支持简单的操作系统运行。这些指令涵盖了加载与保存数据、算术与逻辑运算、条件分支、跳转等多种操作。通过合理组合这些指令,可以构建出复杂而高效的程序。对于学习和理解计算机体系结构以及编程原理来说,MIPS-C指令集是一个非常有价值的工具。
剩余23页未读,继续阅读
- fbdog2015-11-13很详细的资料,谢谢分享
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- EBS excel导入实例
- 狙击机器人等待特定配对的创建,一旦检测到,机器人就会购买指定金额的代币.zip
- mapbox maps 添加简单地图
- python入门-安装Python软件包.pdf
- 关于标准库与时间:让编程者使用时间函数更便捷
- 此存储库收集了所有有趣的 Python 单行代码 欢迎随意提交你的代码!.zip
- 高考志愿智能推荐-JAVA-基于springBoot高考志愿智能推荐系统设计与实现
- 信奥中的数学:阶乘算法及其应用(NOI入门级,2024.11.24)
- 标准 Python 记录器的 Json 格式化程序.zip
- 复兴村医疗管理-JAVA-基于springBoot复兴村医疗管理系统设计与实现