assembly - 不明白这条指令如何让你得到 A[f] 的值
问题描述
我正在为一个计算机体系结构类做一些功课,我需要使用 MIPS 指令从内存中加载值 A[f],但提供的解决方案对我来说没有意义。我显然对此很陌生,我知道我误解了记忆如何工作的一些重要组成部分。
假设 f 存储在 $s0 中,并且数组 A 从存储在 $s6 中的地址开始,那么指令“add $t0, $s6, $s0”如何得到 A[f]?
假设 f 的值为 5,数组 A 从 0x000100 开始。“add $t0, $s6, $s0”不是给你0x000105吗?那不可能是 A[5] 的地址。
解决方案
你同意A[0]的地址是0x100吗?
那么,如果A 是一个字节数组,那么 A[5] 的地址就是 0x105。
但是,如果A 是一个字数组,那么 A[5] 的地址将是 0x100 + 5*4 或 0x114。
那么,你看到数组元素的大小是如何产生影响的了吗?我们必须按元素的大小(以字节为单位)来缩放索引。
...此外,计算的索引地址必须在内存加载指令中使用...如果您想从数组的元素中获取值,或者如果您想更新元素的值,则必须使用内存存储指令的数组。
推荐阅读
- python - 如何在新选项卡中打开元素?
- javascript - 异步 javascript/nodejs 函数永远不会返回或结束
- python - 如何将浮点值转换为数组
- java - 无法从 api 获得响应
- apache-flink - 在 Flink 1.9.1 下使用 confluent registry 序列化 Kafka 消息
- excel - Excel公式检查相似名称并将其ID添加到新列
- ruby-on-rails - Rails 中的 API 秘密生成
- windows - Windows 服务器上存在子域问题的 Apache 虚拟主机
- flutter - 如何使用 Flutter 修复 VSCode 上的自动修复问题?
- node.js - 有没有办法从请求函数中提取“body”?