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