如何计算访问MIPS数据存储器中数据的正确地址?考虑到动态数据段从
0x10010000
开始一直到0x7FFFFFFC
,当使用sw $t0, 20($0)
指令时,将十进制偏移量20转换为十六进制我们将得到0x14,因此偏移量计算将由0x14 + read($0) = 0x14 + 0 = 0x14
完成.
该结果值应添加到动态数据段的起始地址 (
0x14 + 0x10010000
),以得出要读取的确切字节的地址。
我的问题是:这个计算是如何完成的?它是由操作系统直接完成的计算还是数据存储器内部是否有一个全加器来执行此加法(参见下图)。或者两者都不是?
考虑 MIPS 的多周期实现
加法
0x14
+ $0
- 0x14
是在 EX 阶段通过 ALU 使用加法完成的(尽管这里由于使用了加法恒等式 0 而不是操作)。 (数据)内存块中没有加法器。
该结果值应添加到动态数据段的起始地址(0x14 + 0x10010000),以得到要读取的确切字节的地址。
这必须通过程序的机器代码来完成,而该代码片段 (
sw $t0, 20($0)
) 没有。
可以通过
sw $t0, 20($gp)
来完成,如果$gp
要保存值0x10010000
,这是为MIPS程序初始化的相当正常的配置。