MIPS偏移量加基址寄存器寻址。它是如何工作的?

MIPS偏移量加基址寄存器寻址。它是如何工作的?,mips,cpu-architecture,Mips,Cpu Architecture,我对我的计算机组织手册中的一些文字感到困惑: 让我们假设A是一个100字的数组,并且编译器像以前一样将变量g和h与寄存器$s1和$s2相关联。我们还假设数组的起始地址或基址是$s3。编译此C赋值语句: g=h+A[8] 虽然此赋值语句中只有一个操作,但其中一个操作数在内存中,因此必须首先将[8]传输到寄存器。该数组元素的地址是在寄存器$s3中找到的数组A的基址加上选择元素8的数字之和。数据应放在临时寄存器中,以便在下一条指令中使用。根据图2.2,第一条编译指令是 数组A的基是什么 计算机分为使用

我对我的计算机组织手册中的一些文字感到困惑:

让我们假设A是一个100字的数组,并且编译器像以前一样将变量g和h与寄存器$s1和$s2相关联。我们还假设数组的起始地址或基址是$s3。编译此C赋值语句:

g=h+A[8]

虽然此赋值语句中只有一个操作,但其中一个操作数在内存中,因此必须首先将[8]传输到寄存器。该数组元素的地址是在寄存器$s3中找到的数组A的基址加上选择元素8的数字之和。数据应放在临时寄存器中,以便在下一条指令中使用。根据图2.2,第一条编译指令是

数组A的基是什么

计算机分为使用最左边或“大端”字节的地址作为字地址的计算机和使用最右边或“小端”字节的计算机。MIPS在big endian阵营。由于顺序只在以字和四个字节的形式访问相同的数据时才起作用,因此很少有人需要知道尾数。(附录A显示了对单词中的字节进行编号的两个选项。)

字节寻址也会影响数组索引。要在上述代码中获得正确的字节地址,要添加到基址寄存器$s3的偏移量必须为4*8或32,以便加载地址将选择[8],而不是[8/4]。(参见第2.19节第160页的相关陷阱。)

为什么是4*8?所以如果偏移量是32。。。这是否意味着$s3的值是-24?有人能澄清这段文字吗

什么是大端字节?最左边的是什么

为什么是4*8

因为“A是一个由100个字组成的数组,一个字的大小是4个字节。因此索引8处的单词将位于偏移量
8*sizeof(word)
==
8*4

这是否意味着$s3的值是-24

不,它没有说明关于
$s3
中的值的任何内容

最左边的是什么

在big-endian内存布局中,该单词将存储为:

Address: N     N+1   N+2   N+3    
-------------------------------
Value:   0x12  0x34  0x56  0x78
Address: N     N+1   N+2   N+3 
-------------------------------   
Value:   0x78  0x56  0x34  0x12
在一个小小的endian内存布局中,它将存储为:

Address: N     N+1   N+2   N+3    
-------------------------------
Value:   0x12  0x34  0x56  0x78
Address: N     N+1   N+2   N+3 
-------------------------------   
Value:   0x78  0x56  0x34  0x12