0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

自己歸納整理的ARM THUMB指令機(jī)器碼表

聚豐開(kāi)發(fā) ? 2018-10-26 13:35 ? 次閱讀

注:本文是作者以前發(fā)表在其個(gè)人博客,現(xiàn)在發(fā)布到“聚豐開(kāi)發(fā)”專欄



有個(gè)項(xiàng)目需要分析ARM THUMB指令的機(jī)器碼,網(wǎng)上沒(méi)有搜索到整理好的機(jī)器碼表,只好自己把相關(guān)指令的機(jī)器碼歸納整理出來(lái),這里分享給大家。THUMB指令并不多,只有六十多條,這個(gè)數(shù)字真的是非常了不起,51都一百三十多條呢。

可能這張表對(duì)于大多數(shù)朋友都用不到,畢竟要深入到機(jī)器碼這一層的機(jī)會(huì)還是比較少,我想能到這一步的朋友一定對(duì)ARM指令有了足夠的理解,所以就不對(duì)注釋做另外的說(shuō)明,相信你一看就懂。




呵呵,如果你用上了這張表,記得在內(nèi)心感謝我一下,這可是我從《Addison Wesley - ARM Architecture Reference Manual (2nd Edition)》中一條一條摘錄出來(lái)的。


v is immed_value
n is Rn
m is Rm
s is Rs
r is register_list
c is condition


按指令字母升序排列

