2013-04-16 98 views
0

我最近讀了Patterson和Hennessy的書「計算機組織與設計」,以便研究一下彙編。 我遇到一個部分,其中lwsw機器指令進行了解釋,以及他們如何將16位立即作爲加載/存儲地址。作者在這裏指出的是: 「16位地址意味着一個加載字指令可以加載基址寄存器中地址的8192個字的區域內的任何字」rs「。MIPS彙編中的內存尋址

我的問題是:

  • 這是否意味着所有的寄存器的地址是從相互隔開8192個字?
  • 另外,這是否意味着整個可用內存的操作是32 * 8192 = 262144個字?
+0

你把在指令中使用的地址寄存器,添加直接偏移量(這個16位偏移量你正在談論),並且總和是用於該加載或存儲地址。只要總和與加載或存儲的大小對齊,寄存器中的值和偏移就可以是任何東西。 –

+0

但基本上可以保證不同寄存器的偏移不會相互衝突,對吧? 我不確定寄存器的加載值是保存在那個存儲器地址中的值還是地址本身...... – jrhetf4xb

+1

地址來自寄存器中的值加上偏移量的總和。該地址位於內存空間,內存和外設中,(通用)寄存器無法通過內存空間中的地址到達。指令中的幾位用於選擇哪個寄存器包含地址的一部分。 –

回答

2

這是否意味着所有寄存器的地址間隔8192字?

編號寄存器沒有地址。

此外,這是否意味着整個可用內存的操作是32 * 8192 = 262144字?

不。這些立即數是偏移量到用於加載/存儲的基址。它允許你指定基地址的-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 
+0

我現在明白了。我假設我加載了地址本身。 謝謝澄清。 – jrhetf4xb