一. 带点的(一般都是ARM GNU伪汇编指令)1. ".text"、".data"、".bss"
2.".global"
3.".ascii"、".byte"、".short"、".int"、".long"、".word"、".quad"
4.".abort"
5.".align"
6.".if .else .endif"
7.".include"
8.".comm"
9.".equ"
|
条件码 |
助记符后缀 |
标志 |
含义 |
0000 |
EQ |
Z置位 |
相等 |
0001 |
NE |
Z清零 |
不相等 |
0010 |
CS |
C置位 |
无符号数大于或等于 |
0011 |
CC |
C清零 |
无符号数小于 |
0100 |
MI |
N置位 |
负数 |
0101 |
PL |
N清零 |
正数或零 |
0110 |
VS |
V置位 |
溢出 |
0111 |
VC |
V清零 |
未溢出 |
1000 |
HI |
C置位Z清零 |
无符号数大于 |
1001 |
LS |
C清零Z置位 |
无符号数小于或等于 |
1010 |
GE |
N等于V |
带符号数大于或等于 |
1011 |
LT |
N不等于V |
带符号数小于 |
1100 |
GT |
Z清零且(N等于V) |
带符号数大于 |
1101 |
LE |
Z置位或(N不等于V) |
带符号数小于或等于 |
1110 |
AL |
忽略 |
无条件执行 |
例如
cmp r0, r1
beq func//如果r1==r0,则跳转到func标志地址上去
cmp r0, r1
beq func//如果r1!=r0,则跳转到func标志地址上去
sp是堆栈指针,lr是链接地址寄存器。R13作为sp,R14作为lr。【1】当使用bl指令调用子程序时,系统会自动将 bl指令的下一条指令的地址存入lr中。
对于链接地址寄存器,它的作用有两个:
执行过程如下图
①,程序A正常执行到BL Lable然后转到程序B中去【2】当发生异常时,系统自动将异常的返回地址放入R14中(有些异常有一个小的固定的偏移量)。
②,系统将BL Lable的下一句NEXT的地址放到LR中去
③,执行完B的程序后,执行一个MOV PC,LR将NEXT的地址给到当前pc值
④,继续执行程序A下面的语句
;按位与
AND Rd, Rn ; Rd &= Rn
AND.W Rd, Rn, #imm12 ; Rd = Rn & imm12
AND.W Rd, Rm, Rn ; Rd = Rm & Rn
;按位或
ORR Rd, Rn ; Rd |= Rn
ORR.W Rd, Rn, #imm12 ; Rd = Rn | imm12
ORR.W Rd, Rm, Rn ; Rd = Rm | Rn
;按位清零
BIC Rd, Rn ; Rd &= ~Rn
BIC.W Rd, Rn, #imm12 ; Rd = Rn & ~imm12
BIC.W Rd, Rm, Rn ; Rd = Rm & ~Rn
;按位或反
ORN.W Rd, Rn, #imm12 ; Rd = Rn | ~imm12
ORN.W Rd, Rm, Rn ; Rd = Rm | ~Rn
;按位异或
EOR Rd, Rn ; Rd ^= Rn
EOR.W Rd, Rn, #imm12 ; Rd = Rn ^ imm12
EOR.W Rd, Rm, Rn ; Rd = Rm ^ Rn
;逻辑左移
LSL Rd, Rn, #imm5 ; Rd = Rn<<imm5
LSL Rd, Rn ; Rd <<= Rn
LSL.W Rd, Rm, Rn ; Rd = Rm<<Rn
;逻辑右移
LSR Rd, Rn, #imm5 ; Rd = Rn>>imm5
LSR Rd, Rn ; Rd >>= Rn
LSR.W Rd, Rm, Rn ; Rd = Rm>>Rn
;算术右移
ASR Rd, Rn, #imm5 ; Rd = Rn>> imm5
ASR Rd, Rn ; Rd =>> Rn
ASR.W Rd, Rm, Rn ; Rd = Rm>>Rn
;循环右移
ROR Rd, Rn ;
ROR.W Rd, Rm, Rn ;
(1)十进制数以非0数字开头,如:123和9876;
(2)二进制数以0b开头,其中字母也可以为大写;
(3)八进制数以0开始,如:0456,0123;
(4)十六进制数以0x开头,如:0xabcd,0X123f;
(5)字符串常量需要用引号括起来,中间也可以使用转义字符,如: “You are welcome!/n”;
(6)当前地址以“.”表示,在汇编程序中可以使用这个符号代表当前指令的地址;
(7)表达式:在汇编程序中的表达式可以使用常数或者数值, “-”表示取负数, “~”表示取补,“<>”表示不相等,其他的符号如:+、-、*、/、%、<、<<、>、>>、|、&、^、!、==、>=、<=、&&、||跟C语言中的用法相似。
|