3
當我編寫J格式指令的地址時,我很困惑。MIPS:J格式指令和地址編碼
從階級注:
假設L1是在小數地址4194340,它是十六進制400024。我們用指令(0x100009)而不是字節(0x400024)填充目標字段。
有人可以向我解釋爲什麼這是?
當我編寫J格式指令的地址時,我很困惑。MIPS:J格式指令和地址編碼
從階級注:
假設L1是在小數地址4194340,它是十六進制400024。我們用指令(0x100009)而不是字節(0x400024)填充目標字段。
有人可以向我解釋爲什麼這是?
j
指令跳轉到傳遞的目標。
但是,因爲指令集被限制爲32位,並且6個用於操作碼,所以只有26個可用於跳轉目標。
這意味着指令可以移動的距離是有限的,因爲它的工作原理是將其目標附加到當前IPC的一些最重要的位上。
MIPS指令集可能已經被定義爲,當遇到j
指令時,將IPC的前6位添加到j
指令的26位目標中,但注意到程序指令可以跳躍總是「字對齊」。這意味着,這些地址始終是4的倍數,因此地址的最後2位始終爲0。
這讓我們不在我們跳轉目標編碼最後2位,而不是編碼的比特3-28。這意味着要獲取j
指令的目標,您需要獲取PC的前4位,添加跳轉目標,然後添加兩個零。
希望通過該解釋不妨說明爲什麼目標0x400024
在j
指令中由0x100009
即0x400024 >> 2
編碼。因爲最後兩位不是必需的。
您是否介紹了將0x400024更改爲0x100009所需的步驟?我沒有看到如何將0x400024除以4得到0x100009。 –
我認爲它應該是0x100006。 –
再想一想。 0x24 = 32 + 4 = 36。36/4 = 9. –