2016-02-18 49 views
1

我想要更好地理解程序集,並且我不確定i(立即)如何發揮BNE的作用。請原諒noobness。BNE - I型指令 - '我'在哪裏發揮作用?

如果BNE這樣寫的:

BNE $1, $2, loop 

這意味着「轉到循環,如果$1不等於$2」那麼我假定循環是即時的一部分。正確?

這只是一個程序計數器或循環的位置?所以,如果循環被設置爲一些指令的數量(我們只是稱之爲0x0001),這個循環地址(或指令計數)是否設置在這個i

也許會更好,如果我寫出來像這樣...

opcode = 5 | reg1 = whatever addr | reg2 = whatever addr | immediate = 0x0001 

該設置是否正確,還是我真的很迷茫?

+2

引用編程器MIPS32TM架構第II卷:MIPS32TM指令集BNE:將18位有符號偏移量(16位偏移量位移左2位)添加到分支後指令的地址(而不是分支本身)在分支延遲時隙中形成PC相對有效目標地址。如果GPR rs和GPR rt的內容不相等,則執行延遲時隙中的指令後,轉移到有效目標地址。# – EOF

回答

1

彙編程序接受地址循環(這實際上是某個地址的某個地址的名稱),它爲您計算偏移量並將該偏移量編碼到指令中。否則,你必須說1美元,2美元,28美元,手計算的數字,然後每次你在這兩點之間修改你的代碼時,你將不得不重新調整每一個這些偏移量。

實際上,一些彙編器或連接器可能會爲您添加一個蹦牀。比如說你有一些指令集,相對跳轉只有128條指令,並且你使用了一個未在該對象中定義的標籤。彙編程序可能會將128條指令中的無條件分支放置到您想要去的地方。有些可能不會,並且最終出現錯誤,它無法在您要求的指令中對偏移量進行編碼。

我要去的地方是你用標籤(地址)編程,讓彙編程序爲你做一些工作。在這種情況下,它將您所需的標籤轉換爲距當前指令的距離並對其進行編碼。

+0

並且在註釋中指出EOF。這是有記錄的,你需要先看看指令集文檔,然後再問這樣的問題。然後,如果仍然困惑,然後問「文檔說這個,但我不明白的東西」... –

+0

我查看了文檔,但它變得非常乾燥,有點混亂。感謝您花時間回答。 =) – Apolymoxic

+0

重新閱讀我的答案我認爲我可以寫得更好,但是如果你明白這一點就很重要...... –