一.ARM汇编语言程序格式
ARM汇编语言是以段(section)为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。
段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个ARM源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。
在汇编文件中,我们需要先定义一个段,在段中添加我们实现的汇编程序语句。
nop执行,但是nop没有实际含义,类似于占个位。
b 类似于goto,也就是goto翻译为汇编语言后,就是b。
;在汇编里面,注释用“ ;”,并且每次只能注释一行
二.ARM汇编语言中常用的伪操作
这些伪操作类似于c语言中的include等
三.指令格式中符号说明
凡是被大括号括起来的东西都是可以被省略的 。
opcode : 操作码,像如mov,add这类的。
cond:可选的条件,在执行这个语句的时候,符合某种条件再去执行,一般用在if里面。
S:改变状态码的标识,如借位标识,可以选择要不或者不要。要想改变cpsr,就要加s。
Rd:目标寄存器
Rn:存放第一操作数的寄存器,有时候也可以省略。
四.ARM指令集合
1.六大类
数据处理指令,如add。
先从内存把指令加载到cpu中,就要用Load和Stord,一个从里面读,一个是往里面写。
跳转指令 b
cpsr要有专门的指令去存取。
协助处理,用来管理MMu的。
(1).数据处理指令又可以分为
RSB:反向的减法,本来是前面减后面,现在是后面减前面。
ADC:带C的都是带进位借位的加法。
因为0x 1 ffff ffff超过了32位i,所以用俩个寄存器来存一个数值。
在计算0xffff ffff 加 3 的时候会产生进位,所以要用进位标识码,进位标识码只是一种状态不是在这个里面保存了一个1,有进位,那么我们就要用adc来计算而不是用add。
ORR:或
EOR :异或
BIC:位清零,就是把后面数字的为1 的位清零,然后保存在前面的寄存器中。
mov r0, #0xff
bic r1, r0, #1 ;结果位0xfe 就是把最后一位为1的位的1清零
bic r1, r0, #2 ;结果位0xfd 就是把最倒数第二位为1的位的1清零