一. 帶點(diǎn)的(一般都是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"
|
|
條件碼 |
助記符后綴 |
標(biāo)志 |
含義 |
|
0000 |
EQ |
Z置位 |
相等 |
|
0001 |
NE |
Z清零 |
不相等 |
|
0010 |
CS |
C置位 |
無(wú)符號(hào)數(shù)大于或等于 |
|
0011 |
CC |
C清零 |
無(wú)符號(hào)數(shù)小于 |
|
0100 |
MI |
N置位 |
負(fù)數(shù) |
|
0101 |
PL |
N清零 |
正數(shù)或零 |
|
0110 |
VS |
V置位 |
溢出 |
|
0111 |
VC |
V清零 |
未溢出 |
|
1000 |
HI |
C置位Z清零 |
無(wú)符號(hào)數(shù)大于 |
|
1001 |
LS |
C清零Z置位 |
無(wú)符號(hào)數(shù)小于或等于 |
|
1010 |
GE |
N等于V |
帶符號(hào)數(shù)大于或等于 |
|
1011 |
LT |
N不等于V |
帶符號(hào)數(shù)小于 |
|
1100 |
GT |
Z清零且(N等于V) |
帶符號(hào)數(shù)大于 |
|
1101 |
LE |
Z置位或(N不等于V) |
帶符號(hào)數(shù)小于或等于 |
|
1110 |
AL |
忽略 |
無(wú)條件執(zhí)行 |
例如
cmp r0, r1
beq func//如果r1==r0,則跳轉(zhuǎn)到func標(biāo)志地址上去
cmp r0, r1
beq func//如果r1!=r0,則跳轉(zhuǎn)到func標(biāo)志地址上去
sp是堆棧指針,lr是鏈接地址寄存器。R13作為sp,R14作為lr。【1】當(dāng)使用bl指令調(diào)用子程序時(shí),系統(tǒng)會(huì)自動(dòng)將 bl指令的下一條指令的地址存入lr中。
對(duì)于鏈接地址寄存器,它的作用有兩個(gè):
執(zhí)行過程如下圖
①,程序A正常執(zhí)行到BL Lable然后轉(zhuǎn)到程序B中去【2】當(dāng)發(fā)生異常時(shí),系統(tǒng)自動(dòng)將異常的返回地址放入R14中(有些異常有一個(gè)小的固定的偏移量)。
②,系統(tǒng)將BL Lable的下一句NEXT的地址放到LR中去
③,執(zhí)行完B的程序后,執(zhí)行一個(gè)MOV PC,LR將NEXT的地址給到當(dāng)前pc值
④,繼續(xù)執(zhí)行程序A下面的語(yǔ)句
;按位與
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
;算術(shù)右移
ASR Rd, Rn, #imm5 ; Rd = Rn>> imm5
ASR Rd, Rn ; Rd =>> Rn
ASR.W Rd, Rm, Rn ; Rd = Rm>>Rn
;循環(huán)右移
ROR Rd, Rn ;
ROR.W Rd, Rm, Rn ;
(1)十進(jìn)制數(shù)以非0數(shù)字開頭,如:123和9876;
(2)二進(jìn)制數(shù)以0b開頭,其中字母也可以為大寫;
(3)八進(jìn)制數(shù)以0開始,如:0456,0123;
(4)十六進(jìn)制數(shù)以0x開頭,如:0xabcd,0X123f;
(5)字符串常量需要用引號(hào)括起來(lái),中間也可以使用轉(zhuǎn)義字符,如: “You are welcome!/n”;
(6)當(dāng)前地址以“.”表示,在匯編程序中可以使用這個(gè)符號(hào)代表當(dāng)前指令的地址;
(7)表達(dá)式:在匯編程序中的表達(dá)式可以使用常數(shù)或者數(shù)值, “-”表示取負(fù)數(shù), “~”表示取補(bǔ),“<>”表示不相等,其他的符號(hào)如:+、-、*、/、%、<、<<、>、>>、|、&、^、!、==、>=、<=、&&、||跟C語(yǔ)言中的用法相似。
|
|