2008年12月6日星期六

ARM ASM助记篇

作者: Sam(甄峰) sam_code@htomail.com

这篇文档作为Sam看ARM ASM时的参考手册。呵呵。有了这篇手册,看ARM ASM就会容易很多。有了这篇文档就能看懂ASM吗?一定可以,不信去问葛优。他一定说:(神州行)我看行!

1. 关键字:
1.1 AREA Example1, CODE, READONLY
AREA: 至少在ADS上编译ASM时,必须要有AREA关键字(其实也是个指令助记符)。它表明这个区域是Example1。是一个CODE区域。是一个READONLY区域。


1.2 ENTRY:
标识代码入口。没有这一项也没有任何问题。


1.3 CODE32
表明是32位ARM指令。



2. 助记指令:
2.1 MOV/MVN
:数据传送指令,将8位图操作数2传送到目标寄存器(操作数1)/将操作数2取反之后放到操作数1中。

MOV R1, #0x10 ;将直接数0x10放到R1寄存器去

MOV R0, R1 ; 将R1内容copy到R0去

MOV PC, LR ;PC=LR, 子程序返回

MOV R3,R1, LSL#2 R3=R1<<2>MVN R1,#0xFF ; R1=0xFFFFFF00





2.2 EQU: 赋值,用来定义变量

COUNT EQU 0x40003100 ; EOUNT赋值为0x40003100





2.3 LDR/STR: 加载存储指令

LDR:从内存中读取数据(单一字节或字)放入寄存器。

STR: 将单一字节或字存储到内存。



LDR R0,[R1,#0x12] ; 将R1+0x12处的数据读出,放到R0中去。

LDR R0, [R1,-R2] ;将R1-R2内存处的数据读出,放到R0 中去。

STR R0,[R1,-0x4] ;将R0内容放到内存R1-0x4处







2.4 CMP:比较指令

CMP R1,#10

CMP 将第一个参数减去第二个参数。针具结果更新CPSR中相应条件标志位。以便后面的指令根据相应的条件标志来判断是否执行。(寄存器CPSR的内容可以用AXD看到)如果R1-#10 <>


没有评论: