MIPS 32位架构:如何在同一时钟周期内读取和写入寄存器文件中的寄存器?

2023-12-27

我的计算机体系结构书籍解释了这一点

“由于对寄存器文件的写入是边沿触发的,因此我们的设计可以 在一个时钟周期内合法地读写同一个寄存器: read 将得到在较早的时钟周期写入的值,而 写入的值将可在后续时钟周期中读取。”

这是有道理的,我有点明白寄存器文件是怎么回事。但是,我不明白每个事件何时发生。假设我们正在同一个周期中读取 32 个寄存器文件之一并对其进行写入。寄存器什么时候被读取?会写到什么时候呢?我不完全理解事件是如何由时钟边沿触发的,因此解释一下也会有所帮助。谢谢你!


读取寄存器的值是异步的,而在您在类中工作的架构中,寄存器是同步写入的(即写入是边沿触发的)。

这意味着您可以读取寄存器的当前值,对其应用一些操作(例如添加一些立即数)并在下一个时钟上升沿写入结果。

假设您想发行addiu $1, $1, 123,即取当前值$1,加上 123 并将结果存储回$1.

在时钟周期开始时,控制单元将指示寄存器文件将 $1 的内容放入进入 ALU 的数据总线之一。控制单元还会指示将立即数 123 放入也进入 ALU 的另一条数据总线中。加法只是在 ALU 内部实现的组合电路,它会计算所述加法并将结果放入连接寄存器文件的数据总线中进行存储。 所有这些都是在时钟上升沿发生之前完成的,并且相加结果直到下一个上升沿出现为止。在某个时刻出现上升沿,加法结果现在被写回到寄存器中$1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIPS 32位架构:如何在同一时钟周期内读取和写入寄存器文件中的寄存器? 的相关文章

  • 简单 mips 中的无限循环

    我正在尝试了解 ra 所以我想要的输出是 mainfunction1main 通过 main 调用 function1 function1 返回到 main 然后 main 完成 但由于某种原因 我得到一个无限循环 打印 mainfunct
  • 虚拟化页表的工作原理

    阅读有关虚拟化页表概念的内容 其中部分页表放入虚拟内存中 维基百科 https en wikipedia org wiki Page table Virtualized page table以及 Patterson 和 Hennessy 页
  • 计算三级缓存的实际/有效CPI

    a 给定一个具有两级高速缓存 L1 和 L2 的内存系统 以下是规格 L1缓存命中时间 2个时钟周期 一级缓存命中率 92 L2 缓存的未命中惩罚 L2 的命中时间 8 个时钟周期 二级缓存命中率 86 主存丢失惩罚 37 个时钟周期 暂时
  • 在MIPS中,为什么跳转指​​令可以将程序计数器设置为28位目标地址

    在 MIPS 中 32 位跳转指令由 6 位操作码和 26 位我们要设置程序计数器的目标 目标 地址组成 然而 可以将程序计数器设置为 28 位目标地址 如果跳转指令只能容纳 26 位 这怎么可能呢 MIPS 上的指令始终是 4 字节对齐的
  • RISC-V 调用约定的 ABI 寄存器名称

    我对 RISC V ABI 寄存器名称感到困惑 例如 第 85 页的 RISC V 指令集手册 第一卷 用户级 ISA 版本 2 0 中的表 18 2 指定堆栈指针sp正在注册x14 然而 指令 addi sp zero 0 由 riscv
  • Aarch64 什么是延迟转发?

    中提到了 延迟转发 Arm Neoverse E1核心软件优化指南 https developer arm com documentation swog466751 a 以及其他一些 CPU 型号的优化指南 Instruction Grou
  • 阿迪和苏比之间到底是什么“关系”?

    我应该回答这个问题 经过一番研究后发现 add 和 sub 具有相同的操作码 仅在功能领域有所不同 这是答案还是其他什么 Update Nios II CPU 手册中提供了它 subi subtract immediate Operatio
  • 如何确定 Windows 10 上可执行二进制文件的体系结构

    给定一些Random exe在 Windows 上 我如何确定 它的CPU架构 例如Intel ARM 以及 它的位数 例如 32 或 64 我可以使用文件资源管理器 其他工具或编程方法中的属性吗 Cygwin https www cygw
  • 比较堆栈中的两个值? [复制]

    这个问题在这里已经有答案了 我卡住了 在我的汇编代码中 我想比较两个值 堆 x86 语法 AT T cmpl 4 ebp 4 ebp 错误 cmp 的内存引用太多 我认为不可能根据乘数和 ebp 来比较两个值 有什么建议 您可以使用 CMP
  • MIPS 在程序中使用 $s0... 等注册并最终恢复它是否优雅

    我在 MIPS 教程中读到 只有寄存器 s0 s7 在过程调用中被保留 但我认为 也许我错了 创建有副作用的程序并不优雅 我认为程序应该只更改 v0 v1 寄存器和堆栈 如果需要的话 我是对的吗 所以我认为在我的程序中我只能使用 t0 t9
  • 将 C 转换为 MIPS - 嵌套数组

    我正在学习 MIPS 汇编语言 在书中看到了这个例子 对我来说这似乎是不正确的 如果是的话 这将不是我在本书中发现的第一个错误 变量f and g被分配寄存器 s0 and s1分别是数组的基地址A and B are s6 and s7分
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 使用 MIPS 从 Big Endian 到 Little Endian 无需逻辑运算?

    我正在使用 MIPS QtSpim 将 32 位字从 Big Endian 转换为 Little Endian 我下面显示的内容已检查且正确 不过我想知道还有什么其他方法可以让我进行转换 我虽然只使用了旋转和移位 但如果没有逻辑运算 我就无
  • 为什么如果内存组织为字,则程序计数器加 1;如果内存组织为字节,则程序计数器加 2?

    如果在计算机中一条指令是 16 位 并且如果存储器被组织为 16 位字 则通过在当前指令的地址中加 1 来计算下一条指令的地址 如果内存是按字节组织的 可以单独寻址 那么我们需要在当前指令地址上加二 得到顺序执行的下一条指令的地址 为什么会
  • SIMD 和 VLIW 指令是一样的吗?

    SIMD 单指令多数据 和 VLIW 超长指令字 到底有什么区别 其中一个是另一个的子集吗 或者它们是两个完全不同的东西 完全不相关且正交 一台机器可以有一个或两个 或者两者都没有 SIMD 指令可以作为扩展添加到 VLIW ISA 但 V
  • 分支预测器和分支目标缓冲区如何共存?

    我的问题是它们如何在现代 CPU 架构中共存并协同工作 你把它稍微颠倒了 每次获取时 您都会索引到分支预测器 它会告诉您刚刚收到的指令是否will be解码为已采取的分支 如果没有 则获取下一个连续地址 但是 如果您的分支预测器说它将是一个
  • 何时可以重用avx指令中的源寄存器

    在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用 例如 我想使用vgatherdps该指令消耗两个 ymm 寄存器 其中之一是位移索引 我意识到vgatherdps由于数据的局部性较差 因此需要花费大量时间来收集 位移索引寄存器
  • 超标量和 VLIW

    我想问一些关于ILP的问题 超标量处理器是标量处理器和矢量处理器的混合体 那么我可以说矢量处理器的架构遵循超标量吗 同时处理多个指令不会使体系结构超标量 因为流水线 多处理器或多核体系结构也可以实现这一点 这意味着什么 我读过 超标量 CP
  • ARM Cortex-M3 启动代码

    我试图了解 STM32 微控制器的 Keil realview v4 附带的初始化代码是如何工作的 具体来说 我试图了解堆栈是如何初始化的 In the 文档 http infocenter arm com help index jsp t
  • 将以下机器语言代码(0x2237FFF1)翻译成MIPS汇编

    到目前为止我已经翻译了这段代码 但我不明白的是如何计算 计算 16 位立即地址的数量 0x2237FFF1 转为二进制 0010 0010 0011 0111 1111 1111 1111 0001 现在我正在读取操作码 001000 并知

