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

注:本文是作者以前发表在其个人博客,现在发布到“聚丰开发”专栏
有个项目需要分析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

采用C8051F020单片机实现pH值检测控制仪器的设计
爱普生移动解决方案有效解决移动商务办公
教你如何预测连接器的使用寿命
AImotive采用新思科技VCS®仿真和Verdi®调试验证其下一代自动驾驶
手机厂商自研ISP正在成为主流
自己归纳整理的ARM THUMB指令机器码表
小米宣布将于2月25日正式发布Redmi MAX智能电视
MAX9268 吉比特多媒体串行链路解串器,具有LVDS系统
一文读懂算术逻辑单元ALU
泛在电力物联网如何做到监管和满意度都达标
PCB设计的五个关键设计点
realme X2 Pro大师版开启预约,拥有精致logo与大师签名
工程师笔记|STM32G4 应用程序与 Option Bytes 同时烧录问题
南亚科总经理:远距离通信需求能稳住第二季市况
GPS天线原理解析
晶体振荡器的原理及发展趋势
三一重工积极转型 探索工业物联网创新商业模式
安森美半导体的背光/闪光LED驱动器方案
5G已具备了试商用条件但是5G网络还未大规模建设以及终端尚未成熟
MPI TS200操作手册