MIPS汇编中的内存寻址

时间:2013-04-16 12:19:12

标签: memory assembly mips

我最近正在阅读Patterson和Hennessy的书“计算机组织与设计”,以便学习一些装配。 我遇到了一个部分,其中解释了 lw sw 机器指令以及它们如何将16位立即数作为加载/存储地址。作者在此指出的是: “16位地址表示加载字指令可以加载基址寄存器 rs ”中地址的8192个字的区域内的任何字。

我的问题是:

  • 这是否意味着所有寄存器的地址彼此间隔8192个字?
  • 另外,是否意味着整个可用内存为32 * 8192 = 262144字?

1 个答案:

答案 0 :(得分:3)

  

这是否意味着所有寄存器的地址彼此间隔8192个字?

没有。寄存器没有地址。

  

另外,是否意味着整个可用内存为32 * 8192 = 262144字?

没有。这些immediates 偏移到用于加载/存储的基地址。它允许您从基地址指定-32768 .. + 32767字节内的地址。 32768 / sizeof(word)== 8192。如果要超出该范围,可以简单地更改基址寄存器的值。
寄存器的数量与您可以寻址的内存量无关。

例如:

li $a0,0       # set $a0 to 0
lw $t0,0($a0)  # load a word from address 0
lw $t0,8($a0)  # load a word from address 8

lui $a0,0xffff # set the upper half-word of $a0 to 0xffff
lw $t0,4($a0)  # load a word from address 0xffff0004