2014-02-17 168 views
3

當我編寫J格式指令的地址時,我很困惑。MIPS:J格式指令和地址編碼

從階級注:

假設L1是在小數地址4194340,它是十六進制400024。我們用指令(0x100009)而不是字節(0x400024)填充目標字段。

有人可以向我解釋爲什麼這是?

回答

3

j指令跳轉到傳遞的目標。

但是,因爲指令集被限制爲32位,並且6個用於操作碼,所以只有26個可用於跳轉目標。

這意味着指令可以移動的距離是有限的,因爲它的工作原理是將其目標附加到當前IPC的一些最重要的位上。

MIPS指令集可能已經被定義爲,當遇到j指令時,將IPC的前6位添加到j指令的26位目標中,但注意到程序指令可以跳躍總是「字對齊」。這意味着,這些地址始終是4的倍數,因此地址的最後2位始終爲0。

這讓我們不在我們跳轉目標編碼最後2位,而不是編碼的比特3-28。這意味着要獲取j指令的目標,您需要獲取PC的前4位,添加跳轉目標,然後添加兩個零。

希望通過該解釋不妨說明爲什麼目標0x400024j指令中由0x1000090x400024 >> 2編碼。因爲最後兩位不是必需的。

+0

您是否介紹了將0x400024更改爲0x100009所需的步驟?我沒有看到如何將0x400024除以4得到0x100009。 –

+0

我認爲它應該是0x100006。 –

+0

再想一想。 0x24 = 32 + 4 = 36。36/4 = 9. –