寄存器的 MIPS 位置

问题描述

我想我有一个相当基本的 MIPS 问题,但我仍然对在 mips 中寻址的工作方式感到困惑。

我的问题是:寄存器$t0的地址是什么?

我正在查看 MIP“绿表”中的以下内存分配图

enter image description here

我有两个想法:

  1. 寄存器 $t0 的寄存器编号为 8,所以我想知道它的地址是否为 0x0000 0008 并且位于内存块的保留部分。
  2. 或者它会落入静态数据部分并具有 0x1000 0008 的地址?

我知道 MARS 和不同的汇编程序可能以不同的方式启动寻址,如此相关问题中所述: How is the la instruction translated in MIPS?

我试图了解寄存器 $t0 的“基”地址是什么,以便我更好地了解偏移量(基)的工作原理。 例如 8($t0) 的地址是什么

感谢您的帮助!

解决方法

功能 注册 内存
计数 很少 广阔
速度 快速
命名 no
可寻址 no

通常有 32 个或更少的寄存器可供程序员使用。在 32 位机器上,我们可以寻址 2^32 个不同字节的内存。

寄存器速度快,而内存速度慢,根据缓存特性和条件,可能需要几十个周期。

load-store machine 上,寄存器可以直接在大多数指令中使用(通过在机器代码指令中命名它们),而内存访问需要单独的加载或存储指令。这种机器上的计算指令通常允许命名最多 3 个寄存器(例如目标、源 1、源 2)。内存操作数必须放入寄存器进行计算(有时会移回内存)。

寄存器可以在指令中命名,但它们没有地址,不能被索引。在 MIPS 上,无法在内存中的某个地址处找到作为别名的寄存器。即使是很小的数组(例如 10 个数组)也很难放在寄存器中,因为它们没有地址并且无法索引。内存具有数字地址,因此我们可以依靠以可预测的地址模式存储数组和对象。 (内存通常没有名称,只有地址;但是,通常有特殊的内存位置用于处理 I/O 各种设备,并且,正如您所注意到的,内存被划分为具有开始(和结束)地址的部分。)


需要明确的是,过去的一些处理器中已经设计了基于内存的别名。例如,HP/1000(大约 70 年代-80 年代)有 2 个寄存器(A 和 B),它们分别在内存位置 0 和 1 处具有别名。然而,这种 CPU 寄存器到内存的别名通常不再在现代处理器上完成。


例如 8($t0) 的地址是什么

8($t0) 指的是(寄存器$t0的内容)+8的内存地址。如果使用得当,程序片段将 $t0 将使用 $t0 作为指针,它是一些保存内存地址的变量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...