真的对字节和单词感到困惑



我很难理解这个概念。我正在阅读我的计算机架构书,它给出了如何将以下C代码写入MIPS代码

的示例

g = h a [8]

说:

"让我们假设a是100个单词的数组,并且编译器与以前一样将变量G和H与寄存器$ s1和$ s2相关联。我们还假设起始地址或基础地址,数组的$ s3"

我感到困惑的第一件事是说a是100个单词的数组时的含义。我从C 和Java的编程中知道,数组可以容纳许多东西,包括整数,浮点数,对象,指针等。因此,当它说" 100个单词的数组"时,它到底是什么意思?如果有一个整数数组,数组中的每个整数是否代表一个单词?

从上面的示例继续,它最初在MIPS中给出答案为

lw $ t0,8($ s3),并说" 此数组元素的地址是基础的总和数组A,在寄存器$ s3中找到,加上选择元素8的数字。" ->然后继续在下一页上解释(在解释字节 - 地址之后),答案实际上是

lw $ t0,32($ s3)。这是我再次感到困惑的部分,因为我不了解字节地址。它说:

"由于8位字节在许多程序中都有用,因此大多数架构都解决了个体字节。所以,地址的一个字火柴地址的之一4字节之内这个单词。因此,地址的顺序单词不同4 ....字节上的地址也会影响阵列索引。在上面的代码,要添加到基本寄存器的偏移量$ S3必须是4 x 8或32这样负载地址将选择a [8]而不是[8/4]。"

,说实话,我不知道这甚至意味着什么,我知道很多,但是有人可以帮助我理解这一点100资源

您的问题可能源于此陈述:"我从C 和Java中的编程中知道..."级别的语言。即使是"数组"的概念也具有完全不同的含义。

您认为数组是一系列明确,强烈的元素的序列,情况不再如此。当您处于位级别时,没有" type" (只有Zuul)。当有人在MIPS上下文中说" X数组"时,它只是一堆包含1和0的内存位置。所有现代处理器地址的最小内存单元是一个8位字节,而MIPS(或任何32位处理器)地址的"本地"较大的内存单位是4字节(32位)字。<<<<<<<<<<<<

因此,如果有人说" a是100个字节的阵列",则意味着:标签" a"指向一块内存的地址 100个字节长,我们已经保留了。用于我们的使用,并将作为字节引用。如果您查看该内存,您会看到:

A+0:  00000000
A+1:  00000000
A+2:  00000000
...
A+99: 00000000

现在,有人来说:" a是100 单词的数组"。现在,它们的意思是标签" a"指向了100个单词的大部分记忆的地址。由于每个单词是4个字节,因此内存的一部分需要为400 bytes 长。而且由于字节仍然是内存的基本单位,因此您必须调整指针以说明这一事实。

A+0*4:  00000000 00000000 00000000 00000000
A+1*4:  00000000 00000000 00000000 00000000
A+2*4:  00000000 00000000 00000000 00000000
...
A+99*4: 00000000 00000000 00000000 00000000

这样解释了为什么此语句获得第8个字节 ...

lw $t0, 8($s3)

...但是这个说法是您如何获得第8个 word

lw $t0, 32($s3) # 32 = 8*4

100个单词的数组意味着一个占据100*32位数据的数组每个数据都放置32位

例如,访问阵列的第二个元素,请参阅数组的第32位位置

0-31--1st Word32-63--2nd Word等等

a字节为8位一个字是32位一个单词是4byte这将解决大部分的混乱

最新更新