当前位置: 首页 > news >正文

408复习笔记—MIPS指令系统

以此文来大致理一下408中对mips基础知识的考察 用来帮我自己去回顾

主存储器和寄存器之间数据传送指令

首先是最重要的两条访存指令,mips只有这两条指令可以进行访存的操作

一个是sw:store指令  向主存对应存储单元中存入数据-将指定寄存器中的一个字的数据存到指定的内存单元中

一个是lw:load指令- 取出主存中对应存储单元的数据 将指定内存地址的一整个字的数据传送到指定的寄存器中

一般配合基址寻址来进行,sp相当于基址寄存器。

一般MIPS基址寄存器有32位

所以寻址范围是0-2的32次方-1——可寻址0到4GB内存地址范围

基址寻址 适合配合数组来进行, 基址寄存器保存了整个数组的首地址a[ ], 然后加上偏移量可以找到指定位置的数组元素,假如有一数组int a[i],以a[4]为例,将i的值放进r1寄存器,当前i=4

则a[4]的主存地址=a数组的首地址+[r1]*4,这里*4是因为按字节编址,一个int变量占4个字节,所以占了4个存储单元,故要偏移i*4。

模拟一下sw 2 16(4)的执行过程:

该sw指令取到mdr中,然后cu发出控制信号,将指令从mdr复制到ir中,经过cu译码,4号寄存器的值通过加法器加上16 得到的主存地址送到mar当中,mar将地址送到内存控制器中,然后将2号寄存器的值送到mdr ,cu发出主存写命令 再把mdr中的数据送到对应的主存地址所指向的存储单元中。

R[r]表示寄存器组中的r号寄存器中的内容

M[addr]主存地址为addr对应存储单元的内容

M[R[4]+12] 将4号寄存器中的值加上偏移量12组成addr1,表示主存的addr1地址对应的存储单元的内容

M[pc]表示pc所指内存中的指令

lw 2 12(4)的执行过程:

该lw指令取到mdr中,然后cu发出控制信号,将指令从mdr复制到ir中 ,cu 译码 分析操作码 发出控制信号将4号寄存器的值通过加法器 得到目标地址 送到mar中,地址再从mar送到内存控制器中,然后cu发出主存读命令 把对应主存单元中的值加载出来 放到2号寄存器中去。

注意:指令每取出到mdr中时,pc已经自动+4。

i型,J型,R型指令格式:

定长指令字 MIPS:

定长的指令让指令规整 利于cpu执行 但是容易造成空间浪费 所有指令都是32位 有些指令没必要用这么多位数的 一个操作数字段也要占32位 太浪费了

变长指令字 x86

MIPS一共有32个通用寄存器 

左移右移的偏移量的范围位0到31 偏移32位则数据都为0了, 就没意义了,真题考过

r型高位6位op始终是6个0 代表 逻辑运算 这一种操作 它是有意义的 具体操作类型决定于低6位的功能码来确定 如加减乘除add sub div mul or and xor nor逻辑或非取反 移位 等 共有2的6次方64种操作类型

i型指令——immediate立即数的意思

如:addiu 无符号立即数相加

符号扩展立即数 lw sw

beq bne 也是属于i型指令 满足条件相当于跳转jmp pc指向beq指令的下一个指令的地址的值加上偏移量x一条指令字长占的存储单元的个数

这里尤其注意PC=PC+4+(offset*k)k为指令占的存储单元,这里的4就是移动到下一条指令的偏移,也就是4字节——4个存储单元,要注意题目里说的pc是不是指向的是当前指令的下一条指令的地址,如果是的话,就不用+4了!!!!!!!!!

这一块涉及到pc相对寻址。

J型:

散记:

for循环结构;

主存地址之间不能直接传数据 必须先到寄存器中

当前函数的局部变量或者上一层的函数的变量可以存到寄存器或者上一层zhanzhen中

lw 实现回到上一层帧底部

i型的偏移量只有16位表达的地址的大小太小了

j型指令 可以跳转更大范围的地址

W

未完待续

http://www.dtcms.com/a/394668.html

相关文章:

  • 阿里万相2.1:蓝耘MaaS平台部署 vs 官网在线使用:万字实测对比与深度技术解析
  • 11月长春EI会议:ISRAI 2025 诚邀学者参与投稿
  • 【AI时代速通QT】第七节:Visual Studio+Qt 开发指南
  • 医疗问诊陪诊小程序:全方位守护就医体验的功能宝库
  • iOS 开发环境搭建完整指南 Xcode 安装配置、iOS 开发工具选择、ipa 打包与 App Store 上架实战经验
  • 【Node.js】Express 和 Koa 中间件的区别
  • 学习路之PHP--TP8+swoole
  • 【从零开始的大模型原理与实践教程】--第五章:动手搭建大模型LLaMA2
  • Vue.js 从入门到实践1:环境搭建、数据绑定与条件渲染
  • “潮涌之江,文兴浙里”文化推动高质量发展主题活动在西湖区调研
  • 【MongoDB】mongoDB数据迁移
  • 《C++多态入门:轻松理解虚函数与多态编程》
  • 虚拟化范式跃迁中的生命周期隐喻与命令哲学——解构Docker容器从抽象实体到可控资源的数字化生存法则
  • OpenLayers地图交互 -- 章节八:平移交互详解
  • AES+RSA 实现混合加密
  • 命名实体识别技术NER
  • 网络验证 一键加密 一键接入验证 加壳加密数盾加盾
  • JDBC组件
  • StandardScaler,MinMaxScaler等四个内置归一化函数学习
  • pandawiki 无法获取模型列表
  • openEuler2403安装宝塔面板
  • Altium Designer(AD) PCB铺铜
  • 解决Django长时间操作中的MySQL连接超时问题
  • 样本量估计原理与python代码实现
  • 0v0.pro 深度评测、 AI 助手篇、80+模型 free
  • ego(9)---ego-planner中的动力学仿真
  • 2025年9月第3周AI资讯
  • ETL详解:从核心流程到典型应用场景
  • SQL查询基础常用攻略
  • 数据结构二叉树(C语言)