環球快訊:嵌入式:ARM符號定義偽操作詳解

2022-12-28 14:09:58 來源:51CTO博客

ARM匯編語言的偽操作、宏指令與偽指令

ARM匯編語言源程序中語句一般由指令、偽操作、宏指令和偽指令組成偽操作是ARM匯編語言程序里的一些特殊指令助記符,它的作用主要是為完成匯編程序做各種準備工作,在源程序進行匯編時由匯編程序處理,而不是在計算機運行期間由機器執行。


(資料圖片僅供參考)

宏指令是一段獨立的程序代碼,可以插在源程序中,它通過偽操作來定義。宏在被使用之前必須提前定義好,宏之間可以互相調用,也可以自己遞歸調用。通過直接書寫宏名來使用宏,并根據宏指令的格式設置相應的輸入參數。宏定義本身不會產生代碼,只是在調用它時把宏體插入到源程序中。

偽指令也是ARM匯編語言程序里的特殊指令助記符,也不在處理器運行期間由機器執行,它們在匯編時將被合適的機器指令代替成ARM或Thumb指令,從而實現真正指令操作。

兩種編譯模式的集成開發環境IDE介紹

ADS/SDT IDE開發環境

它由ARM公司開發,使用了CodeWarrior公司的編譯器;

集成了GNU開發工具的IDE開發環境

它由GNU的匯編器as、交叉編譯器gcc、和鏈接器ld等組成。

ADS編譯環境下的ARM偽操作和宏指令

ADS編譯環境下的偽操作有如下幾種:

符號定義(Symbol Definition)偽操作數據定義(Data Definition)偽操作匯編控制(Assembly Control)偽操作框架描述(Frame Description)偽操作信息報告(Reporting)偽操作其他(Miscellaneous)偽操作

符號定義偽操作

全局變量定義偽指令GBLA、GBLL、GBLS局部變量定義偽指令LCLA、LCLL、LCLS變量賦值偽指令SETA、SETL、SETS寄存器列表定義偽指令RLIST

GBLA,GBLL及GBLS

GBLA,GBLL及GBLS偽操作用于聲明一個ARM程序中的全局變量并在默認情況下將其初始化。

GBLA偽操作聲明一個全局的算術變量,并將其初始化成0

GBLL偽操作聲明一個全局的邏輯變量,并將其初始化成{FALSE}

GBLS偽操作聲明一個全局的字符串變量,并將其初始化成空串“”

語法格式
  Variable

? 其中:????是GBLA,GBLL或GBLS 3種偽操作之一;Variable是全局變量的名稱。在其作用范圍內必須惟一,即同一個變量名只能在作用范圍內出現一次。

使用示例
GBLA  A1  ;定義一個全局的數值變量,變量名為A1 A1    SETA  0x0F ;將該變量賦值為0x0F            GBLL  A2   ;定義一個全局的邏輯變量,變量名為A2 A2    SETL  {TRUE} ;將該變量賦值為真        GBLS  A3 ;定義一個全局的字符串變量,變量名為A3 A3    SETS “Testing”  ;將該變量賦值為“Testing”

LCLA,LCLL及LCLS

LCLA,LCLL及LCLS偽操作用于聲明一個ARM程序中的局部變量,并在默認情況下將其初始化。

LCLA偽操作聲明一個局部的算術變量,并將其初始化成0。

LCLL偽操作聲明一個局部的邏輯變量,并將其初始化成{FALSE}

LCLS偽操作聲明一個局部的串變量,并將其初始化成空串“”

語法格式
  Variable

其中:

????是LCLA,LCLL或LCLS 3種偽操作之一;Variable是局部變量的名稱。在其作用范圍內必須唯一,即同一個變量名只能在作用范圍內出現一次。

使用示例
LCLA   Test4 ;聲明一個局部的數值變量,變量名為Test4  Test4  SETA  0xaa  ;將該變量賦值為0xaa  LCLL   Test5     ;聲明一個局部的邏輯變量,變量名為Test5  Test5  SETL {TRUE} ;將該變量賦值為真  LCLS   Test6  ;定義一個局部的字符串變量,變量名為Test6  Test6  SETS  “Testing” ;將該變量賦值為“Testing”

SETA,SETL及SETS

SETA,SETL及SETS偽操作用于給一個ARM程序中的全局或局部變量賦值。

SETA偽操作給一個全局或局部算術變量賦值

SETL偽操作給一個全局或局部邏輯變量賦值

SETS偽操作給一個全局或局部字符串變量賦值

語法格式
  Variable  expr

其中:

????是SETA,SETL或SETS 3種偽操作之一;Variable是使用GBLA,GBLL,GBLS,LCLA,LCLL或LCLS定義的變量的名稱,在其作用范圍內必須唯一;expr為表達式,即賦予變量的值。

寄存器列表定義偽指令RLIST

格式:名稱RLIST {通用寄存器列表}

功能:用于對一個通用寄存器列表定義名稱,

reglist RLIST {R0-R3, R8, R12}    …  STMFD SP!, reglist      ; 將列表reglist存儲到堆棧中    …  LDMIA R4, reglist     ; 將列表reglist加載到R4中

參考文獻:

孟祥蓮.嵌入式系統原理及應用教程(第2版)[M].北京:清華大學出版社,2017.

標簽: 變量賦值 邏輯變量 匯編語言

上一篇:安裝 Azure CL 并生成 service principal 文件
下一篇:今亮點!vector打印鋸齒矩陣