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

          新聞中心

          ARM匯編程序基本知識(shí)

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏

          如:

          Str DCB “this is a test” ;分配一片連續(xù)的字節(jié)存儲(chǔ)單元并初始化

          Data DCW 1,2,3 ;分配一片連續(xù)的半字存儲(chǔ)單元并初始化

          Data DCD 4,5,6 ; 分配一片連續(xù)的字存儲(chǔ)單元并初始化

          Fdata DCFS 2e5,-5e-7 ;分配一片連續(xù)的字存儲(chǔ)單元并初始化為指定的單精度數(shù)

          Dspce SPACE 100 ;分配連續(xù)100字節(jié)的存儲(chǔ)單元并初始化為0

          控制偽操作

          IF ELSE ENDIF

          WHILE WEND

          MACRO MEND;MEXIT

          信息報(bào)告?zhèn)尾僮?p>ASSERT

          INFO

          OPT

          其他常用偽操作

          AREA ALIGN CODE16/CODE32 ENTRY END EQU EXPORT(GLOBLE) IMPORT EXTERN GET(INCLUDE) INCBIN RN ROUT

          AREA

          格式:AREA 段名 屬性1,屬性2,……

          常用屬性有:

          CODE :用于定義代碼段,默認(rèn)為READONLY

          DATA: 定義數(shù)據(jù)段,默認(rèn)為READWRITE

          READONLY: 指定本段為只讀

          READWRITE: 指定本段為讀寫(xiě)

          ALIGN: 使用方式為ALIGN表達(dá)式。在默認(rèn)時(shí),ELF(可執(zhí)行鏈接文件)的代碼段和數(shù)據(jù)段是按字對(duì)齊的。表達(dá)式的取值范圍為0~31,相應(yīng)的對(duì)齊方式為2次冪。

          COMMON: 定義一個(gè)通用的段,不包含任何用戶的代碼和數(shù)據(jù)。各源文件中同名的COMMON段共享同一段存儲(chǔ)單元。

          ALIGN

          格式:ALIGN [表達(dá)式[,偏移量]]

          ALIGN偽操作可通過(guò)添加填充字節(jié)的方式,使當(dāng)前位置滿足一定的對(duì)齊方式。

          例:

          ……

          DATA1DCB “STRIN” ; 定義后不能保證地址對(duì)齊

          ALIGN 4 ;確保當(dāng)前地址是4字節(jié)對(duì)齊

          ……

          例:

          AREA Cache, CODE, ALIGN=3 ; 指定本代碼段的指令時(shí)23=8字節(jié)對(duì)齊的

          ……

          MOV PC, LR ;程序跳轉(zhuǎn)后是4字節(jié)對(duì)齊,返回后需要繼續(xù)8字節(jié)對(duì)齊

          ALIGN 8 ;當(dāng)前位置再次滿足8字節(jié)對(duì)齊

          ……

          注意上面,在AREA中使用和單獨(dú)使用ALIGN的區(qū)別,格式和計(jì)算方式不一樣。

          ENTRY

          用于指定匯編程序的入口點(diǎn)。一個(gè)程序可以由一個(gè)或者多個(gè)源文件組成,一個(gè)源文件由一個(gè)或者多個(gè)程序段組成。一個(gè)程序至少有一個(gè)入口點(diǎn),也可有多個(gè)入口點(diǎn),但是在一個(gè)源文件中,最多只能有一個(gè)ENTRY。當(dāng)有多個(gè)ENTRY時(shí),程序的真正入口點(diǎn)由鏈接器指定。編譯程序在編譯連接時(shí)根據(jù)程序入口點(diǎn)進(jìn)行連接。在只有一個(gè)入口點(diǎn)時(shí),編譯程序會(huì)把這個(gè)入口點(diǎn)的地址定義為系統(tǒng)復(fù)位后的程序起始點(diǎn)。

          END

          在源文件結(jié)束處寫(xiě)上,表示源程序的結(jié)尾。

          EXPORT

          格式:EXPORT 標(biāo)號(hào) [,WEAK]

          聲明一個(gè)全局標(biāo)號(hào),該標(biāo)號(hào)在其他文件中可引用。WEAK表示碰上其他同名標(biāo)號(hào)時(shí),其他標(biāo)號(hào)優(yōu)先。

          AREA INIT, CODE, READONLY

          EXPORT Stest

          ……

          END

          IMPORT

          格式:IMPORT 標(biāo)號(hào) [,WEAK]

          表示該引用的標(biāo)號(hào)在其他源文件中,但要在當(dāng)前文件中引用。WEAK表示找不到該標(biāo)號(hào)時(shí),也不報(bào)錯(cuò),一般講該標(biāo)號(hào)值置為0,如果是B或者BL使用到,則該指令置為NOP。

          與EXTERN的不同的是,無(wú)論當(dāng)前文件是否引用該標(biāo)號(hào),該標(biāo)號(hào)都被加入當(dāng)前源文件的符號(hào)表中。

          AREA INIT, CODE, READONLY

          IMPORT MAIN;

          ……

          END

          EXTERN

          和IMPORT一樣,不同之處在于,如果當(dāng)前文件沒(méi)有引用該標(biāo)號(hào),該標(biāo)號(hào)不會(huì)加入當(dāng)前源文件的符號(hào)表中。

          GET(或INCLUDE)

          將一個(gè)源文件包含到當(dāng)前的源文件中,并在當(dāng)前位置進(jìn)行編譯。

          AREA INIT, CODE, READONLY

          GET a1.s

          GET C:/a2.s

          ……

          END

          INCBIN

          將一個(gè)目標(biāo)文件或者數(shù)據(jù)文件包含到當(dāng)前,文件內(nèi)容被原封不動(dòng)的放在當(dāng)前位置,編譯器不對(duì)文件內(nèi)容進(jìn)行編譯。

          AREA INIT, CODE, READONLY

          GET a1.s ; 包含a1.s并且對(duì)a1.s進(jìn)行編譯

          INCBIN C:/d.txt ; 包含d.txt,不對(duì)內(nèi)容進(jìn)行編譯

          GET a2.s ; 包含a2.s,并對(duì)內(nèi)容進(jìn)行編譯

          END

          RN

          給一個(gè)寄存器定義一個(gè)別名。

          Temp RN, R0 ; 將R0定義一個(gè)別名 Temp


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: ARM匯編程序基本知

          評(píng)論


          技術(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); })();