ARM匯編偽指令(1)
ARM匯編程序由機器指令、偽指令和宏指令組成。
本文引用地址:http://m.butianyuan.cn/article/201611/319390.htm1,符號定義偽指令
符號定義偽指令用于定義ARM匯編程序的變量、對變量進行賦值、定義寄存器名稱。
全局變量聲明: GBLA,GBLL,GBLS
局部變量聲明: LCLA,LCLL,LCLS
變量賦值: SETA,SETL,SETS
為一個通用寄存器列表定義名稱: RLIST
為一個協(xié)處理器的寄存器定義名稱: CN
為一個協(xié)處理器定義名稱: CP
為一個VFP寄存器定義名稱: DN,SN
為一個FPA浮點寄存器定義名稱: FN
1)GBLA,GBLL,GBLS
全局變量聲明,作用范圍是包含該變量的源程序。
GBLA variable ;聲明全局算術變量
GBLL variable ;聲明全局邏輯變量
GBLS variable ;聲明全局字符串變量
示例:
GBLL codedbg
codedbg SETL {TRUE} ;設置變量為TRUE
2)LCLA,LCLL,LCLS
局部變量聲明,用于宏定義的體中。
示例:
MACRO
SENDDAT $dat
LCLA bitno
...
bitno SETA 8
...
MEND
3),SETA,SETL,SETS
變量賦值偽指令。
示例:
GBLS ErrStr
...
ErrStr SETS "No,semaphone"
...
4),RLIST
為通用寄存器列表定義名稱。
示例:
LoReg RLIST {R0-R7}
...
STMFD SP!,LoReg
5),CN
定義協(xié)處理器的寄存器。
MemSet CN 1
6),CP
定義協(xié)處理器。
DivRun CN 5
7),DN,SN
定義VFP的寄存器。
cdn DN 1 ;將VFP雙精度寄存器1的名稱定義為cdn
rex SN 3 ;將VFP單精度寄存器3的名稱定義為rex
8),FN
定義FPA浮點寄存器。
ibq FN 1 ;將浮點寄存器1的名稱定義為ibq
2,數(shù)據(jù)定義偽指令
數(shù)據(jù)定義偽指令用于數(shù)據(jù)表定義、文字池定義、數(shù)據(jù)空間分配等。
1)LTORG
用于聲明一個文字池。
2)MAP
用于定義一個結構化的內(nèi)存表的首地址。
3)FIELD
定義結構化內(nèi)存表中的數(shù)據(jù)域。
MAP,FIELD僅僅定義數(shù)據(jù)結構,并不實際分配內(nèi)存單元。
示例:
MAP 0x40003000 ;內(nèi)存表的首地址為0x40003000
count1 FIELD 4
count2 FIELD 4
LDR R1,count1 ;R1 <- [0x40003000+0x00]
STR R1,count2 ;將R1的值傳送到[0x40003000+0x04]
4)SPACE
用于分配一塊內(nèi)存單元,并用0初始化。
5)DCB
分配一段字節(jié)內(nèi)存單元。
6)DCD,DCDU
DCD和DCDU用于分配一段字內(nèi)存單元,但前者要字對齊,后者不需要。
7)DCDO
8)DCFD,DCFDU
9)DCFS,DCFSU
10)DCI
11)DCQ,DCQU
12)DCW,DCWU
3,報告?zhèn)沃噶?br />報告?zhèn)沃噶钣糜趨R編報告指示。
1)ASSERT
用于斷言錯誤。
ASSERT Top<>Temp ;斷言Top不等于Temp
2)INFO
3)OPT
4)TTL,SUBT
4,匯編控制偽指令
匯編控制偽指令用于條件匯編、宏定義、重復匯編控制等。
IF,ELSE,ENDIF---條件匯編控制
MACRO,MEND---宏定義
WHILE,WEND---重復匯編
5,雜項偽指令
段定義,入口點設置,包含文件,標號導出,引入聲明等。
ALIGN
AREA
CODE16和CODE32 指令集定義
END
ENTRY
EQU
EXPORT和GLORBAL 聲明一個符號可以被其他文件引用
IMPORT和EXTERN 聲明一個外部符號
GET和INCLUDE 包含文件
INCBIN
KEEP
NOFP
REQUIRE
PEQUIRE8和PRESERVE8 堆棧8字節(jié)對準
RN
ROUT
6,ARM偽指令
ADR,ADRL,LDR,NOP,LDFD,LDFS
評論