1 ARM GNU 匯編偽指令簡(jiǎn)介
(1)abort
.abort 停止匯編
(2)align
.align absexpr1,absexpr2
以某種對(duì)齊方式,在未使用的存儲(chǔ)區(qū)域填充值. 第一個(gè)值表示對(duì)齊方式,4, 8,16或
32. 第二個(gè)表達(dá)式值表示填充的值
(3)if...else...endif
.if
.else
.endif: 支持條件預(yù)編譯
(4)include
.include "file": 包含指定的頭文件, 可以把一個(gè)匯編常量定義放在頭文件中
(5)comm
.comm symbol, length:
在bss段申請(qǐng)一段命名空間,該段空間的名稱叫symbol, 長(zhǎng)度為length. Ld連接器在連接
會(huì)為它留出空間
(6)data
.data subsection: 說(shuō)明接下來(lái)的定義歸屬于subsection數(shù)據(jù)段
(7)equ
.equ symbol, expression: 把某一個(gè)符號(hào)(symbol)定義成某一個(gè)值(expression).該
指令并不分配空間
(8)global
.global symbol: 定義一個(gè)全局符號(hào), 通常是為ld使用
(9)ascii
.ascii "string": 定義一個(gè)字符串并為之分配空間
(10)byte
.byte expressions: 定義一個(gè)字節(jié), 并為之分配空間
(11)short
.short expressions: 定義一個(gè)短整型, 并為之分配空間
(12)int
.int expressions: 定義一個(gè)整型,并為之分配空間
(13)long
.long expressions: 定義一個(gè)長(zhǎng)整型, 并為之分配空間
(14)word
.word expressions: 定義一個(gè)字,并為之分配空間, 4 bytes
(15)macro/endm
.macro: 定義一段宏代碼, .macro表示代碼的開始, .endm表示代碼的結(jié)束, .exitm
跳出宏, 示例如下:
.macro SHIFTLEFT a, b
.if \b < 0
mov \a, \a, ASR #-\b
.exitm
.endif
mov \a, \a, LSL #\b
.endm
(16)req
name .req register name: 為寄存器定義一個(gè)別名
(17)code
.code [16|32]: 指定指令代碼產(chǎn)生的長(zhǎng)度, 16表示Thumb指令, 32表示ARM指令
(18)ltorg
.ltorg: 表示當(dāng)前往下的定義在歸于當(dāng)前段,并為之分配空間
2 ARM GNU專有符號(hào)
(1)@ 表示注釋從當(dāng)前位置到行尾的字符.
(2)# 注釋掉一整行.
(3); 新行分隔符.
3 操作碼
(1)NOP: nop 空操作, 相當(dāng)于MOV r0, r0
(2)LDR: ldr <register> , =<expression> 相當(dāng)于PC寄存器或其它寄存器的長(zhǎng)轉(zhuǎn)移
(3)ADR: adr <register> <label> 相于PC寄存器或其它寄存器的小范圍轉(zhuǎn)移
(4)ADRL: adrl <register> <label> 相于PC寄存器或其寄存器的中范圍轉(zhuǎn)移