資源描述:
《ARM嵌入式系統(tǒng)教程教學(xué)課件作者張石第4章節(jié)課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、ARM嵌入式系統(tǒng)第4章ARM匯編程序設(shè)計(jì)ARM程序設(shè)計(jì)基礎(chǔ)偽操作(derective)偽指令(Pseudo-instruction)ARM匯編語(yǔ)言語(yǔ)句格式ARM匯編語(yǔ)言的程序格式相關(guān)的程序示例偽操作符號(hào)定義偽操作數(shù)據(jù)定義偽操作匯編控制偽操作其他偽操作符號(hào)定義偽操作定義全局變量:GBLA、GBLL和GBLS定義局部變量:LCLA、LCLL和LCLS變量賦值:SETA、SETL、SETS通用寄存器列表定義名稱(chēng):RLISTGBLA、GBLL和GBLSGBLA、GBLL和GBLS語(yǔ)法格式:GBLA(GBLL或GB
2、LS)全局變量名GBLAobjectsize;全局的數(shù)字變量objectsize,為0ObjectsizeSETA0xff;將該變量賦值為0xffSPACEobjectsize;引用該變量GBLLstatusB;全局的邏輯變量statusB,為{False}statusBSETL{TRUE};將該變量賦值為真全局:作用范圍為包含該變量的源程序LCLA、LCLL和LCLSLCLA、LCLL和LCLS語(yǔ)法格式:LCLA(LCLL或LCLS)局部變量名MACRO;聲明一個(gè)宏$labelmessage$a;宏的原型
3、LCLSerr;聲明一個(gè)局部變量err,為空串errSETS“errorno:”;向該變量賦值$label;代碼INFO0,err:CC::STR:$a;使用該串變量MEND;宏定義結(jié)束局部:作用范圍為包含該局部變量的宏代碼的一個(gè)實(shí)例SETA、SETL、SETSSETA、SETL和SETS語(yǔ)法格式:變量名SETA(SETL或SETS)表達(dá)式在向變量賦值前,必須先聲明該變量RLISTRLIST語(yǔ)法格式:名稱(chēng)RLIST{寄存器列表}ContextRLIST{r0-r6,r8,r10-r12,r15};將寄存器列
4、表名稱(chēng)定義為Context,可在ARM指令LDM/STM中通過(guò)該名稱(chēng)訪問(wèn)寄存器列表。排列順序無(wú)關(guān)數(shù)據(jù)定義偽操作DCBDCW(DCWU)DCD(DCDU)DCFD(DCFDU)DCFS(DCFSU)SPACEMAPFIELDDCB語(yǔ)法格式:{標(biāo)號(hào)}DCB表達(dá)式表達(dá)式取值范圍:-128~255的數(shù)字或字符串。DCB:“=”NullstringDCB“Nullstring”,0;構(gòu)造一個(gè)以0結(jié)尾的字符串DCW(或DCWU)語(yǔ)法格式:{標(biāo)號(hào)}DCW(或DCWU)表達(dá)式DCW:半字對(duì)齊DCWU:不嚴(yán)格半字對(duì)齊。表達(dá)式
5、取值范圍:-32768~65535data1DCW-128,num1+8;num1必須是已經(jīng)定義過(guò)的DCD(或DCDU)語(yǔ)法格式:{標(biāo)號(hào)}DCD(或DCDU)表達(dá)式DCD:“&”DCD:字對(duì)齊DCDU:不嚴(yán)格字對(duì)齊。data1DCD1,5,20;其值為1,5,20data2DCDmemaddr+4;分配一個(gè)字單元,其值為程序中標(biāo)號(hào)memaddr加4個(gè)字節(jié)DCFD(或DCFDU)語(yǔ)法格式:{標(biāo)號(hào)}DCFD(或DCFDU)表達(dá)式每個(gè)雙精度的浮點(diǎn)數(shù)占據(jù)兩個(gè)字單元。DCFD:字對(duì)齊DCFDU:不嚴(yán)格字對(duì)齊DCFD1
6、E308,-4E-100DCFDU100000,-.1,3.1E26DCFS(或DCFSU)語(yǔ)法格式:{標(biāo)號(hào)}DCFS(或DCFSU)表達(dá)式每個(gè)單精度的浮點(diǎn)數(shù)占據(jù)一個(gè)字單元。DCFS:字對(duì)齊DCFSU:不嚴(yán)格字對(duì)齊DCFS1E3,-4E-9DCFSU1.0,-.1,3.1E6SPACE語(yǔ)法格式:{標(biāo)號(hào)}SPACE表達(dá)式分配一片連續(xù)的存儲(chǔ)區(qū)域并初始化為0。其中,表達(dá)式為要分配的字節(jié)數(shù)。SPACE:“%”DatastrucSPACE280;分配連續(xù)280字節(jié)的存儲(chǔ)單元并初始化為0MAP語(yǔ)法格式:MAP表達(dá)式{,
7、基址寄存器}用于定義一個(gè)結(jié)構(gòu)化的內(nèi)存表的首地址。MAP:“^”通常與FIELD偽指令配合使用來(lái)定義結(jié)構(gòu)化的內(nèi)存表。MAP0x80,R9;定義結(jié)構(gòu)化內(nèi)存表首地址的值為0x80+R9FILED語(yǔ)法格式:{標(biāo)號(hào)}FIELD表達(dá)式定義一個(gè)結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域。FILED也可用“#”代替。MAP0;定義結(jié)構(gòu)化內(nèi)存表首地址為0constaFIELD4;consta的長(zhǎng)度為4字節(jié),相對(duì)位置為0constbFIELD4;constb的長(zhǎng)度為4字節(jié),相對(duì)位置為4xFIELD8;x的長(zhǎng)度為8字節(jié),相對(duì)位置為0x8yFIELD
8、8;y的長(zhǎng)度為8字節(jié),相對(duì)位置為0x10stringFIELD256;y的長(zhǎng)度為256字節(jié),相對(duì)位置為0x18MOVR9,#4096LDRR5,[R9,constb];將內(nèi)存表中數(shù)據(jù)域constb讀取到R5中匯編控制偽操作匯編控制(AssemblyControl)偽操作用于控制匯編程序的執(zhí)行流程,常用的匯編控制偽操作包括以下幾條:IF、ELSE、ENDIFWHILE、WENDMACRO、MENDMEXITIF、E