我目前正在嘗試學習組裝,如果這真的很初級,請道歉。
我已經使用 交叉編譯了一個 C 程式arm-linux-gnueabi-gcc -march=armv8-a,然后使用arm-none-eabi-objdump -d. 在反匯編的指令中,我看到了許多對該BXEQ指令的參考,例如:
1032c: e08f3003 add r3, pc, r3
10330: e7932002 ldr r2, [r3, r2]
10334: e3520000 cmp r2, #0
10338: 012fff1e bxeq lr
BXEQ但是,我在任何 ARM 檔案中都沒有看到。我所能找到的只是它在一些代碼示例中的用途,但沒有任何解釋甚至沒有提及它:https ://developer.arm.com/documentation/100748/0607/hpz1474359444075
請注意,我不是在問什么BXEQ- 我是在問為什么它不像其他 ARM 指令那樣不在檔案中。
uj5u.com熱心網友回復:
好吧,首先,您鏈接到的檔案是編譯器指南,與底層的匯編程式指令沒有任何關系。
您正在尋找的是指令的指令集檔案BX,它可以使用條件標志來決定是否執行其作業。
也許可以在以下部分的此 PDF 鏈接中找到更好的(盡管不一定是官方的)檔案4.3:
BX - branch and exchange.
BX{cond} Rn
{cond} Two character condition mnemonic.
See Table 4-2: Condition code summary on page 4-5.
Rn is an expression evaluating to a valid register number.
這實際上是 ARM 做事方式的基礎,如下所示:
大多數 A32 指令僅在先前的指令設定了特定條件代碼時才執行。這意味著只有當 N、Z、C 和 V 標志滿足指令中指定的條件時,指令才會對程式員的模型操作、記憶體和協處理器產生正常影響。
如果標志不滿足此條件,則該指令充當 NOP。這意味著執行正常前進到下一條指令,包括任何相關的例外檢查,但沒有其他效果。
這種指令的條件執行允許在不使用分支指令的情況下對一小部分 if 和 while 陳述句進行編碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415417.html
標籤:
上一篇:arm-thumb指令集的blx指令如何支持4MB范圍
下一篇:將匯編指令轉換為gdb中的位元組
