注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

ARM汇编指令  

2013-05-19 11:27:04|  分类: ios开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

ARM汇编指令

ARM寻址方式

立即寻址  ADD R0,R0,#1

寄存器寻址 ADD R0,R1,R2

寄存器间接寻址 LDR R0,[R2]

基址变址寻址

LDR R0,[R1,#4] ;R0=[R1+4]

LDR R0,[R1,#4]! ;R0=[R1+4] R1=R1+4

LDR R0,[R1],#4 ;R0=[R1] R1=R1+4

LDR R0,[R1,R2] ;R0=[R1+R2]

多寄存器寻址

LDMIA R0,{R1,R2,R3,R4}

后缀IA表示[R0]~[R0+12]加载到R1~R4

相对寻址 BL NEXT

堆栈寻址

ARM指令集

跳转指令

B{条件} 目标地址

B 跳转指令

BL 带返回跳转指令,在跳转之前将PC值保存在R14中

BLX 带返回和状态切换跳转指令

BX 带状态切换的跳转指令,切换成ARM/Thumb状态

数据处理指令

MOV{条件}{S 目的寄存器,源操作数

其中{S}决定是否影响CPSP条件标志位,源操作数可以为立即数、寄存器和被移位的寄存器

MVN{条件}{S 目的寄存器,源操作数

MOV不同的是源操作数被按位取反

CMP{条件} 操作数1,操作数2

操作数1减去操作数2,只影响条件标志位

TST{条件} 操作数1,操作数2

操作数1与操作数2按位与,只影响条件标志位

ADD{条件}{S 目的寄存器,操作数1,操作数2

目的寄存器=操作数1+操作数2,操作数2可为立即数或移位的寄存器

SUB{条件}{S 目的寄存器,操作数1,操作数2

目的寄存器=操作数1-操作数2,操作数2可为立即数或移位的寄存器

AND{条件}{S 目的寄存器,操作数1,操作数2

目的寄存器=操作数1&操作数2

ORR{条件}{S 目的寄存器,操作数1,操作数2

目的寄存器=操作数1|操作数2

BIC{cond}{S} Rd,Rn,operand2

清除Rn的某些位,将结果存在Rd中。operand2的某一位为1,则清除这一位

MUL{条件}{S 目的寄存器,操作数1,操作数2

MULR0,R1,R2;R0=R1*R2

MRS{条件} 通用寄存器,程序状态寄存器

MRSR0,CPSR;保存CPSP的内容到R0

MSR{条件} 程序状态寄存器_<域>,操作数

MSRSPSR,R0;SPSR=R0

MSRCPSR_c,R0;传送R0的内容到CPSR,但仅仅修改控制位域

CPSR[31:24]条件(f) [23:16]状态(s) [15:8]扩展(x) [7:0]控制(c)

加载/存储指令

LDR{条件} Rd,<Mem>

LDRR0,[R1];R0=[R1]

LDRR0,[R1,R2];R0=[R1+R2]

LDRR0,[R1,#8];R0=[R1+8]

LDRR0,[R1,R2]!;R0=[R1+R2]R1=R1+R2

LDR{条件}B Rd,<Mem>

将字节传送到Rd,同时Rd高位清零

LDR{条件}H Rd,<Mem>

16位半字传送到Rd,同时Rd高位清零

STR{条件} Rs,<Mem>

32位字从Rs存储到Mem

LDM{条件}{类型} 基址寄存器{!},寄存器列表{^}

STMFDR13!,{R0,R4-R12,LR}存入堆栈

LDMFDR13!,{R0,R4-R12,LR}恢复寄存器内容

类型:IA(后+ IB(前+ DA DB FD(满- ED FA EA(空+

STM 同上

SWP{条件} Rd,Rs1,[Rs2]

SWPR0,R1,[R2];R0=[R2]  [R2]=R1

SWPR0,R0,[R1];swap R0,[R1]

SWPB 字节数据交换

移位操作

LSL ASL LSR ASR ROR(循环)

MOV R0,R1,ROR#2

异常产生指令

SWI 软件中断指令

BKPT 断点中断指令

ARM伪指令

变量定义

数字 逻辑 字符串

全局 GBLA GBLL GBLS

局部 LCLA LCLL LCLS

赋值 SETA SETL SETS

GBLATest1;定义变量

Test1SETA0xaa;赋值

GBLLTest2

Test2SETL{TRUE}

GBLSTest3

Test3SETS"Testing"

标号 RLIST {RegList}

RegListRLIST{R0-R5,R8,R10};定义寄存器列表

标号 DCB 表达式

StrDCB"This is a test!";分配一片连续空间并初始化,DCB可为=

标号 SPACE 表达式

DataSpaceSPACE100;分配一片连续空间并初始化为0,SPACE可用%代替

MAP 表达式{, 基址寄存器}

MAP0x100,R0;地址为0x100+R0MAP可有^代替

标号 FIELD 表达式

MAP0x100;定义结构化内存首地址0x100

AFIELD16;定义A的长度为16个字节,开始于0x100FIELD可用#

BFIELD32;定义B的长度为32个字节,开始于0x110

汇编控制

IF ELSE ENDIF

WHILE WEND

MACRO MEND

MEXIT

其他伪指令

AREA 段名 属性1,属性2,……

属性有CODE DATA READONLYREADWRITE

ALIEN 指令对齐

AREAlnit,CODE,READONLY,ALIEN=3只读代码段,指令8字节对齐

CODE16/CODE32 Thumb/ARM指令,不切换处理器状态

ENTRY 程序入口

名称 EQU 表达式{,类型}

EXPORT 声名全局标号

IMPORT 导入全局标号

END 汇编结束

  评论这张
 
阅读(94)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017