ARM GUN基本語法

2021-06-18 09:16:50 字數 3609 閱讀 7759

gun注釋以「@」開始,或者「/* ……*/」

1.常量定義偽操作.equ或.set

語法格式:

.equ  symbol, expr

.set  symbol, expr

其中:symbol 為要指定的名稱,它可以是以前定義過的符號;

expr 表示數字常量或程式中的標號。

2.常量定義偽操作.equiv

語法格式:

.equiv  symbol, expr

其中:symbol 為要指定的名稱,它不可以是以前定義過的符號;

expr 表示數字常量或程式中的標號。

3.宣告全域性常量偽操作.global或.globl

語法格式:

.global  symbol

.globl  symbol

其中:symbol 為要宣告的全域性變數名稱

4.宣告外部變數偽操作.extern

語法格式:

.extern  symbol

其中:symbol 為要宣告的外部變數名稱

實現在當前的程式中使用乙個在其它檔案中宣告的外部變數main,可以使用以下語句進行宣告:

.extern  main

5.位元組定義.byte

語法格式:

.byte  expr …

其中:expr  數字表示式或程式中的標號。

分配一段位元組記憶體單元,並用25, 0x11, 031, 『x』,0x36進行初始化。

.byte  25, 0x11, 031, 『x』,0x36

6.半字定義.hword或.short

語法格式:

.hword  expr ….

.short  expr …

其中:expr  數字表示式或程式中的標號。

分配一段半字記憶體單元,並用12, 0xffe0,0xaabb進行初始化。

.hword  12, 0xffe0,0xaabb

也可以用.short來定義:

.short  12, 0xffe0,0xaabb

7.字定義.word或.int或.long

語法格式:

.word  expr ….

.int  expr …

.long  expr …

其中:expr  數字表示式或程式中的標號。

8.字串定義.ascii和.asciz或.string

語法格式:

.ascii expr …

.asciz  expr …

.string  expr …

其中:expr  表示字串。

9.雙字定義.quad

語法格式:

.quad  expr …

其中:expr  數字表示式。

10.四字定義.octa 

語法格式:

.octa  expr …

其中:expr  數字表示式。

11.單精度浮點數定義.float或.single

語法格式:

.float  expr ….

.single  expr ….

其中:expr  為32位的 ieee 單精度浮點數。

12.雙精度浮點數定義.double

語法格式:

.double  expr …

其中:expr  為32位的 ieee 單精度浮點數

13.重複記憶體單元定義.fill

語法格式:

.fill  repeat

其中:repeat 重複填充的次數;

size  每次所填充的位元組數;

value 所填充的資料。

14.宣告資料緩衝池.ltorg

語法格式

.ltorg

宣告乙個資料緩衝池用來儲存0xaabbccdd

ldr r0, = 0xaabbccdd

eor r1, r1, r0

b  sub_pro

.ltorg    @此處定義資料緩衝池,存放0xaabbccdd

段起始宣告偽操作

具體的語法格式如下:

.text

.data

.bss

1.條件編譯偽操作.if

語法格式:

.if logical_expression

程式**段a 

.endif

2. 巨集定義偽操作.macro

語法格式:

.macro

…}程式**段

.endm其中: 

3.檔案包含偽操作.include

.include偽操作用於將乙個原始檔包含到當前的原始檔中,所包含的檔案在.include指令的位置處進行彙編處理。

語法格式:

.include  "file_name"

arm組合語言源程式的基本結構

.global _start  /*gnu格式彙編*/

.text

.equ num,20   /*設定將要複製的字數*/

_start: ldr r0,=src /*r0暫存器指向源資料區src*/

ldr r1,=dst  /*r1暫存器指向目標資料區dst*/

mov r2,#num   /*指定將要複製的字數*/

mov sp,#0x31000000 /*設定資料棧指標(r13),用於儲存工作暫存器數值*/

blockcopy: movs r3,r2,lsr #3 /*需要進行的以8個字為單位的複製次 數beq copywords 對於剩下不足8個字的資料,跳轉到 

copywords,以字為單位複製*/

stmfd sp!, /*儲存工作暫存器,壓棧*/

octcopy:   ldmia r0!, /*從源資料區讀取8個字的數*/

/*據,放到8個暫存器中,並更新目標資料區指標r0*/

stmia r1!, /*將這8個字資料寫入到目標數*/ 

/*據區中,並更新目標資料區指標r1*/

subs r3,r3,#1  /*將塊複製次數減1*/

bne octcopy /*迴圈,直到完成以8個字為單位的塊複製*/      ldmfd sp!, /*恢復工作暫存器值,出棧*/

copywords: ands r2,r2,#7 /*剩下不足8個字的資料的字數*/       beq stop /*資料複製完成*/

wordcopy: ldr r3,[r0],#4 /*從源資料區讀取1個字的資料,*/

/*放到r3暫存器中,並更新目標資料區指標r0,後索引偏移*/

str r3,[r1],#4 /*將這r3中資料寫入到目標資料區中*/

/*並更新目標資料區指標r1,後索引偏移*/

subs r2,r2,#1 /*將字數減1*/

bne wordcopy /*迴圈,直到完成以字為單位的資料複製*/

stop:  b stop

.ltorg /*宣告文字池,可以通過ldr指令讀取裡面的內容*/

src:   

.long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4

/*定義源資料區src及目標資料區dst*/

dst:

.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

.end

go基本語法 golang基本語法

匯入包 import fmt import fmt os 函式外申明變數 var a int 函式內申明變數 a slice申明 slice本質是指向陣列的指標 var s int var s int make int,3 s make int,3 基於陣列建立slice a 3 int s a 3...

語法 C 基本語法

標頭檔案 在程式設計競賽中,我們常見乙個標頭檔案 include 發現它是部分c 中支援的乙個幾乎萬能的標頭檔案,包含所有的可用到的c 庫函式,如 在程式設計競賽中,使用這個標頭檔案是乙個好的想法,特別是當你在選擇標頭檔案時想減少時間,我們更加專注於找到演算法解決問題而不是軟體工程。而從軟體工程的視...

基本if語法

if 如果 else 否則 案例 絕對值 輸入乙個數,如果這個數是正數,那麼輸出它本身 如果這個數是負數,那麼輸出它的相反數 案例 計算三角形面積 改 要求能夠判斷出三條邊是否能構成三角形 如果不能,輸出 請正確輸入 案例 判斷乙個數是否為水仙花數 案例 獻血 根據性別和體重計算輸血量女性體重不超過...