<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ARM匯編偽指令(1)

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏

          ARM匯編程序由機器指令、偽指令和宏指令組成。

          本文引用地址:http://www.ex-cimer.com/article/201611/319390.htm

          1,符號定義偽指令
          符號定義偽指令用于定義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 ;聲明全局算術(shù)變量
          GBLL variable ;聲明全局邏輯變量
          GBLS variable ;聲明全局字符串變量

          示例:
          GBLL codedbg;聲明一個全局邏輯變量
          codedbg SETL {TRUE} ;設(shè)置變量為TRUE

          2)LCLA,LCLL,LCLS
          局部變量聲明,用于宏定義的體中。

          示例:

          MACRO;聲明一個宏
          SENDDAT $dat;宏的原型
          LCLA bitno;聲明一個局部算術(shù)變量
          ...
          bitno SETA 8;設(shè)置變量值為8
          ...
          MEND

          3),SETA,SETL,SETS
          變量賦值偽指令。

          示例:

          GBLS ErrStr
          ...
          ErrStr SETS "No,semaphone"
          ...

          4),RLIST
          為通用寄存器列表定義名稱。

          示例:

          LoReg RLIST {R0-R7};定義寄存器列表LoReg
          ...
          STMFD SP!,LoReg;保存寄存器列表LoReg到堆棧

          5),CN
          定義協(xié)處理器的寄存器。

          MemSet CN 1;將協(xié)處理器的寄存器1定義為MemSet

          6),CP
          定義協(xié)處理器。

          DivRun CN 5;將協(xié)處理器5的名稱定義為DivRun

          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
          用于定義一個結(jié)構(gòu)化的內(nèi)存表的首地址。

          3)FIELD
          定義結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域。
          MAP,FIELD僅僅定義數(shù)據(jù)結(jié)構(gòu),并不實際分配內(nèi)存單元。

          示例:

          MAP 0x40003000 ;內(nèi)存表的首地址為0x40003000
          count1 FIELD 4;定義數(shù)據(jù)域count1,長度為4字節(jié)
          count2 FIELD 4;定義數(shù)據(jù)域count2,長度為4字節(jié)

          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,匯編控制偽指令
          匯編控制偽指令用于條件匯編、宏定義、重復(fù)匯編控制等。
          IF,ELSE,ENDIF---條件匯編控制
          MACRO,MEND---宏定義
          WHILE,WEND---重復(fù)匯編

          5,雜項偽指令
          段定義,入口點設(shè)置,包含文件,標(biāo)號導(dǎo)出,引入聲明等。

          ALIGN邊界對齊
          AREA段定義
          CODE16和CODE32 指令集定義
          END匯編結(jié)束
          ENTRY程序入口
          EQU常量定義
          EXPORT和GLORBAL 聲明一個符號可以被其他文件引用
          IMPORT和EXTERN 聲明一個外部符號
          GET和INCLUDE 包含文件
          INCBIN包含不被匯編的文件
          KEEP保留符號表中的局部符號
          NOFP禁止浮點指令
          REQUIRE指示兩段之間的依賴關(guān)系
          PEQUIRE8和PRESERVE8 堆棧8字節(jié)對準(zhǔn)
          RN給特定的寄存器命名
          ROUT標(biāo)記局部標(biāo)號使用范圍的界限

          6,ARM偽指令
          ADR,ADRL,LDR,NOP,LDFD,LDFS




          關(guān)鍵詞: ARM匯編偽指

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();