《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 解決方案 > ARM匯編偽指令介紹1

ARM匯編偽指令介紹1

2017-06-22
關(guān)鍵詞: 匯編語(yǔ)言

  在 ARM 匯編語(yǔ)言程序里,,有一些特殊指令助記符,,這些助記符與指令系統(tǒng)的助記符不同,,沒有相對(duì)應(yīng)的操作碼,,通常稱這些特殊指令助記符為偽指令,,他們所完成的操作稱為偽操作,。偽指令在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,,這些偽指令僅在匯編過程中起作用,,一旦匯編結(jié)束,,偽指令的使命就完成。     
 
    在 ARM 的匯編程序中,,有如下幾種偽指令:符號(hào)定義偽指令,、數(shù)據(jù)定義偽指令、匯編控制偽指令,、宏指令以及其他偽指令,。

    符號(hào)定義( Symbol Definition )偽指令    
    符號(hào)定義偽指令用于定義 ARM 匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作,。    
    常見的符號(hào)定義偽指令有如下幾種:    
    — 用于定義全局變量的 GBLA ,、 GBLL 和 GBLS ,。    
    — 用于定義局部變量的 LCLA 、 LCLL 和 LCLS ,。    
    — 用于對(duì)變量賦值的 SETA ,、 SETL 、 SETS ,。    
    — 為通用寄存器列表定義名稱的 RLIST ,。    
    1、 GBLA,、GBLL 和GBLS    
    語(yǔ)法格式:    
    GBLA ( GBLL 或 GBLS ) 全局變量名    
    GBLA ,、 GBLL 和 GBLS 偽指令用于定義一個(gè) ARM 程序中的全局變量,并將其初始化,。其中:    
    GBLA 偽指令用于定義一個(gè)全局的數(shù)字變量,,并初始化為 0 ;    
    GBLL 偽指令用于定義一個(gè)全局的邏輯變量,,并初始化為 F (假),;    
    GBLS 偽指令用于定義一個(gè)全局的字符串變量,并初始化為空,;    
    由于以上三條偽指令用于定義全局變量,,因此在整個(gè)程序范圍內(nèi)變量名必須唯一。    
    使用示例:    
    GBLA Test1 ,;定義一個(gè)全局的數(shù)字變量,,變量名為 Test1    
    Test1 SETA 0xaa ;將該變量賦值為 0xaa    
    GBLL Test2 ,;定義一個(gè)全局的邏輯變量,,變量名為 Test2    
    Test2 SETL {TRUE} ;將該變量賦值為真    
    GBLS Test3 ,;定義一個(gè)全局的字符串變量,,變量名為 Test3    
    Test3 SETS “ Testing ” ;將該變量賦值為 “ Testing ”  
  
    2,、 LCLA,、LCLL 和LCLS    
    語(yǔ)法格式:    
    LCLA ( LCLL 或 LCLS ) 局部變量名    
    LCLA 、 LCLL 和 LCLS 偽指令用于定義一個(gè) ARM 程序中的局部變量,,并將其初始化,。其中:    
    LCLA 偽指令用于定義一個(gè)局部的數(shù)字變量,并初始化為 0 ,;    
    LCLL 偽指令用于定義一個(gè)局部的邏輯變量,,并初始化為 F (假);    
    LCLS 偽指令用于定義一個(gè)局部的字符串變量,并初始化為空,;    
    以上三條偽指令用于聲明局部變量,,在其作用范圍內(nèi)變量名必須唯一。    
    使用示例:    
    LCLA Test4 ,;聲明一個(gè)局部的數(shù)字變量,,變量名為 Test4    
    Test3 SETA 0xaa ;將該變量賦值為 0xaa    
    LCLL Test5 ,;聲明一個(gè)局部的邏輯變量,,變量名為 Test5    
    Test4 SETL {TRUE} ;將該變量賦值為真    
    LCLS Test6 ,;定義一個(gè)局部的字符串變量,,變量名為 Test6    
    Test6 SETS “ Testing ” ;將該變量賦值為 “ Testing ”   

 3,、 SETA,、SETL 和SETS    
    語(yǔ)法格式:    
    變量名 SETA ( SETL 或 SETS ) 表達(dá)式    
    偽指令 SETA ,、 SETL ,、 SETS 用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。    
    SETA 偽指令用于給一個(gè)數(shù)學(xué)變量賦值,;    
    SETL 偽指令用于給一個(gè)邏輯變量賦值,;    
    SETS 偽指令用于給一個(gè)字符串變量賦值;    
    其中,,變量名為已經(jīng)定義過的全局變量或局部變量,,表達(dá)式為將要賦給變量的值。    
    使用示例:    
    LCLA Test3 ,;聲明一個(gè)局部的數(shù)字變量,,變量名為 Test3    
    Test3 SETA 0xaa ;將該變量賦值為 0xaa    
    LCLL Test4 ,;聲明一個(gè)局部的邏輯變量,,變量名為 Test4    
    Test4 SETL {TRUE} ;將該變量賦值為真    

    4 ,、 RLIST    
    語(yǔ)法格式:    
    名稱 RLIST { 寄存器列表 }    
    RLIST 偽指令可用于對(duì)一個(gè)通用寄存器列表定義名稱,,使用該偽指令定義的名稱可在 ARM 指令 LDM/STM 中使用。在 LDM/STM 指令中,,列表中的寄存器訪問次序?yàn)楦鶕?jù)寄存器的編號(hào)由低到高,,而與列表中的寄存器排列次序無(wú)關(guān)。    
    使用示例:    
    RegList RLIST {R0-R5 ,, R8 ,, R10} ;將寄存器列表名稱定義為 RegList ,可在 ARM 指令 LDM/STM中通過該名稱訪問寄存器列表,。   

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]