2010-03-05 118 views
1

我在MIPS中遇到內存尋址問題。它說,尋址是字對齊的......在下面的文本中,我不明白爲什麼它查看地址的2個最低有效位?爲什麼?有人能給我一個例子來澄清/說明這裏提出的觀點......所以它是說一個有效的半字地址都是2個最低有效位都是00或10?瞭解內存地址

那麼如果我想從一個內存中加載一個字來對齊字?我怎樣才能做到這一點?這是說,我需要轉移2左,也就是使至少2個顯著位0 ...然後提取位...

alt text http://img69.imageshack.us/img69/1603/jpgdw.jpg

+0

那麼如果我想從單詞對齊的內存中加載一個字節......我該怎麼做?我的想法是首先提取包含我想要的字節的單詞,然後從單詞中提取字節...但是,如何在MIPS中執行加載字節(lb)時如何獲取單詞的地址... – aherlambang 2010-03-05 05:13:12

回答

1

'字對齊'表示CPU將始終讀取4個字節。然而,如果操作實際上是一個2字節的短操作,那麼地址結束0b00或0b10(因此地址是偶數)是合理的,並且CPU在加載時會將正確的2個字節戳到寄存器中寫入一個寄存器或寫入正確的信息。

同樣,當讀取一個字符時,兩個最低有效位可以取任何值,並將正確的字節載入相關寄存器或將寄存器的相關部分(通常是LSB)寫入正確的部分記憶。

但是,如果您嘗試讀取地址不是0b00的(4字節)int,則會得到一個SEGV或其附近。

0

半字對齊的地址,在結束二進制0(可以被小數點2整除,半字節中的字節數)。一個字對齊的地址以二進制00結尾(可以被十進制數4,一個字的字節數)整除。

是的,措辭和圖表是有點鈍。

0

我記得在使用MIPS時遇到這個問題。我的建議是首先加載整個單詞,然後查看兩個最低有效位,並使用它們來確定32個實際需要加載的8個位。

問題,你究竟想要做什麼?你在寫MIPS彙編代碼嗎?或者你是否試圖在硬件中實現MIPS處理器?

如果你只是寫MIPS的彙編代碼,這是我的理解,你可以使用任何內存地址磅,它會妥善處理它。唯一需要擔心正確對齊的時候是使用lw指令。

0

如果你想讀取一個字節,你可以從內存中的每個位置讀取。沒什麼好擔心的。單詞對齊只在您想要一次讀取多個字節時才起作用。

如果要讀取跨越字邊界的4字節值,可以使用4個單字節讀取操作(移位和ORing)來完成。它比簡單的讀取要慢得多。