2013-02-20 38 views
-6

我有手臂組件問題。 以下armv7彙編代碼的十六進制二進制輸出是什麼?部分手臂內嵌組件

LDR r3, #0xaabbccdd 
BLX r3 

我需要這個代碼片段 的彙編輸出,但我可憐的電腦環境

預先感謝您

+0

這不會編譯。在單條指令中不能有'LDR r3,#0xaabbccdd',因爲arm指令可以是16位或32位,它不允許同時加載32位值。 – auselen 2013-02-20 07:53:46

+0

請以「我有這個問題並且想知道如何最好地解決它」的形式陳述問題。或者「爲什麼這種方法不起作用?」。你目前的問題是介於兩者之間的地方,對於我給出的任何答案實際上對你有任何實際用處都沒有多大信心。 – unixsmurf 2013-02-20 08:29:37

+0

@unixsmurf我以爲他只是想得到這兩條指令的二進制編碼,而我投票結束。 – auselen 2013-02-20 10:12:26

回答

2

正如評論者LDR r3,#0xaabbccdd提到的是不是一個有效指令。 ARM操作碼中的中立代碼格式爲ZeroExtend(imm8) ROR (imm4*2),這將允許您代表例如0xaa000000,0x00bb0000甚至0xd000000d - 但不是例如0xaabb00000xaabbccdd

彙編器通常提供用於加載32位立即數的僞指令,例如,在GAS你可以這樣做:

ldr r3,=0xaabbccdd 

這將是編碼爲PC相關的負載 - 即ldr r3,[pc,#offset]。偏移量(以及確切的指令編碼)取決於從指令到存儲值的位置的距離。

+0

非常感謝您的幫助。我知道單個ARM指令不能將32位imm值加載到寄存器中。我想知道彙編程序如何處理這個僞指令。 – daehee 2013-02-20 16:47:41