1

好吧,我可能本来可以问教授这个问题,但在过去的几周里我没有经常去教职,所以我会问任何遇到这个问题的人。

在 MIPS 中,如果整数数组的起始地址(A[0] 的地址)存储在寄存器 $s3 中,则用于将数组的第 9 个元素存储在临时寄存器 $t0 中的汇编代码将为 lw $ t0 32($s3)。所以偏移量是 32。对此的解释是,当今大多数架构都引用内存中的每个字节(即每个内存单元),并且由于整数是 4 字节,这是“字”的最常见大小,因此下一个整数的地址在内存中将是当前地址 + 4 ,使地址为第 9 个整数:起始地址 + 4*8。好的!

现在我知道,对于以 ASCII 编码的字符,所需的位数是 8 = 1 字节。所以我想问的是,如果我们有一个字符数组,数组中下一个字符的地址是否会是:“当前地址 + 1”,因为聊天只需要 1 个存储单元,每个存储单元都有自己的地址?或者,因为架构中的字大小是 4 个字节,所以可以引用的最小量是一个字,尽管每个存储单元都有自己的地址,使字符占用 4 个字节,尽管只需要 1 个字节?如果第一种情况为真,处理器如何知道天气将 1 添加到 4 的地址?编译器是否需要额外的指令来确定数据类型?此外,由于 int 占用了 4 个地址引用的空间,

现在我在缓存中(顺便说一句,我正在向 Patterson 和 Hennessy 的计算机组织和设计学习),这件事真的让我很困扰,所以如果有人能回答我将不胜感激。那谢谢啦!

4

1 回答 1

2

如果我们有一个字符数组,数组中下一个字符的地址是否会是:“当前地址 + 1 [字节]”?

是的。

如果 [this] 为真,处理器如何知道天气将 1 添加到 4 的地址?编译器是否需要额外的指令来确定数据类型?

还有其他说明。lw用于加载,而lb/lbu用于加载字节。但这只会影响要加载的数据的大小。偏移量不会像在 C 中那样根据数据大小进行缩放。如果您使用 3 的偏移量,lw它将尝试从基址寄存器 + 3 字节给出的地址加载。

此外,由于 int 占用了 4 个地址引用的空间,处理器用来加载第一个字节的整数的地址是地址还是?

是的。并且字值在内存中的布局取决于 CPU 的字节序。小端系统上的值 0x12345678 将存储为:

-- address -->
78 56 34 12

在大端系统上,它将存储为:

-- address -->
12 34 56 78
于 2013-06-04T06:06:18.043 回答