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

Memory 真的对字节和单词感到困惑吗,memory,byte,word,mips,Memory,Byte,Word,Mips,我很难理解这个概念。我正在读我的《计算机体系结构》一书,书中给出了一个如何将下面的C代码写入MIPS代码的示例 g=h+A[8] 上面写着: 假设A是一个100字的数组,编译器像以前一样将变量g和h与寄存器$s1和$s2相关联。还假设数组的起始地址或基址在$s3中 我首先感到困惑的是,当它说A是一个由100个单词组成的数组时,它意味着什么。我从C++和java编程中知道,数组可以包含很多东西,包括整数、浮点数、对象、指针等。所以当它说“一个100个单词的数组”时,它指的是什么?如果有一个整数数组

我很难理解这个概念。我正在读我的《计算机体系结构》一书,书中给出了一个如何将下面的C代码写入MIPS代码的示例

g=h+A[8]

上面写着:

假设A是一个100字的数组,编译器像以前一样将变量g和h与寄存器$s1和$s2相关联。还假设数组的起始地址或基址在$s3中

我首先感到困惑的是,当它说A是一个由100个单词组成的数组时,它意味着什么。我从C++和java编程中知道,数组可以包含很多东西,包括整数、浮点数、对象、指针等。所以当它说“一个100个单词的数组”时,它指的是什么?如果有一个整数数组,数组中的每个整数是否表示一个字

继续上面的示例,它最初在MIPS中给出了如下答案:

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

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

“由于8位字节在许多程序中都很有用,因此大多数体系结构都针对单个 字节。 所以,, 地址 属于 一句话 比赛 地址 属于 什么之中的一个 四 字节 在内部 这个词。 因此,, 地址 属于 顺序词 不同于 4…字节寻址也会影响数组索引。要在 上面的代码是要添加到基址寄存器的偏移量 $s3必须为4 x 8或32, 以便加载地址将选择 A[8]而不是[8/4]。”

老实说,我甚至不知道这意味着什么,我知道这是很多,但有人能帮我理解这一点吗,因为我的大脑就是不明白这一点,即使我在查找100个资源时也是如此 一个字是32位的 一个字是4字节
这将解决大多数混淆

100个字的数组意味着一个占据100*32位数据的数组每个数据相隔32位

例如,要访问阵列u的第二个元素,请参考阵列的位置32

0-31——第一个单词
32-63——第二个词,等等,

< p>你的问题可能源于这一陈述:“我从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字节长。由于字节仍然是内存的基本单位,因此必须调整指针以说明这一事实

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个字节

…但这句话就是你如何得到第八个字的


你是说32位表示单词大小?是位=二进制数字:0或1字节=8位字=4字节=32位不要对同一个问题给出多个答案。如果你觉得这些信息属于你的答案,把它放在你最初发布的答案中。
lw $t0, 8($s3)
lw $t0, 32($s3) # 32 = 8*4