簡體   English   中英

MIPS 32磅指令,帶偏移

[英]MIPS 32 lb instruction with offset

我不了解先前作業問題的解決方案。 問題:執行以下指令后,顯示$R3的內容。

lb $R3, 13($R2)

初始值:

$R2 = 12(decimal)
$R3 = 14(decimal)

初始內存地址(十進制)-內容(十進制):

36 -- -18
32 -- 99
28 -- 177
24 -- -14

解:

$R3 = OxFFFFFFFF

我不明白他是怎么得出這個答案的。 任何幫助表示贊賞!

如果您使用Google mips指令集,則會看到lb是加載字節。

lb $t, offset($s)

手段

$t = MEM[$s + offset]; advance_pc (4);

假設MEM在這里是32位寬,但這在核心邊緣,我們不關心它的實現方式。

您首先使用的定義是十進制,這可能是故意造成學習上的痛苦。 然后所有都可以容納一個字節大小的值,這可能意味着字節地址。

r2是12,然后我們加13得到未定義的十進制地址25。 如果我們贊同您在評論中提到的概念,那就是字大小的定義。 然后24 = -14表示在地址0x18(BTW是有效的8位,16位,32位和64位對齊地址)處,地址0x18的值為0xFFFFFFF2,在0x19之后。 因此,取決於字節序,在任何情況下都是0xFF都可以是0xooFFoooo字節或0xooooFFoo字節。

然后,您需要知道lb符號擴展。 0xFF的msbit為1,因此其余位將為1,我們加載0xooooooFF,然后將其符號擴展為0xFFFFFFFF。 然后將其保存在r3中。 (並將程序計數器增加到下一條指令)。

從另一角度來看,由於您給了我們0xFFFFFFFF的答案,所以這不是字節值,因此lb必須為符號擴展,讀取的值必須為0xFF。 如果沒有符號擴展,我們將期望0x000000XX,其中XX是我們要查找的字節。 從字節大小的二進制補碼角度來看,或者xx是正數,那么顯然不會出現符號擴展。

r3的初始值無關緊要,只是在那里可能會使您絆倒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM