資料定義偽指令
彙編控制偽操作
雜項.global,.local,.set,.equ
使得符號對聯結器可見,變為對整個工程可用的全域性變數,通俗講就是定義全域性變數
eg:.global symbol
給乙個全域性變數或區域性變數賦值,和.equ的功能一樣
eg:.set symbol expr
.set start, 0x40
.set start, 0x50
mov r1, #start ;r1裡面是0x50
和.set一樣,只是格式不同
eg:symbol .equ expr
start .equ, 0x40
start .equ, 0x50
mov r1, #start ;r1裡面是0x50
.byte,.short,.long,.quad,.float,.string,.asciz,.ascii,.rept
在儲存器中分配1個位元組,用指定的資料對儲存單元進行初始化
label: .byte expr ;label是程式標號,expr可以是-128~255的數字,也可是字元
eg:a: .byte #1 ;等價於c語言中的char a=1;
在儲存器中分配2個位元組,用指定的資料對儲存單元進行初始化
eg:a: .short 0x1234
在儲存器中分配4個位元組,用指定的資料對儲存單元進行初始化
eg:a: .word 0x12345678
在儲存器中分配8個位元組,用指定的資料對儲存單元進行初始化
eg:a: .quad 0x12345678 ;等價於c中的long a=0x1234567812345678
在儲存器中分配4個位元組,用指定的浮點資料對儲存單元進行初始化
eg:a: .float 1.11
用於分配一塊連續的儲存區域並初始化為指定的值,如果後面的填充值省略不寫則在後面填充為0;
label: .space size,expr ;expr可以是4位元組(32bit)以內的浮點數
eg:a: .space 8, 0x1
.string
定義乙個字串,預設是string8,還有string16,string32,string64
eg:a: .space 「hello world!」
重複執行接下來的指令,以.rept開始,以.endr結束
eg:.rept cnt ;cnt是重複次數
….endr
流程控制偽指令主要有.if .else .endif .macro .endm .exitm
.if, .else, .endif
.if logical-expression
….elseif logical-expression2
….else
….endif
.macro, .endm, .exitm
該偽指令可以將一段**定義為乙個整體,稱為巨集指令。然後就可以在程式中通過巨集指令多次呼叫該段**;而.exitm用於退出當前巨集指令,巨集指令可以使用乙個或多個引數,當巨集操作被展開時,這些引數被相應的值替換。包含在.macro和.endm之間的指令序列稱為巨集定義體。在巨集定義體的第一行應該宣告巨集的原型,包含巨集名所需要的引數,然後就可以在匯程式設計序中通過巨集名來呼叫該指令序列。在源程式被編譯時,編譯器將巨集呼叫展開,用巨集定義中的指令序列代替程式中的巨集呼叫,並將實際引數值傳遞給巨集定義中的形式引數。
eg:.macro macroname macargs …
…code…
.endm
.align 用於使程式當前位置滿足一定的對齊方式
.section 用來定義乙個段的偽指令
.data 用來定義乙個資料段
.text 用來定義乙個**段
.include 用來包含乙個標頭檔案
.arm 定義以下**使用arm指令集編譯
.code 32 同.arm
.code 16 同.thumb
.thumb 定義以下**使用thumb指令集編譯
.extern 用於宣告乙個外部符號,用於相容性其他彙編
.weak 用於宣告乙個弱符號,如果這個符號沒有定義,編譯就忽略,而不會報錯
.end 表示彙編結束
gun平台相關
adr把標籤所在的位址載入到暫存器中,這個指令將基於pc相對偏移的位址或基於暫存器相對偏移的位址值讀取到暫存器中。當位址是位元組對齊時,取值範圍為-255-255b;當位址是字對齊時取值範圍是-1020-1020b。該指令相當於 add , pc, offset
eg:adr
adrl
用於將中等範圍位址讀取到暫存器中
adrl
ldr裝在乙個32位的常數和乙個位址暫存器,即將乙個32位常數載入到乙個暫存器中
ldr reg, =expr
reg:目標暫存器
expr:32位常量
彙編器根據expr的取值情況對ldr偽指令會做一下處理:
ARM彙編偽指令
global,local,set,equ global 使得符號對聯結器可見,變為對整個工程可用的全域性變數,通俗講就是定義全域性變數 eg global symbol local set 給乙個全域性變數或區域性變數賦值,和.equ的功能一樣 eg set symbol expr set star...
ARM彙編偽指令
用來做注釋。可以在行首也可以在 後面同一行直接跟,和c語言中 類似 做注釋,一般放在行首,表示這一行都是注釋而不是 以冒號結尾的是標號 點號在gnu彙編中表示當前指令的位址 立即數前面要加 或 表示這是個立即數 global start 給 start外部鏈結屬性 section text 指定當前...
ARM 彙編 偽指令 MACRO及MEND
macro偽操作標識 巨集定義的開始,mend標識巨集定義的結束。用macro 及mend定義一段 稱為巨集定義體,這樣在程式中就可以通過巨集指令多次呼叫該 段 語法格式 macro macroname code code mend 其中 labelz在巨集指令被展開時,label可被替換成相應的符...