首页 > 解决方案 > 不明白这条指令如何让你得到 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] 的地址。

标签: assemblymips

解决方案


你同意A[0]的地址是0x100吗?

那么,如果A 是一个字节数组,那么 A[5] 的地址就是 0x105。

但是,如果A 是一个字数组,那么 A[5] 的地址将是 0x100 + 5*4 或 0x114。

那么,你看到数组元素的大小是如何产生影响的了吗?我们必须按元素的大小(以字节为单位)来缩放索引。

...此外,计算的索引地址必须在内存加载指令中使用...如果您想从数组的元素中获取值,或者如果您想更新元素的值,则必须使用内存存储指令的数组。


推荐阅读