2016-09-15 170 views
1

我在想如何計算跳轉指令的機器編碼。MIPS計算跳轉指令的機器編碼

比方說,我有
Ĵ富
地址爲0x00400000
現在,如果有什麼foo是在您的地址0x0040002c。那麼我將如何找到跳轉指令的機器編碼?

[0x00400000:J富
...
[0x0040002c]富:
在YouTube上發現一些指導說這會是這樣的

((400000 + 4) - 40002c)/ 4
但是跳轉有op-code 2,我不知道這個計算。

謝謝

回答

1

J有操作碼2,編碼爲:

--------------------------- 
| opcode |  target  | 
--------------------------- 
6 bits  26 bits 

因此,指令字應爲(2 << 26) | target
現在,JJAL不是PC相對的,而是PC區域相對的。也就是說,target是距離的單詞到當前正在執行的256MB區域開頭的目標地址。0x00400000所在的256MB區域從0x00000000開始。所以target將被編碼爲(0x0040002c - 0x00000000) >> 2 == 0x0010000B。那給你的指令字(2 << 26) | 0x0010000B == 0x0810000B

+0

謝謝你的回覆@Michael。我讀了一些關於左移2位的地方,所以這是有道理的。但是,我們是否真的允許在我們選擇的時候添加Opcode?如果你明白我的意思,這似乎有點太好了,無法成立。 – Name55555555

+0

嗯,我不確定你的意思是_「只是[添加]我們選擇的操作碼」_。 J的操作碼是2,需要放在指令字的31:26位。這非常具體。 – Michael