資源描述:
《arm匯編語言編程詳解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、ARM匯編語言編程詳解硅谷芯微嵌入式學(xué)院技術(shù)貢獻(xiàn)網(wǎng)址:www.threeway.cc4.1匯編語言使用匯編語言編寫程序,它的特點(diǎn)是程序執(zhí)行速度快,程序代碼生成量少,但匯編語言是一種不易學(xué)習(xí)的編程語言,并且可讀性較差,這種語言屬于低級語言。每一種匯編語言對應(yīng)每一款芯片,使用這種語言需要對硬件有深刻的了解。在通常情況下,可以使用匯編語言編寫驅(qū)動(dòng)程序、需要嚴(yán)格計(jì)算執(zhí)行時(shí)間的程序以及需要加速執(zhí)行的程序。?4.1.1ARM匯編程序的格式(1)先介紹一個(gè)例子來說明ARM匯編程序的格式。例1計(jì)算20+8,結(jié)果放入R0寄存器。AREABuf,DATA,READWRITE;聲明數(shù)據(jù)段BufCount
2、DCB20;定義一個(gè)字節(jié)單元CountAREAExample,CODE,READONLY;聲明代碼段ExampleENTRY;標(biāo)識程序入口CODE32;聲明32位ARM指令STARTLDRBR0,Count;R0=Count=20MOVR1,#8;R1=8ADDR0,R0,R1;R0=R0+R1BSTARTEND?4.1.1ARM匯編程序的格式(2)例1中定義了兩個(gè)段:數(shù)據(jù)段Buf和代碼段Example。數(shù)據(jù)段中定義了字節(jié)單元Count,其中Count用來保存一個(gè)被加數(shù);代碼段中包含了所有源程序代碼,程序中首先讀取Count字節(jié)單元的內(nèi)容,然后與立即數(shù)8相加,計(jì)算結(jié)果保存到R0中。
3、由例1可見,ARM匯編語言的源程序是分段的,由若干個(gè)段組成一個(gè)源程序。源程序的一般格式為:AREAname1,attr;聲明特定的段標(biāo)號語句1;語句...語句nAREAname2,attr標(biāo)號語句n+1...語句n+mEND;結(jié)束符?4.1.1ARM匯編程序的格式(3)每一個(gè)段都有一個(gè)名字,并且段名是唯一的。每個(gè)段以符號AREA作為段的開始,以碰到下一個(gè)符號AREA作為該段的結(jié)束。段都有自己的屬性,如是代碼段(CODE)還是數(shù)據(jù)段(DATA),是只讀(READONLY)還是可讀寫(READWRITE)?這些屬性可以在attr欄中設(shè)定。注意:符號AREA和END都不能頂格寫,只有標(biāo)號
4、可以而且必須頂格寫。?4.1.1.1ARM匯編程序的書寫格式(1)ARM匯編源程序是由若干段組成的,而一個(gè)段又是由若干個(gè)語句行組成。語句就是完成一個(gè)動(dòng)作的說明。源程序中的語句可以分為以下兩種類型:■指令性語句:匯編程序會(huì)把指令性語句翻譯成機(jī)器代碼,然后利用這些機(jī)器代碼命令處理器執(zhí)行某些操作。如由MOV、ADD等指令構(gòu)造的語句?!鲋甘拘哉Z句:匯編程序并不把它們翻譯成機(jī)器代碼,只是用來指示、引導(dǎo)匯編程序在匯編時(shí)進(jìn)行一些操作。如由ENTRY、AREA等指令構(gòu)造的語句,我們也稱這些指令為偽指令。從例1可知,語句行的基本格式如下:[標(biāo)號]<指令><操作數(shù)>[;注釋]?4.1.1.1ARM匯編
5、程序的書寫格式(2)在一條語句中,[]號中的內(nèi)容是可選的。在書寫ARM匯編程序時(shí),需要注意以下3點(diǎn):■標(biāo)號必須在一行的頂格書寫,其后面不要加“:”,對于變量的設(shè)置、常量的定義,其標(biāo)識符必須在一行的頂格書寫;而所有指令均不能頂格書寫?!鰠R編器對標(biāo)識符大小寫敏感,書寫標(biāo)號及指令時(shí)字母大小寫要一致。在ARM匯編程序時(shí),一個(gè)ARM指令、偽指令、寄存器名可以全部為大寫字母,也可以全部為小寫字母,但不要大小寫混合使用。■注釋使用“;”。注釋內(nèi)容由“;”開始到此行結(jié)束,注釋可以在一行的頂格書寫。例2某一段錯(cuò)誤的匯編語言程序。?4.1.1.1ARM匯編程序的書寫格式(3)例2某一段錯(cuò)誤的匯編語言程
6、序。STARTMOVR0,#1;標(biāo)號START沒有頂格寫ABC:MOVR1,#2;標(biāo)號后不能帶:MOVR2,#3;指令不允許頂格書寫LOOPMovR2,#3;指令中大小寫混合Bloop;無法跳轉(zhuǎn)到loop標(biāo)號,只有LOOP標(biāo)號?4.1.1.2語句行的符號(1)任何一個(gè)匯編源程序都是由符號組成的。符號分為兩大類:指令助記符和用戶定義符。指令助記符包括ARM指令、偽指令等,這些符號都是預(yù)先定義好的,且具備專用的目的和功能;用戶定義符是由用戶在編寫匯編程序時(shí)自行定義的,只在本程序中有意義,不具備通用性。本節(jié)所講的符號特指用戶定義符,符號的命名需注意以下規(guī)則:■符號由大小寫字母、數(shù)字以及下
7、劃線組成?!龇柌荒芤詳?shù)字開頭(局部標(biāo)號除外)。■符號區(qū)分大小寫,且所有字符都是有意義的?!龇栐谄渥饔糜蚍秶鷥?nèi)必須是唯一的?!龇柌荒芘c系統(tǒng)內(nèi)部或系統(tǒng)預(yù)定義的符號同名?!龇柌灰灾噶钪浄?、偽指令同名。符號可以代表地址、數(shù)值、變量。當(dāng)符號代表地址時(shí)又稱為標(biāo)號,符號代表某個(gè)特定數(shù)值時(shí)又稱為符號常量,?4.1.1.2語句行的符號(2)符號代表變量時(shí)又稱為變量名。所以符號有3個(gè)用途:標(biāo)號、符號常量、變量名。(1)標(biāo)號:標(biāo)號代表一個(gè)地址,段內(nèi)標(biāo)號的地址在匯編時(shí)確定,而段外