用ARM指令及汇编包括
1、ARM处理器寻址方式
2、指令集介绍
3、伪指令
4、ARM汇编程序设计
5、C与汇编混合编程
ARM处理器寻址方式
1、寄存器寻址:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作
MOV  R1, R2       ;R2->R1
SUB  R0, R1,R2    ;R1-R2 -> R0
2、立即寻址:立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令就取出了可以立即使用的操作数
SUBS R0,R0,#1      ;R0-1 -> R0
MOV  R0,#0xff00    ;0xff00 -> R0
注:立即数要以"#"为前缀,表示16进制数值时以"0x"表示
3、寄存器偏移寻址:是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个操作数结合之前选择进行移位操作
MOV  R0,R2,LSL #3       ;R2的值左移3位,结果存入R0,即R0 = R2 * 8
ANDS R1,R1,R2,LSL R3  ;R2的值左移R3位,然后和R1相与操作,结果放入R1
寄存器偏移寻址可采用的移位操作如下
(1)、LSL(Logical Shift Left)逻辑左移,寄存器中字的低端空出补0
(2)、LSR(Logical Shift Right)逻辑右移,寄存器中字的高端空出补0
(3)、ASR(Arthmetic Shift Right)算术右移,移位中保持符号位不变,即如果源操作数为正数,字高端空出补0,否则补1
(4)、ROR(Rotate Right)循环右移,由字的低端移出的位填入高端空出的位
(5)、RRX(Rotate Right eXtended by 1 place),操作数右移一位,左侧空位由CPSR的C填充
4、寄存器间接寻址:寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针
LDR R1,[R2]    ;将R2中的数值作为地址,取出此地址中的数据保存在R1中
SWP R1,R1,[R2] ;将R2中的数值作为地址,取出此地址中的数值与R1中的值交换
5、基址寻址:将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。
LDR R2,[R3,#0x0F]    ;将R3的数值加0x0F作为地址,取出此地址的数值保存在R2中
STR R1,[R0,#-2]      ;将R0中的数值减2作为地址,把R1中的内容保存到此地址位置
 
6、多寄存器寻址:一次可以传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器
LDMIA R1!,{R2-R7,R12}  ;将R1所指向的地址的数据读出到R2-R7,R12,R1自动更新
STMIA R0!,{R3-R6,R10}  ;将R3-R6,R10中的数值保存到R0指向的地址,R0自动更新
7、堆栈寻址:堆栈是特定顺序进行存取的存储区,堆栈寻址时隐含的使用一个专门的寄存器(堆栈指针),指向一块存储区域(堆栈),存储器堆栈可分为两种:
向上生长:向高地址方向生长,称为递增堆栈
向下生长:向低地址方向生长,称为递减堆栈
如此可结合出四中情况:
>汇编指令有多少个

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。