0100 0001 01mm mddd -- ADC Rd,Rm
0001 110v vvnn nddd -- ADD Rd,Rn,#immed_3
0011 0ddd vvvv vvvv -- ADD Rd,#immed_8
0001 100m mmnn nddd -- ADD Rd,Rn,Rm
0100 0100 hhmm mddd -- ADD Rd,Rm h1h2,h1 is msb for Rd,h2 is msb for Rm
1010 0ddd vvvv vvvv -- ADD Rd,PC,#immed_8*4
1010 1ddd vvvv vvvv -- ADD Rd,SP,#immed_8*4
1011 0000 0vvv vvvv -- ADD SP,#immed_7*4
0100 0000 00mm mddd -- AND Rd,Rm
0001 0vvv vvmm mddd -- ASR Rd,Rm,#immed_5
0100 0001 00ss sddd -- ASR Rd,Rs
1101 cccc vvvv vvvv -- Bcc signed_immed_8
1110 0vvv vvvv vvvv -- B signed_immed_11
0100 0011 10mm mddd -- BIC Rd,Rm
1011 1110 vvvv vvvv -- BKPT immed_8
111h hvvv vvvv vvvv -- BL(X) immed_11
0100 0111 1hmm mSBZ -- BLX Rm
0100 0111 0Hmm mSBZ -- BX Rm
0100 0010 11mm mnnn -- CMN Rn,Rm
0010 1nnn vvvv vvvv -- CMP Rn,#immed_8
0100 0010 10mm mnnn -- CMP Rn,Rm
0100 0101 hhmm mnnn -- CMP Rn,Rm
0100 0000 01mm mddd -- EOR Rd,Rm
1100 1nnn rrrr rrrr -- LDMIA Rn!,reg_list
0110 1vvv vvnn nddd -- LDR Rd,[Rn+#immed_5*4]
0101 100m mmnn nddd -- LDR Rd,[Rn,Rm]
0100 1ddd vvvv vvvv -- LDR Rd,[PC+#immed_5*4]
1001 1ddd vvvv vvvv -- LDR Rd,[SP,#immed_8*4]
0111 1vvv vvnn nmmm -- LDRB Rd,[Rn,#immed_5*4]
0101 110m mmnn nddd -- LDRV Rd,[Rn,Rm]
1000 1vvv vvnn nddd -- LDRH Rd,[Rn,#immed_5*2]
0101 101m mmnn nddd -- LDRH Rd,[Rn,Rm]
0101 011m mmnn nddd -- LDRSB Rd,[Rn,Rm]
0101 111m mmnn nddd -- LDRSH Rd,[Rn,Rm]
0000 0vvv vvmm mnnn -- LSL Rd,Rm,#immed_5
0100 0000 10ss sddd -- LSL Rd,Rs
0000 1vvv vvmm mddd -- LSR Rd,Rm,#immed_5
0100 0000 11ss sddd -- LSR Rd,Rs
0010 0ddd vvvv vvvv -- MOV Rd,#immed_8
0001 1100 00nn nddd -- MOV Rd,Rn
0100 0110 hhmm mddd -- MOV Rd,Rm
0100 0011 01mm mddd -- MUL Rd,Rm
0100 0011 11mm mddd -- MVN Rd,Rm
0100 0010 01mm mddd -- NEG Rd,Rm
0100 0011 00mm mddd -- ORR Rd,Rm
1011 110R rrrr rrrr -- POP reg_list
1011 010R rrrr rrrr -- PUSH reg_list
0100 0001 11ss sddd -- ROR Rd,Rs
0100 0001 10mm mddd -- SBC Rd,Rm
1100 0nnn rrrr rrrr -- STMIA Rn!,reg_list
0110 0vvv vvnn nddd -- STR Rd,[Rn,#immed_5*4]
0101 000m mmnn nddd -- STR Rd,[Rn,Rm]
1001 0ddd vvvv vvvv -- STR Rd,[SP,#immed_8*4]
0111 0vvv vvnn nddd -- STRB Rd,[Rn,#immed_5]
0101 010m mmnn nddd -- STRB Rd,[Rn,Rm]
1000 0vvv vvnn nddd -- STRH Rd,[Rn,#immed_5*2]
0101 001m mmnn nddd -- STRH Rd,[Rn,Rm]
0001 111v vvnn nddd -- SUB Rd,Rn,#immed_3
0011 1ddd vvvv vvvv -- SUB Rd,#immed_8
0001 101m mmnn nddd -- SUB Rd,Rn,Rm
1011 0000 1vvv vvvv -- SUB Sp,#immed_7*4
1101 1111 vvvv vvvv -- SWI immed_8
0100 0010 00mm mnnn -- TST Rn,Rm



0000 0vvv vvmm mnnn -- LSL Rd,Rm,#immed_5

0000 1vvv vvmm mddd -- LSR Rd,Rm,#immed_5
0001 0vvv vvmm mddd -- ASR Rd,Rm,#immed_5
0001 100m mmnn nddd -- ADD Rd,Rn,Rm
0001 101m mmnn nddd -- SUB Rd,Rn,Rm
0001 110v vvnn nddd -- ADD Rd,Rn,#immed_3
0001 111v vvnn nddd -- SUB Rd,Rn,#immed_3
0001 1100 00nn nddd -- MOV Rd,Rn
0010 0ddd vvvv vvvv -- MOV Rd,#immed_8
0010 1nnn vvvv vvvv -- CMP Rn,#immed_8
0011 0ddd vvvv vvvv -- ADD Rd,#immed_8
0011 1ddd vvvv vvvv -- SUB Rd,#immed_8
0100 0000 00mm mddd -- AND Rd,Rm
0100 0000 01mm mddd -- EOR Rd,Rm
0100 0000 10ss sddd -- LSL Rd,Rs
0100 0000 11ss sddd -- LSR Rd,Rs
0100 0001 00ss sddd -- ASR Rd,Rs
0100 0001 01mm mddd -- ADC Rd,Rm
0100 0001 10mm mddd -- SBC Rd,Rm
0100 0001 11ss sddd -- ROR Rd,Rs
0100 0010 00mm mnnn -- TST Rn,Rm
0100 0010 01mm mddd -- NEG Rd,Rm
0100 0011 00mm mddd -- ORR Rd,Rm
0100 0010 10mm mnnn -- CMP Rn,Rm
0100 0010 11mm mnnn -- CMN Rn,Rm
0100 0011 01mm mddd -- MUL Rd,Rm
0100 0011 10mm mddd -- BIC Rd,Rm
0100 0011 11mm mddd -- MVN Rd,Rm
0100 0100 hhmm mddd -- ADD Rd,Rm h1h2,h1 is msb for Rd,h2 is msb for Rm
0100 0101 hhmm mnnn -- CMP Rn,Rm
0100 0110 hhmm mddd -- MOV Rd,Rm
0100 0111 0Hmm mSBZ -- BX Rm
0100 0111 1hmm mSBZ -- BLX Rm
0100 1ddd vvvv vvvv -- LDR Rd,[PC+#immed_5*4]
0101 000m mmnn nddd -- STR Rd,[Rn,Rm]
0101 001m mmnn nddd -- STRH Rd,[Rn,Rm]
0101 010m mmnn nddd -- STRB Rd,[Rn,Rm]
0101 011m mmnn nddd -- LDRSB Rd,[Rn,Rm]
0101 100m mmnn nddd -- LDR Rd,[Rn,Rm]
0101 101m mmnn nddd -- LDRH Rd,[Rn,Rm]
0101 110m mmnn nddd -- LDRV Rd,[Rn,Rm]
0101 111m mmnn nddd -- LDRSH Rd,[Rn,Rm]
0110 0vvv vvnn nddd -- STR Rd,[Rn,#immed_5*4]
0110 1vvv vvnn nddd -- LDR Rd,[Rn+#immed_5*4]
0111 1vvv vvnn nmmm -- LDRB Rd,[Rn,#immed_5*4]
0111 0vvv vvnn nddd -- STRB Rd,[Rn,#immed_5]
1000 0vvv vvnn nddd -- STRH Rd,[Rn,#immed_5*2]
1000 1vvv vvnn nddd -- LDRH Rd,[Rn,#immed_5*2]
1001 0ddd vvvv vvvv -- STR Rd,[SP,#immed_8*4]
1001 1ddd vvvv vvvv -- LDR Rd,[SP,#immed_8*4]
1010 0ddd vvvv vvvv -- ADD Rd,PC,#immed_8*4
1010 1ddd vvvv vvvv -- ADD Rd,SP,#immed_8*4
1011 0000 0vvv vvvv -- ADD SP,#immed_7*4
1011 0000 1vvv vvvv -- SUB Sp,#immed_7*4
1011 010R rrrr rrrr -- PUSH reg_list
1011 110R rrrr rrrr -- POP reg_list
1011 1110 vvvv vvvv -- BKPT immed_8
1100 0nnn rrrr rrrr -- STMIA Rn!,reg_list
1100 1nnn rrrr rrrr -- LDMIA Rn!,reg_list
1101 cccc vvvv vvvv -- Bcc signed_immed_8
1101 1111 vvvv vvvv -- SWI immed_8
1110 0vvv vvvv vvvv -- B signed_immed_11
111h hvvv vvvv vvvv -- BL(X) immed_11

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9014

    瀏覽量

    366197
  • 指令集
    +關(guān)注

    關(guān)注

    0

    文章

    221

    瀏覽量

    23331
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    功率計(jì)怎么連接碼表

    功率計(jì)連接碼表的過(guò)程可以根據(jù)不同的品牌和型號(hào)有所差異,但大致步驟是相似的。以下是一個(gè)通用的連接流程,以供參考:
    的頭像 發(fā)表于 10-03 16:09 ?443次閱讀

    RISC-V和arm指令集的對(duì)比分析

    核面積更小,相應(yīng)的功耗更低。RISC-V還允許用戶根據(jù)需要擴(kuò)展指令集,以滿足特定應(yīng)用的需求。 ARMARM指令集設(shè)計(jì)更加復(fù)雜和靈活,包含了多種
    發(fā)表于 09-28 11:05

    ARM處理器的指令集包括哪些

    ARM處理器的指令集是一個(gè)龐大而復(fù)雜的系統(tǒng),它涵蓋了多種類型的指令,用于實(shí)現(xiàn)數(shù)據(jù)處理、程序控制、內(nèi)存訪問(wèn)等多種功能。
    的頭像 發(fā)表于 09-10 11:15 ?333次閱讀

    hex文件如何查看原c語(yǔ)言代碼

    是處理器可以直接執(zhí)行的指令,而 C 語(yǔ)言代碼則是人類可讀的高級(jí)編程語(yǔ)言代碼。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對(duì)程序進(jìn)行分析,你可以考慮以下幾種方法: 反匯編(Disassembly) : 使用反匯編工具可以將 .hex 文件中的機(jī)器碼轉(zhuǎn)換回匯
    的頭像 發(fā)表于 09-02 10:37 ?880次閱讀

    RISCV的主流指令集有哪些?

    如題,就像X86中指令集有MMX,SSE,SSE2等,就像ARM指令集有ARMThumb等,但是總是感覺(jué)RISCV特別亂,可能是廠商比較多
    發(fā)表于 08-29 13:49

    abb機(jī)器人編程指令詳解中的call什么意思

    ABB機(jī)器人編程指令詳解中的“call”是一個(gè)非常重要的指令,它允許程序員在程序中調(diào)用另一個(gè)程序或子程序。 概述 在ABB機(jī)器人編程中,程序是由一系列的
    的頭像 發(fā)表于 06-17 09:47 ?862次閱讀

    abb機(jī)器人常用指令大全

    ABB機(jī)器人是一種廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域的智能設(shè)備,其指令系統(tǒng)豐富多樣,能夠滿足各種復(fù)雜場(chǎng)景的需求。 基本指令 1.1 Move指令 Move指令
    的頭像 發(fā)表于 06-17 09:35 ?5291次閱讀

    ABB工業(yè)機(jī)器人運(yùn)動(dòng)指令有哪幾個(gè)

    ABB工業(yè)機(jī)器人是一種廣泛應(yīng)用于制造業(yè)、物流、醫(yī)療等領(lǐng)域的自動(dòng)化設(shè)備。其運(yùn)動(dòng)指令是實(shí)現(xiàn)機(jī)器人精確控制的關(guān)鍵。以下是對(duì)ABB工業(yè)機(jī)器人運(yùn)動(dòng)指令
    的頭像 發(fā)表于 06-16 16:15 ?1929次閱讀

    【米爾-全志T113-i開(kāi)發(fā)板試用】使用ruapu探測(cè)CPU指令集信息

    到的擴(kuò)展指令集 看到 thumb 模式下,不支持 vfpv4 和 idiv vfpv4 增加了 fma 乘法加速,idiv 增加了整數(shù)除法,由此可見(jiàn)使用 arm 模式編譯能使用更多的指令
    發(fā)表于 02-25 21:36

    【RISC-V開(kāi)放架構(gòu)設(shè)計(jì)之道|閱讀體驗(yàn)】匯編語(yǔ)言和擴(kuò)展指令

    存儲(chǔ)資源; 6)由于程序可從多處調(diào)用函數(shù),故需將控制權(quán)返回到調(diào)用點(diǎn)(使用ret指令)。 匯編器支持很多偽指令: 鏈接器的作用是將多個(gè)匯編器輸出的擴(kuò)展名為o的文件和已有的機(jī)器碼“拼接”為一個(gè)可執(zhí)行
    發(fā)表于 02-03 13:29

    ABB變頻器故障代碼表

    ? ? ? ABB變頻器是非常普遍的工業(yè)設(shè)備。在許多行業(yè)中應(yīng)用廣泛。然而,無(wú)論是由于使用年限或其他因素,ABB變頻器故障或出現(xiàn)錯(cuò)誤的可能性是存在的。本文將為您介紹ABB變頻器故障代碼表并提供詳實(shí)
    的頭像 發(fā)表于 02-02 17:10 ?3739次閱讀
    ABB變頻器故障代<b class='flag-5'>碼表</b>

    ARM中的編碼方式與尋址方式有何不同?

    和數(shù)據(jù)讀寫(xiě)時(shí)起到了不同的作用。 編碼方式指的是將指令轉(zhuǎn)換為機(jī)器碼的過(guò)程。ARM指令集包含多種編碼方式,包括基本指令、分支
    的頭像 發(fā)表于 01-29 18:10 ?610次閱讀

    PLC比較指令匯總整理

    比較指令又稱觸點(diǎn)比較指令,其功能是將兩個(gè)數(shù)據(jù)按指定條件進(jìn)行比較,條件成立時(shí)觸點(diǎn)閉合,否則觸點(diǎn)斷開(kāi)。
    發(fā)表于 12-12 11:45 ?6338次閱讀
    PLC比較<b class='flag-5'>指令</b>匯總<b class='flag-5'>整理</b>

    如何快速啟動(dòng)嵌入式Linux應(yīng)用

    當(dāng)前啟動(dòng)時(shí)間: 從上電到 LCD 顯示第一幀圖像:9.45 秒。 2 優(yōu)化編譯器 ARM vs Thumb2 比較基于 ARM 或者 Thumb2
    發(fā)表于 11-19 16:41 ?543次閱讀
    如何快速啟動(dòng)嵌入式Linux應(yīng)用

    講講ARM指令集格式以及常用的ARM匯編指令

    對(duì)于搞嵌入式驅(qū)動(dòng)或者操作系統(tǒng)的人來(lái)說(shuō),掌握匯編語(yǔ)言的使用還是比較重要的,畢竟有時(shí)候在分析定位問(wèn)題的時(shí)候,多多少少都會(huì)有匯編的身影。本文主要講講ARM指令集格式以及常用的ARM匯編指令
    的頭像 發(fā)表于 11-08 12:34 ?3245次閱讀
    講講<b class='flag-5'>ARM</b><b class='flag-5'>指令</b>集格式以及常用的<b class='flag-5'>ARM</b>匯編<b class='flag-5'>指令</b>