ARM架構的機器碼和彙編指令互相轉換

2022-08-19 14:12:08 字數 1165 閱讀 4043

因為專案的一些需求,需要檢視一些彙編指令對應的機器碼是什麼,也需要檢視一些機器碼對應的彙編指令是啥,經過網上查詢的一些資料,找到了乙個比較輕量、方便、快捷的方法。

首先第一步需要配置arm-linux-gcc交叉編譯環境;第二步將需要轉換的機器碼或者彙編指令寫到乙個.s檔案中;第三步使用as和objdump命令進行編譯和反彙編;最後你就得到了你要的結果。

1. 配置arm-linux-gcc環境

sudo apt-get install gcc-arm-linux-gnueabi   //安裝

arm-linux-gnueabi-gcc -v //檢查是否安裝成功

2. 寫乙個.s檔案,如下的test.s

可以使用正確的彙編指令,也可以使用偽指令的形式。

以下第一句是將0x100a700這個值放到pc中;第二句將立即數0放到暫存器r0中;第三句相當於ret。

如果是將機器碼轉換為彙編指令,檔案中的機器碼前要加.inst,並且如果是小端的機器碼的話,需要將其轉換為大端的形式,因為實驗表明gcc可能是大端的。

3. 使用as和objdump進行編譯和反彙編

as編譯生成目標檔案test.o,再將test.o反彙編輸出如下。

左右對照機器碼和彙編指令,注意這裡的機器碼是大端形式,彙編指令是正確的,not偽指令了。

第一句偽指令變成了兩句彙編指令,資料部分放在了最後,然後將該資料對應的位址賦給pc。

第二句彙編指令對應的機器碼就是e3a00000(大端),0000a0e3(小端)。

第四句的機器碼對應的彙編指令就是 ldr pc,[pc,#

online assembler and disassembler【多種架構】:

online x86 / x64 assembler and disassembler【僅x86/x64】:

online arm to hex converter【arm,部分指令,僅可單向轉換】:

機器碼轉彙編指令

在用logisim初步畫完cpu電路後,配合educoder除錯電路。提交 到educoder後,後台會檢測錯誤資訊,根據報錯資訊中的週期數或者pc值,可以找到錯誤的指令機器碼。但是機器碼太抽象,因此使用下面的程式將指令機器碼翻譯成指令名稱,進而繼續除錯電路。32位mips指令翻譯器 輸入一條16進...

機器碼和偽指令

m ov 立即數受限的原因 因為根據下圖,mov 的機器指令中立即數最多能有 12位,其中有四位代表移位,所以立即數最多能有8位。偽指令有兩種 操作類偽指令和定義類偽指令 定義類偽指令 global 定義乙個全域性的變數 data 定義資料段 ascii 定義乙個字串 byte 定義乙個位元組資料 ...

彙編中call指令和其對應的機器碼

call這個指令很神奇,他和別的指令不太一樣 對比下,當我們執行 mov eax,1 的時候,他的對應機器碼是 66 b8 01 00 00 00 這其中 66 b8 對應的是 mov eax,x 後面的 01 00 00 00 就是 1 在32位中的little endian了 所以說,在對mov...