ARM linux常用匯編語法
匯編語言每行的語法:
本文引用地址:http://m.butianyuan.cn/article/201611/318765.htmlable: instruction ; comment
段操作: .section
格式: .section 段名 [標(biāo)志]
[標(biāo)志]可以是如下:
a 允許段
w 可寫段
x 可執(zhí)行段
常見段名: data, bss, text, rodata段,我們也可以定義我們自己的段。
.data: 已初始化數(shù)據(jù)段
.bss: 未初始化數(shù)據(jù)段
.text:代碼段
.rodata:只讀段
匯編程序的入口點(diǎn):
通常,linux的匯編程序的入口點(diǎn)都是從_start這個(gè)全局符號(hào)開始的。而C語言的入口點(diǎn)是main, main函數(shù)就是被_start后面的代碼調(diào)用。
.global _start
_start:
代碼,,,初始化程序運(yùn)行環(huán)境;
代碼,,,
,,,
bl main
bl exit
linux匯編中常數(shù)的使用:
十進(jìn)制: 以非0 的數(shù)字開頭表示, 124, 564
二進(jìn)制: 以0b開頭,如0b101001
八進(jìn)制: 以0開始的數(shù)字,如05645
十六進(jìn)制:以0x開頭, 如0xab12
linux匯編中常用的偽操作:
數(shù)據(jù)定義偽操作:
.byte, 定義單個(gè)字節(jié), 如, .byte 5, 4, 0b1001, 0x22, 055, b
.short, 定義半字?jǐn)?shù)據(jù), 如,.short 0x1122, 3344
.long, 定義4字節(jié)數(shù)據(jù),如, 0x11223344,
.word
.string, .asciz, .ascii, 定義字符串?dāng)?shù)據(jù), 比如.string "hello"
對(duì)齊偽操作: .align n --> 2^n
文件結(jié)束操作:.end
文件包含操作:.include, 一般是在文件開頭的時(shí)候包含頭文件時(shí)使用
代碼指令集切換:
.thumb, .code 16 這兩個(gè)偽指令告訴編譯器從這里開始,以后的代碼都編譯成16為的thumb指令。
.arm, .code 32 這兩個(gè)偽指令告訴編譯器從這里開始,以后的代碼都編譯成32為的arm指令。
函數(shù)定義格式:
函數(shù)名:
函數(shù)體
函數(shù)返回語句
比如add函數(shù):
.global add
add:
add r0, r1, r2
mov pc, lr
常見符號(hào)的意義和用法:
@ : 代碼注釋符號(hào)
; 語句分離符號(hào)。(相當(dāng)于C語言中的;)
# 立即數(shù)前綴
評(píng)論