【发布时间】:2013-04-08 20:23:18
【问题描述】:
我最近在阅读 Patterson 和 Hennessy 的《计算机组织与设计》一书,以学习一点汇编。 我遇到了一个部分,其中解释了 lw 和 sw 机器指令以及它们如何将 16 位立即数作为加载/存储地址。作者在这里指出的是: “16 位地址意味着加载字指令可以加载基址寄存器 rs 中地址的 [...] 8192 个字区域内的任何字”。
我的问题是:
- 这是否意味着所有寄存器的地址都相隔 8192 个字?
- 另外,这是否意味着整个可用内存为 32 * 8192 = 262144 个字?
【问题讨论】:
-
你取指令中使用的地址寄存器,加上立即偏移量(你所说的这个 16 位偏移量),这个总和就是用于加载或存储的地址。只要总和与加载或存储的大小对齐,寄存器中的值和偏移量几乎可以是任何值。
-
但基本上可以保证不同寄存器的偏移量不会发生冲突,对吧?我不确定从寄存器加载的值是该内存地址中保存的值还是地址本身......
-
地址来自寄存器中的值加上偏移量的总和。该地址位于内存空间、内存和外围设备中,无法通过内存空间中的地址访问(通用)寄存器。指令中的几位用于选择哪个寄存器包含地址的一部分。