ARM汇编基础教程——ARM指令集

转载自: http://bbs.pediy.com/thread-220753.htm
ARM和Thumb
ARM状态的指令长度是32位的,Thumb状态的指令长度是16位的(也可能为32位)。当我们编写ARM shellcode时,需要使用16 bit的Thumb指令代替32 bit的ARM指令,从而避免在指令中出现’\0’截断。

容易引起混淆的是,不同的ARM版本,支持的Thumb指令集并不相同。在某些版本中,ARM引入了扩展的Thumb指令集(也就是Thumb-2),它支持32 bit指令以及条件执行。

你只需要知道目标设备的版本和该版本对Thumb指令有哪些特殊支持,然后调整你的代码就好了。ARM Infocenter可以帮助你了解各个ARM版本的具体细节(http://infocenter.arm.com/help/index.jsp)。

我们已经知道了Thumb有不同的版本,下面我们对不同的版本做一下简单的介绍,注意不同的命名只是为了区分不同的版本(换句话说,处理器只知道它运行在Thumb状态,其它一概不知)。

Thumb-1(16位指令):用于ARMv6和更早的版本。
Thumb-2(16位和32位指令):对Thumb-1的扩展,添加了更多指令并允许它们为16位或32位宽(ARMv6T2,ARMv7)。
ThumbEE:在Thumb-2基础上包含了针对动态代码生成(代码在执行前或执行期间编译代码)的一些变更和补充。

ARM和Thumb的区别

1.条件执行:ARM所有指令支持条件执行。
2.32位的Thumb指令具有.w后缀。
3.桶形移位器是另一种ARM模式特有的功能。它可以将多个指令合并成一个。例如,Mov R1,R0,LSL#1; R1 = R0 * 2
3.如果当前程序状态寄存器中的T位置1,我们知道我们处于Thumb模式。

ARM指令简介

执行条件,设置了执行条件的指令在执行指令前先校验CPSR中标志位;
第一个操作数,可以是一个寄存器或一个立即数;
第二个操作数,立即数、寄存器、带移位操作的寄存器。

LDM 多次加载;
MVN 取反码移动数据;
STM 多次存储;
LSL 逻辑左移;
LSR 逻辑右移;
ASR 算数右移;
ROR 循环右移;
B 分支;
BL 带返回的分支;
BX 带状态切换的分支;
BLX 带返回、状态切换的分支;
SWI/SVC 系统调用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值