0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

自己归纳整理的ARM THUMB指令机器码表

聚丰开发 2018-10-26 13:35 次阅读

注:本文是作者以前发表在其个人博客,现在发布到“聚丰开发”专栏



有个项目需要分析ARM THUMB指令的机器码,网上没有搜索到整理好的机器码表,只好自己把相关指令的机器码归纳整理出来,这里分享给大家。THUMB指令并不多,只有六十多条,这个数字真的是非常了不起,51都一百三十多条呢。

可能这张表对于大多数朋友都用不到,毕竟要深入到机器码这一层的机会还是比较少,我想能到这一步的朋友一定对ARM指令有了足够的理解,所以就不对注释做另外的说明,相信你一看就懂。




呵呵,如果你用上了这张表,记得在内心感谢我一下,这可是我从《Addison Wesley - ARM Architecture Reference Manual (2nd Edition)》中一条一条摘录出来的。


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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8615

    浏览量

    361324
  • 指令集
    +关注

    关注

    0

    文章

    203

    浏览量

    23156
收藏 人收藏

    评论

    相关推荐

    【米尔-全志T113-i开发板试用】使用ruapu探测CPU指令集信息

    到的扩展指令集 看到 thumb 模式下,不支持 vfpv4 和 idiv vfpv4 增加了 fma 乘法加速,idiv 增加了整数除法,由此可见使用 arm 模式编译能使用更多的指令
    发表于 02-25 21:36

    ARM中的编码方式与寻址方式有何不同?

    和数据读写时起到了不同的作用。 编码方式指的是将指令转换为机器码的过程。ARM指令集包含多种编码方式,包括基本指令、分支
    的头像 发表于 01-29 18:10 331次阅读

    讲讲ARM指令集格式以及常用的ARM汇编指令

    对于搞嵌入式驱动或者操作系统的人来说,掌握汇编语言的使用还是比较重要的,毕竟有时候在分析定位问题的时候,多多少少都会有汇编的身影。本文主要讲讲ARM指令集格式以及常用的ARM汇编指令
    的头像 发表于 11-08 12:34 869次阅读
    讲讲<b class='flag-5'>ARM</b><b class='flag-5'>指令</b>集格式以及常用的<b class='flag-5'>ARM</b>汇编<b class='flag-5'>指令</b>

    机器视觉与视觉检测知识点的归纳

    电子发烧友网站提供《机器视觉与视觉检测知识点的归纳.pdf》资料免费下载
    发表于 10-07 16:39 2次下载
    <b class='flag-5'>机器</b>视觉与视觉检测知识点的<b class='flag-5'>归纳</b>

    ARM 1176JZ-S技术参考手册

    处理器使用Java扩展和TrustZone™安全扩展实现ARM架构V6。 该体系结构包括32位ARM指令集、16位Thumb指令集和8位Ja
    发表于 08-29 06:08

    ARM-THUMB程序调用标准

    该基础标准定义了ARMThumb通用的机器级、仅整数调用标准和ARM机器级浮点标准。 Thumb
    发表于 08-17 07:36

    如何在蜂鸟处理器核的基础上扩展第三方指令

    想咨询一下如何在蜂鸟处理器核的基础上扩展第三方指令,使用户自定义指令,并如何构建机器码等内容? 我看了胡老师的RISC-V处理器设计的书里面讲的使用custom1-4来进行扩展,并以EAI为实例进行
    发表于 08-16 07:36

    RealView开发人员工具包汇编指南

    RVDK V2.2汇编器实现了汇编语言的实质性增强版本,同时继续支持旧版本以支持旧代码的汇编。 新版本可以组装成手臂或拇指指令。 新版本是支持Thumb®-2所必需的,Thumb®-2是ARM
    发表于 08-16 06:59

    GCC怎么生成128bit自定义扩展指令的汇编码和机器码

    我现在自定义了一套128bit的指令,对应的处理器也写了,现在想测试一下结果和功能。想把自己定义的指令变成汇编码和机器码用来测试处理器。想请各位大神帮帮忙。
    发表于 08-12 07:26

    ARM11 MPCore技术参考手册

    该处理器包含多达四个MP11 CPU,用于实现ARM体系结构v6K。它支持ARMThumb指令集,支持直接执行Java字节码的Jazelle技术,以及一系列对32位寄存器中的16位或
    发表于 08-02 18:45

    ARM922T处理器技术参考手册

    以作为可以嵌入到更复杂的设备中的独立核心来提供。独立核心有一个简单的总线接口,允许您设计自己的缓存和周围的内存系统。ARM9TDMI系列微处理器同时支持32位ARM和16位Thumb
    发表于 08-02 15:44

    ARM920T处理器技术参考手册

    简单的总线接口,允许您围绕它设计自己的缓存和内存系统。ARM9TDMI系列微处理器支持32位ARM和16位Thumb指令集,允许您在高性能和
    发表于 08-02 13:05

    ARM968E-S处理器技术参考手册

    可合成的ARM968E-S处理器是ARM9Thumb系列的一员,实现了ARMv5TE体系结构。它支持32位ARM指令集和16位Thumb
    发表于 08-02 12:08

    Thumb®-2参考手册

    本手册的目的是描述Thumb®-2,它的指令集架构(ISA),以及变化 它引入了程序员的模型。本手册还描述了ARM®ISA的扩展 同时介绍。Thumb-2是
    发表于 08-02 07:34

    介绍一下机器码与汇编代码的特点和一般功能

    机器码顾名思义是单片工作且能识别和运行的一类代码,常见的格式有二进制BIN格式、十进制HEX格式等。
    的头像 发表于 03-31 10:40 1177次阅读