arm學習筆記四 arm偽指令

2022-08-18 04:21:13 字數 2661 閱讀 7548

arm偽指令

符號定義偽指令

定義arm匯程式設計序中的變數、對變數賦值以及定義暫存器的別名

定義全域性變數 

gbla(全域性數字變數,初始化值為0) 

gbla 全域性變數名

示例**如下:

gbla test1;定義全域性數字變數test1

test1 seta 0x123;將該變數賦值為0x123

gbll(全域性邏輯變數,初始化為f)

gbll 全域性變數名

示例**如下:

gbll test2;定義全域性邏輯變數test2

test2 setl ;將變數賦值為真

bgls(全域性字串變數,初始化為空)

gbls 全域性變數名

示例**如下:

gbls test3;定義全域性字串變數test3

test3 sets "testing";將變數賦值為testing

定義區域性變數 

lcla 

lcll

lcls

對變數賦值 

seta

setl

sets

為通用暫存器列表定義名稱 rlist

在ldm/stm指令中,列表中的暫存器訪問次序根據暫存器的編號由低到高

與列表中的暫存器的排列次序無關

語法格式:

名稱 rlist

示例**如下:

reglist rlist (r0-r5,r8,r10);定義reglist暫存器列表

資料定義偽指令

dcb 分配一片連續的位元組儲存單元,並且用指令中指定的表示式初始化

語法格式:

標號 dcb  表示式

示例**如下:

str dcb "this is a test!";分配一片連續的位元組儲存單元並初始化

space 分配一片連續的儲存區域並初始化為0,表示式的值為要分配的位元組數

語法格式:

標號 space 表示式

示例**如下:

dataspace space 100;分配連續100位元組的儲存單元並初始化為0

map 定義乙個結構化記憶體表的首位址

語法格式:

map 表示式

示例**如下:

map 0x100,r0;定義結構化記憶體表首位址為0x100+r0

filed  定義乙個結構化記憶體表中的資料域

語法格式:

標號  filed 表示式

示例**如下:

map 0x0100;定義結構化記憶體表首位址的值為0x100

a filed 16;定義a的長度為16位元組,位置為0x100

b filed 32;定義b的長度為32位元組,位置為0x110

c filed 256;定義c的長度為256位元組,位置為0x130

彙編控制偽指令

if else endif

語法格式:

if 邏輯表示式

指令序列1

else

指令序列2

endif

示列**如下:

gbll test;

if test=true

指令序列1

else 

指令序列2

endif

while wend

語法格式:

while 邏輯表示式

指令序列

wend

示例**如下:

gbla counter;宣告乙個全域性數學變數

counter seta 3;賦值

while counter<10

指令序列

wend

macro mend

mexit

巨集指令其它偽指令

area 定義乙個**段或資料段

語法格式:

area 段名 屬性1,屬性2

常用屬性:

code:定義**段,預設為readonly

date:定義資料段,預設為readwirte

readonly:唯讀

readwrite:可讀可寫

align:對齊方式  語法格式:align }

示例**如下:

area init,code,readonly;定義乙個名為init的**段,屬性為唯讀

area init,code,readonly,alien=3;指定後面的指令為8位元組對齊

code16(code32)通知編譯器,其後的指令序列為16位的thumb指令

entry 指定匯程式設計序的入口點

示例**如下:

area init,code,readonly

entry;指定應用程式的入口點

equ 為程式中的常量,標號等定義乙個等效的字元名稱(類似於define)

語法格式:

名稱 equ 表示式

示例**如下:

test equ 50;定義標號test的值為 50

addr equ 0x55,code32;定義addr 的值為0x55,且該處為32位的arm指令

export 在程式中宣告乙個全域性的標號,該標號可在其他的檔案中引用 

語法格式:

export 標號

示例**:

area init,code,readonly

export stest;宣告乙個可全域性引用的標號stest 

ARM彙編偽指令

global,local,set,equ global 使得符號對聯結器可見,變為對整個工程可用的全域性變數,通俗講就是定義全域性變數 eg global symbol local set 給乙個全域性變數或區域性變數賦值,和.equ的功能一樣 eg set symbol expr set star...

ARM彙編偽指令

資料定義偽指令 彙編控制偽操作 雜項.global,local,set,equ 使得符號對聯結器可見,變為對整個工程可用的全域性變數,通俗講就是定義全域性變數 eg global symbol 給乙個全域性變數或區域性變數賦值,和.equ的功能一樣 eg set symbol expr set st...

ARM彙編偽指令

用來做注釋。可以在行首也可以在 後面同一行直接跟,和c語言中 類似 做注釋,一般放在行首,表示這一行都是注釋而不是 以冒號結尾的是標號 點號在gnu彙編中表示當前指令的位址 立即數前面要加 或 表示這是個立即數 global start 給 start外部鏈結屬性 section text 指定當前...