随机推荐

  • Sqlite 中的多线程

    我正在使用 System data sqlite 连接到 Sqlite 数据库 按照SQLite 文档 http www sqlite org threadsafe html 用户可以通过使用启用多线程SQLITE OPEN NOMUTEX
  • tkinter treeview单击所选项目的事件[重复]

    这个问题在这里已经有答案了 在我的小型 tkinter 应用程序中 我的树具有如下图所示的结构 我只想在用户双击树的最后一个项目 Amount1 或 Amount2 等 时才创建单击事件 不幸的是 当我单击树的任何项目时 单击事件会起作用
  • Node-gyp 和自定义依赖/库/头安装路径

    我有一个构建环境 其中我的库 和标头 安装到自定义位置 从 npm 安装软件包时 使用 node gyp 的模块会失败 因为它们找不到我已安装的库 或标头 如何让 node gyp 知道我的自定义安装位置 linux 如果你设置CXXFLA
  • 无法连接到服务器 127.0.0.1 shell/mongo.js

    当我在 ubuntu 中设置 mongodb 时 我尝试 mongo 它显示此错误 couldn t connect to server 127 0 0 1 shell mongo js 那么我能做什么 thanks 手动删除锁定文件 su
  • 将对象传递给 PowerShell 函数

    我试图将 SQL 适配器对象传递给 PowerShell 函数 但收到此错误 executeQueryAndFillTable 无法处理参数转换 参数 da 无法转换类型的 System Object 值 System Object 以键入
  • 如何使用Vue登录后渲染标题和侧边栏

    我有一个 Vue js 应用程序 目前我使用不同的页面渲染它 我遇到了一个问题 当我第一次登录时 它只会渲染单个主要组件 即根据 vue 路由器的页面 我正在寻找一种方法来运行我的登录功能 然后转到 dashboard但我希望它重新渲染我的
  • 选择最高薪水

    假设工资表 name lowhours highhours wage Default 0 0 40 0 100 Default 40 0 50 0 150 Default 50 0 70 5 154 Default 70 5 100 0 2
  • 从 Perforce 恢复已删除的文件

    上个月我从 Perforce 中删除了一个文件 有办法从 P4 中检索它吗 如果是这样 我可以使用什么命令 注意 我不是 p4 的管理员 我不希望该文件返回到 P4 但我只想将其保留在我的本地工作区中 另外 我不知道上个月删除它的确切时间范
  • 如何获得unix中每列的最大长度?

    假设 我有一个这样的源文件 ID NAME ADDRESS 1 ABC PUNE 2 XYZA MUMBAI 12 VB NAGPUR 我想获取每列的最大长度 不包括标题名称 输出应该是这样的 2 4 6 我已经尝试过这样的命令 尾部 2
  • 相对于batch的查询成本是100%

    我不确定如何解释这一点 但我在 sql server 2005 中运行的所有查询都有 100 的 查询成本 相对于批处理 有什么办法可以降低成本吗 如果您的批次 您在给定调用中执行的操作 有一个查询 那么relative对于该批次 该查询占
  • 如何在android中获取用户定义的“设备名称”?

    我正在尝试获取在设置中设置的用户定义的设备名称 我已经尝试了几种选择 但到目前为止还没有任何结果 如果它有帮助或有害 我需要在广播接收器中使用它 Thanks 这让我得到了我所需要的 http cmanios wordpress com 2
  • 如何从 Google Apps 脚本上的“doPost”请求获取原始 URL

    我一直在尝试识别对 Google Apps 脚本发出的 POST 请求的来源doPost 内容服务 function doPost request Something like this var originURL request head
  • 如何为列表框中的每个项目设置不同的工具提示文本?

    我有一个与对象集合进行数据绑定的列表框 列表框被配置为显示每个对象的标识符属性 我想显示一个工具提示 其中包含悬停在 列表框中的项目的特定信息 而不是整个列表框的一个工具提示 我正在 WinForms 中工作 感谢一些有用的博客文章 整理了
  • 无法在跨客户端google oauth2.0中交换访问令牌和刷新令牌的授权代码

    我在 Android 应用程序上实现 Google Play 服务登录并将授权代码传递到后端服务器时遇到问题 因此服务器将交换访问令牌和刷新令牌的代码 首先让我写几行已经尝试过 读过的内容 在 code google com apis co
  • Zookeeper 的临时 znode 的用例是什么?

    Zookeeper 文档内容如下 ZooKeeper 也有临时节点的概念 只要创建 znode 的会话处于活动状态 这些 znode 就会存在 当会话结束时 znode 将被删除 当您想要实现 待定 时 临时节点非常有用 我了解其功能 但是
  • PHP - 下载次数

    如何显示一个计数器来计算文件的下载次数 我以前见过 下载了 450 次 谢谢 不要让用户直接下载文件 而是通过如下脚本 file REQUEST file dldir downloads if file exists dldir file
  • 计时器、单击、mousedown、mouseup 事件不能一起工作

    正在寻找有关我遇到的问题的帮助 抱歉 如果这个问题已经被问过 我找不到类似的东西 这个想法是当点击图片框时将图像更改为ON 如果按住图片框超过 2 秒以打开新表单并将图片框保留为 关闭 但是 如果图片框被单击 打开 然后按住 2 秒然后返回
  • 在 xcode 中使用调试器 Commend 跳转断点

    我在 Xcode 中使用跳转命令设置了一个断点来强制传递某些条件 但是当它执行到第 168 行时 它崩溃并显示消息 Thread 1 EXC BAD ACCESS code 1 address 0x1 为什么会发生这种事 控制台记录 警告
  • 如何在core-plot中绘制Y轴网格?

    如何绘制X轴网格 即针对y 轴值绘制水平线 请帮我一下 sri 您需要设置majorGridLineStyle and or minorGridLineStyle轴上的属性 请参阅示例文件夹中的 CPTestApp 以获取一些示例代码
  • MIPS 32位架构:如何在同一时钟周期内读取和写入寄存器文件中的寄存器?

    我的计算机体系结构书籍解释了这一点 由于对寄存器文件的写入是边沿触发的 因此我们的设计可以 在一个时钟周期内合法地读写同一个寄存器 read 将得到在较早的时钟周期写入的值 而 写入的值将可在后续时钟周期中读取 这是有道理的 我有点明白寄存