嵌入式原理及接口技術課件ch4-第2版-嵌入式系統(tǒng)原理及接口技術_第1頁
嵌入式原理及接口技術課件ch4-第2版-嵌入式系統(tǒng)原理及接口技術_第2頁
嵌入式原理及接口技術課件ch4-第2版-嵌入式系統(tǒng)原理及接口技術_第3頁
嵌入式原理及接口技術課件ch4-第2版-嵌入式系統(tǒng)原理及接口技術_第4頁
嵌入式原理及接口技術課件ch4-第2版-嵌入式系統(tǒng)原理及接口技術_第5頁
已閱讀5頁,還剩84頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本章重點:⑴ARM匯編器提供的匯編語言特性,包括行格式、預定義名和內建變量、偽指令、符號、指示符、表達式和操作符等,以及它們的使用;⑵ARM匯編語言編程基礎,包括調用子程序、條件執(zhí)行、裝入常數(shù)和地址到寄存器、裝入和存儲多個寄存器、多路分支等內容,以及對應的程序代碼。嵌入式系統(tǒng)原理及接口技術(第2版)14.1ARM匯編語言特性4.1.1行格式、預定義名和內建變量⒈行格式在ARM匯編語言模塊中,源代碼行的一般格式是:{symbol}{instruction|directive|pseudo_instruction}{;comment}也就是:{符號}{指令|指示符|偽指令}{;注釋}嵌入式系統(tǒng)原理及接口技術(第2版)2

上述行格式中用大括號括起來的三部分是可選的。如果一行中沒有symbol,指令|指示符|偽指令不能從第1列位置開始,指令|指示符|偽指令前面必須放置空格或Tab(制表符)字符。嵌入式系統(tǒng)原理及接口技術(第2版)3

每一條指令的助記符可以使用全部大寫或全部小寫字符,但不能在同一條指令的助記符中大、小寫混用。指示符必須大寫。指令中每一個寄存器名能夠全部大寫或全部小寫,但不能大、小寫混用。行格式中symbol通常是標號(label),在指令或偽指令前它總是標號,在某些指示符前它是表示變量或常量的符號(symbol)。行格式中symbol必須從第一列開始,不能含任何如空格或Tab的字符,詳見本節(jié)符號命名規(guī)則部分。嵌入式系統(tǒng)原理及接口技術(第2版)4

⒉預定義寄存器和協(xié)處理器名⑴預定義寄存器名⑵預定義程序狀態(tài)寄存器名⑶預定義浮點寄存器名⑷預定義協(xié)處理器名和協(xié)處理器寄存器名⒊內建變量內建變量(builtinvariables)見教材表4.1,它們是由ARM匯編器定義過的。內建變量不能用SETA、SETL或SETS指示符設置,它們能被用在表達式或條件中,如:

IF{ENDIAN}=“big”嵌入式系統(tǒng)原理及接口技術(第2版)5

4.1.2ARM偽指令與Thumb偽指令ARM匯編器支持ARM偽指令和Thumb偽指令,在匯編時把它們翻譯成適當?shù)腁RM或Thumb指令組合。全部ARM和Thumb偽指令見教材表4-2。Thumb偽指令在表中用(Thumb)標出。雖然表4-2中Thumb偽指令ADR、LDR和NOP與ARM偽指令ADR、LDR和NOP格式完全相同,但相同的偽指令出現(xiàn)在程序中Thumb代碼區(qū),匯編器識別為Thumb偽指令;出現(xiàn)在ARM代碼區(qū)匯編器識別為ARM偽指令。嵌入式系統(tǒng)原理及接口技術(第2版)6⒈ADRARM偽指令ADR偽指令裝入一個相對程序或相對寄存器的地址到一個寄存器。⑴格式

ADR{condition}register,expression嵌入式系統(tǒng)原理及接口技術(第2版)7

⑵使用使用中,ADR總是被匯編成一條指令。匯編器試圖產(chǎn)生一條ADD或SUB指令,裝入地址。如果不能用一條指令構造出地址,則產(chǎn)生錯誤信息,匯編失敗。如果expression是相對程序的,計算產(chǎn)生的地址必須與ADR偽指令在同一個代碼區(qū)域。⑶使用舉例Test1MOVr1,#0ADRr2,Test1;產(chǎn)生指令SUBr2,pc,#0xC嵌入式系統(tǒng)原理及接口技術(第2版)8⒉ADRLARM偽指令ADRL偽指令裝入一個相對程序或相對寄存器的地址到一個寄存器。與ADR偽指令功能相似,但ADRL比ADR能裝入更大的地址范圍,原因是ADRL產(chǎn)生兩條數(shù)據(jù)處理指令。⑴格式

ADRL{condition}register,expression嵌入式系統(tǒng)原理及接口技術(第2版)9

⑵使用使用中,ADRL總是被匯編成2條指令。如果匯編器不能以2條指令構造出地址,則產(chǎn)生錯誤信息,匯編失敗。如果expression是相對程序的,它必須計算產(chǎn)生一個與ADRL偽指令在同一個代碼區(qū)域的地址,否則在隨后的連接時,地址可能出了范圍。⑶使用舉例startMOVr0,#10ADRLr4,start+60000

;產(chǎn)生指令ADDr4,pc,#0xe800;ADDr4,r4,#0x254嵌入式系統(tǒng)原理及接口技術(第2版)103.LDRARM偽指令LDR偽指令裝入一個32位常數(shù)值或一個地址到一個寄存器。⑴格式LDR{condition}register,=[expression|label-expression]⑵使用使用LDR偽指令有兩個主要目的,一是當一個立即數(shù)的值由于超了范圍,不能用MOV和MVN指令裝入到一個寄存器時,用LDR偽指令產(chǎn)生一個文字池常數(shù);二是裝入一個相對程序或外部的地址到一個寄存器。嵌入式系統(tǒng)原理及接口技術(第2版)11⑶使用舉例LDRr0,=0x1ff;裝入0x1ff到r0LDRr1,=label;裝入label地址到r14.NOPARM偽指令對NOP偽指令,匯編器產(chǎn)生什么也不操作的ARM指令:MOVr0,r0。

⑴格式NOP嵌入式系統(tǒng)原理及接口技術(第2版)12

5.ADRThumb偽指令ADR偽指令裝入一個相對程序或相對寄存器的地址到一個寄存器。⑴格式ADRregister,expression⑵使用使用中,在Thumb狀態(tài),ADR只能產(chǎn)生字對齊的地址。要使用ALIGN指示符去確認expression是字對齊的。若表達式是相對程序的,必須計算產(chǎn)生一個與ADR偽指令在同一個代碼區(qū)域的地址。嵌入式系統(tǒng)原理及接口技術(第2版)13⑶使用舉例

ADRr3,testexml;產(chǎn)生指令ADDr3,pc,#nn;codeALIGNtestexm1DCW1,2,3,4嵌入式系統(tǒng)原理及接口技術(第2版)14

6.LDRThumb偽指令LDR偽指令裝入一個32位常數(shù)值或一個地址到一個低寄存器中。⑴格式LDRregister,=[expression|label-expression]⑵使用使用LDR偽指令有兩個主要目的,一是當一個立即數(shù)的值由于超出MOV指令的范圍,不能裝入一個寄存器時,產(chǎn)生文字池常數(shù);二是裝入一個相對程序或外部的地址到一個寄存器。⑶使用舉例LDRr0,=0x0ffe;裝入0x0ffe到r0LDRr1,=labeladdr;裝入labeladdr地址到r1嵌入式系統(tǒng)原理及接口技術(第2版)15

7.MOVThumb偽指令MOV偽指令傳送一個低寄存器的值到另一個低寄存器(r0-r7)。而MOV指令不能傳送一個低寄存器的值到另一個低寄存器。⑴格式MOVRd,Rs⑵使用在使用中,匯編器將MOV偽指令變成帶立即數(shù)的ADD指令,指令中立即數(shù)的值為0。⑶使用舉例MOVRd,Rs;產(chǎn)生指令ADDRd,Rs,#0嵌入式系統(tǒng)原理及接口技術(第2版)168.NOPThumb偽指令對NOP偽指令,匯編器產(chǎn)生什么也不操作的Thumb指令:MOVr8,r8。

⑴格式NOP嵌入式系統(tǒng)原理及接口技術(第2版)17

4.1.3符號(symbols)與指示符(directives)使用符號能夠代表變量、地址和數(shù)值常數(shù)。符號代表地址時,也稱為標號。⒈符號命名規(guī)則符號命名遵守以下規(guī)則:⑴在符號名中可以使用大寫字母、小寫字母、數(shù)字字符或下劃線字符。⑵除了局部標號外,不允許在符號名的第一個字符位置使用數(shù)字字符。⑶符號名中對大、小寫字母是敏感的。⑷在符號名中所有的字符是有意義的。嵌入式系統(tǒng)原理及接口技術(第2版)18

⑸在它們的作用范圍內,符號名必須是唯一的。⑹符號名必須不使用內建變量名、預定義寄存器名和預定義協(xié)處理器名。⑺符號名應該不使用與指令助記符或指示符相同的名字。⑻如果需要在符號名中使用更大范圍的字符,使用如下舉例的格式為符號名劃界線:|C$$code|其中兩邊的兩條豎線不是符號的一部分,只用于為符號名劃界線,它們之間不允許使用豎線、分號和換行符。嵌入式系統(tǒng)原理及接口技術(第2版)19⒉變量(variables)變量有三種類型:·

數(shù)值·

邏輯·

串變量的類型不能被改變,變量的值可以被改變。嵌入式系統(tǒng)原理及接口技術(第2版)20

⒊匯編時串變量的替換可以使用串變量作為匯編語言的一整行或一行的一部分。如果在某一位置使用的串變量帶有‘$’作為前綴,則匯編器用串變量的值替換串變量?!?’字符通知匯編器,在檢查一行的語法前替換源代碼行的串。使用‘.’標記變量名結束,如果變量名后有跟隨的字符,替換后跟隨在串變量的值后,⒋標號(labels)⑴相對程序的標號⑵相對寄存器的標號⑶絕對地址嵌入式系統(tǒng)原理及接口技術(第2版)21⒌局部標號(locallabels)局部標號使用0~99范圍內的一個數(shù),可以有選擇地在其后跟隨一個表示當前范圍的名字。局部標號用在指令中,指出分支的目標處。局部標號格式為:n{routname}嵌入式系統(tǒng)原理及接口技術(第2版)22

⒍常量常量由數(shù)值常量、串常量、布爾常量和字符常量組成。⑴數(shù)值常量數(shù)值常量在匯編語言中采用以下三種形式:·

十進制數(shù),例如234;·

十六進制數(shù),例如0x7b或0x7B;·n進制數(shù),格式為n_xxx,n是2~9之間的一個基數(shù),xxx是這個基數(shù)下的數(shù)值,例如8_375,表示基數(shù)為8(八進制數(shù)),數(shù)值為375。

⑵串常量

⑶布爾常量

⑷字符常量

嵌入式系統(tǒng)原理及接口技術(第2版)23

使用舉例:anumSETA3500;假定anum在以前聲明過addrDCD0x00ff;十六進制數(shù)DCD0x00FF;十六進制數(shù)DCD2_11000011;二進制數(shù)bnumSETA8_74007;假定bnum在以前聲明過,八進制數(shù)LDRr1,=‘A’;字符嵌入式系統(tǒng)原理及接口技術(第2版)247.指示符(directives)匯編器提供指示符用來支持:⑴定義數(shù)據(jù)結構和為數(shù)據(jù)分配空間;⑵文件分隔成邏輯上的一個或多個區(qū)域;⑶錯誤報告和匯編列表控制;⑷符號定義;⑸條件匯編和重復匯編,以及在一個文件中包含輔助文件。嵌入式系統(tǒng)原理及接口技術(第2版)254.1.4與代碼有關的指示符⒈AREA、ENTRY和END指示符使用程序舉例【例4.1】用ARM匯編語言編寫的匯編語言模塊舉例。(程序見教材)

①定義區(qū)域的AREA指示符②聲明匯編程序入口點的ENTRY指示符③應用程序執(zhí)行④應用程序終止⑤源程序結束的END指示符嵌入式系統(tǒng)原理及接口技術(第2版)26

CODE32、CODE16指示符使用程序舉例用于選擇指令集的CODE16和CODE32指示符⑴格式格式分別是:CODE16CODE32⑵使用在ARM狀態(tài)當使用BX指令分支到Thumb指令時,使用CODE16。CODE16放置在分支目標處代碼的前面。當從Thumb狀態(tài)分支到ARM指令時,使用CODE32。CODE32放置在分支目標處代碼的前面。嵌入式系統(tǒng)原理及接口技術(第2版)27

⑶使用舉例使用舉例1:這個例子給出如何從ARM指令分支到Thumb指令。AREAARMtoThumb,CODE,READONLY;這個區(qū)域開始于ARM狀態(tài)ADRr1,test1+1;裝入地址,設置最低位為1BXr1;分支并且改變指令集CODE16;跟隨指令為Thumb指令test1MOVr0,#20;Thumb指令嵌入式系統(tǒng)原理及接口技術(第2版)28【例4.2】(程序見教材)

嵌入式系統(tǒng)原理及接口技術(第2版)29

3.禁止浮點運算的NOFP指示符NOFP指示符表明在一個匯編語言源文件中不接受浮點指令。⑴格式NOFP⑵使用使用NOFP指示符確認在軟件或目標硬件不支持浮點指令的情況下,程序中沒有使用浮點指令。嵌入式系統(tǒng)原理及接口技術(第2版)30

4.定義局部標號使用范圍的ROUT指示符ROUT指示符標記局部標號使用范圍的界線。⑴格式{name}ROUT⑵使用在使用中,ROUT指示符限制了局部標號的使用范圍。這使得程序員容易避免偶然引用一個錯誤的標號這種情況的發(fā)生。如果不存在ROUT指示符,局部標號的使用范圍是整個AOF區(qū)域。如果存在ROUT指示符,局部標號的使用范圍在兩個ROUT之間。使用name選項用于保證每次引用正確的標號。如果標號名或引用標號名與ROUT指示符前面的名字不匹配,匯編器產(chǎn)生錯誤信息,匯編失敗。嵌入式系統(tǒng)原理及接口技術(第2版)31⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)32

4.1.5與數(shù)據(jù)定義有關的指示符⒈在代碼中使用數(shù)據(jù)的DATA指示符DATA指示符通知匯編器,這個標號是在代碼中的數(shù)據(jù)標號,這意味著標號是在代碼段中的數(shù)據(jù)的地址。⑴格式labelDATA⑵使用使用時,如果需要在Thumb代碼區(qū)域用到某一個數(shù)據(jù)定義指示符,如DCD、DCB和DCW,定義數(shù)據(jù)時,必須使用DATA指示符。嵌入式系統(tǒng)原理及接口技術(第2版)33⑶使用舉例AREAtest,CODEThumb_Code;code;codeMOVpc,lr

Thumb_DataDATADCB2,5,8嵌入式系統(tǒng)原理及接口技術(第2版)34

⒉分配存儲器字節(jié)的DCB指示符DCB也可以用=指示符代替。DCB指示符分配一個或多個存儲器中的字節(jié),并且定義初始運行時的存儲器內容。⑴格式{label}DCBexpression{,expression}…⑵使用如果需要在Thumb代碼中用DCB定義帶標號的數(shù)據(jù),必須使用DATA指示符。如果DCB后跟隨著指令,應該使用ALIGN指示符去確認指令存放是邊界對齊的。⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)35

⒊分配存儲器半字的DCW和DCWU指示符DCW指示符分配一個或多個存儲器中的半字,以2字節(jié)邊界對齊,定義初始運行時的存儲器內容。DCWU與DCW的區(qū)別是:DCWU不要求以2字節(jié)邊界對齊。⑴格式格式分別是:{label}DCWexpression{,expression}…{label}DCWUexpression{,expression}…嵌入式系統(tǒng)原理及接口技術(第2版)36⑵使用使用時,如果需要在Thumb代碼中用DCW(DCWU)定義一個帶標號的數(shù)據(jù),必須使用DATA指示符。如果DCW(DCWU)后跟隨著指令,要使用ALIGN指示符,確認指令是字邊界對齊的。⑶使用舉例(見參考書)嵌入式系統(tǒng)原理及接口技術(第2版)37

⒋分配存儲器字的DCD和DCDU指示符DCD也可以用

&指示符代替。DCD指示符分配1個或多個存儲器中的字,4字節(jié)邊界對齊,并且定義初始運行時的存儲器內容。DCDU與DCD的區(qū)別是:DCDU不要求4字節(jié)邊界對齊。⑴格式格式分別是:{label}DCDexpression{,expression}…{label}DCDUexpression{,expression}…嵌入式系統(tǒng)原理及接口技術(第2版)38

⑵使用使用時,如果需要在Thumb代碼中用DCD(DCDU)定義一個帶標號的數(shù)據(jù),必須使用DATA指示符。如果DCDU后面跟隨著代碼,需要使用ALIGN指示符,確認指令是字邊界對齊的。為了獲得4字節(jié)邊界對齊,如果需要,DCD指示符在第1個定義的字前,會插入最多3字節(jié)作為填充字節(jié)。DCDU不插入填充字節(jié)。⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)39

5.分配數(shù)據(jù)區(qū)并使其初值為0的SPACE指示符SPACE也可以用%指示符代替。%指示符保留存儲器的一塊內容設置為0的數(shù)據(jù)區(qū)。⑴格式{label}%numeric-expression⑵使用使用中,如果用%定義了標號的數(shù)據(jù)在Thumb代碼中,必須使用DATA指示符??梢允褂肁LIGN指示符去對齊跟在%指示符后的代碼的存放地址。嵌入式系統(tǒng)原理及接口技術(第2版)40⑶使用舉例AREATestData,DATA,READWRITEdata1%127;分配127字節(jié)內容為0的存儲區(qū)嵌入式系統(tǒng)原理及接口技術(第2版)41

6.邊界對齊的ALIGN指示符用ALIGN指示符在代碼中對齊當前的位置到確定的邊界。⑴格式ALIGN{expression{,offset-expression}}⑵使用在使用中,用ALIGN去確認代碼地址被正確地對齊。當需要時,可以使用ALIGN去確認Thumb代碼地址按字對齊。例如,ADRThumb偽指令只能裝入字對齊的地址。⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)42

7.聲明文字池的LTORG指示符LTORG指示符通知匯編器,立即匯編當前的文字池。⑴格式LTORG⑵使用由AREA指示符定義開始的每個區(qū)域,在代碼區(qū)域結尾處或匯編結尾處,即使不寫出LTORG,匯編器也執(zhí)行LTORG指示符。嵌入式系統(tǒng)原理及接口技術(第2版)43

使用LTORG確認在LDR、LDFD和LDFS偽指令范圍內,文字池被匯編。大一些的程序可能要求幾個文字池。放LTORG指示符應該在無條件分支或子程序返回指令之后,使得處理器不會試圖把常數(shù)當作指令去執(zhí)行。在文字池中,匯編器以字邊界對齊數(shù)據(jù)。⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)44

8.定義結構化內存表的MAP和FIELD指示符MAP也可以用^指示符代替。FIELD也可以用#指示符代替。MAP和FIELD指示符用于描述結構化內存表。嵌入式系統(tǒng)原理及接口技術(第2版)45

MAP指示符MAP指示符設置結構化內存表首地址在指定位置。結構化內存表定位計數(shù)器用@表示,被設置成相同地址。

⑴格式MAPexpression{,base-register}

⑵使用MAP指示符可以多次使用,定義多個結構化內存表。計數(shù)器在第一個MAP指示符被使用前設置為0。

⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)46

FIELD指示符FIELD指示符描述已經(jīng)由MAP定義的結構化內存表中的數(shù)據(jù)域。⑴格式{label}FIELDexpression⑵使用使用^指示符與#指示符的組合來描述結構化內存表。⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)47

4.1.6符號定義指示符⒈聲明并初始化全局變量的GBLA、GBLL和GBLS指示符GBLA指示符聲明并初始化一個全局算術變量,取值范圍與數(shù)值表達式相同。GBLL指示符聲明并初始化一個全局邏輯變量,取值范圍為{TRUE}或{FALSE}。GBLS指示符聲明并初始化一個全局串變量,取值范圍與串表達式相同。嵌入式系統(tǒng)原理及接口技術(第2版)48⑴格式格式分別是:GBLAvariable-nameGBLLvariable-nameGBLSvariable-name⑵使用⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)49

⒉聲明并初始化局部變量的LCLA、LCLL和LCLS指示符局部變量僅僅能在一個宏內聲明。LCLA指示符聲明并初始化一個局部算術變量,取值范圍與數(shù)值表達式相同。LCLL指示符聲明并初始化一個局部邏輯變量,取值范圍為{TRUE}或{FALSE}。LCLS指示符聲明并初始化一個局部串變量,取值范圍與串表達式相同。嵌入式系統(tǒng)原理及接口技術(第2版)50⑴格式格式分別是:LCLAvariable-nameLCLLvariable-nameLCLSvariable-name⑵使用⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)51

⒊設置變量值的SETA、SETL和SETS指示符SETA指示符設置局部或全局算術變量的值。SETL指示符設置局部或全局邏輯變量的值。SETS指示符設置局部或全局串變量的值。⑴格式格式分別是:variable-nameSETAexpressionvariable-nameSETLexpressionvariable-nameSETSexpression嵌入式系統(tǒng)原理及接口技術(第2版)52⑵使用使用SETA、SETL和SETS之前,必須先聲明全局變量或局部變量,后設置它們的值。⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)53

⒋為協(xié)處理器寄存器定義一個名字的CN指示符⒌為指定的協(xié)處理器定義一個名字的CP指示符(⒋和⒌具體內容見教材)⒍給符號名一個數(shù)值常數(shù)的EQU指示符EQU也可以用*指示符代替。⑴格式nameEQUexpression⑵使用使用EQU來定義常數(shù),與C語言中#define類似。⑶使用舉例num2EQU25;給符號num2指定值為25嵌入式系統(tǒng)原理及接口技術(第2版)54

⒎聲明全局符號的EXPORT或GLOBAL指示符GLOBAL與EXPORT有相同的功能。⑴格式EXPORTsymbol{[qualifier{,qualifier}{,qualifier}]}⑵使用使用EXPORT指示符,允許別的文件中的代碼引用當前文件中的符號。⑶使用舉例

AREATestSub,CODE,READONLYEXPORTDoSub;函數(shù)名能被外部模塊使用

DoSubSUBr1,r2,r1嵌入式系統(tǒng)原理及接口技術(第2版)55⒏為指定的浮點寄存器定義一個名字的FN指示符⒐聲明其他文件定義的符號的IMPORT或EXTERN指示符⒑保留局部符號的KEEP指示符⒒定義寄存器列表名的RLIST指示符⒓定義寄存器名的RN指示符(⒏⒐⒑⒒⒓具體內容見教材)嵌入式系統(tǒng)原理及接口技術(第2版)56

4.1.7匯編控制指示符⒈條件匯編IF、ELSE和ENDIF指示符IF指示符可以用[代替;ELSE指示符可以用|代替;ENDIF指示符可以用]代替。IF指示符引入一個條件,由這個條件決定是否匯編指令和/或指示符代碼1。ELSE指示符標記指令和/或指示符代碼2的開始,當IF后的條件為假,則匯編指令和/或指示符代碼2。ENDIF指示符標記條件匯編結束。嵌入式系統(tǒng)原理及接口技術(第2版)57

⑴格式IFlogical-expression指令和/或指示符代碼1{ELSE指令和/或指示符代碼2}ENDIF⑵使用匯編器根據(jù)條件決定是否匯編某一段代碼.嵌入式系統(tǒng)原理及接口技術(第2版)58⑶使用舉例GBLLTest;聲明一個全局邏輯變量

…[Test=TRUE;IF…;指令和/或指示符代碼1|;ELSE;指令和/或指示符代碼2];ENDIF。嵌入式系統(tǒng)原理及接口技術(第2版)59

⒉重復匯編WHILE和WEND指示符WHILE指示符測試一個條件,由這個條件決定是否匯編指令和/或指示符代碼。WEND指示符表示指令和/或指示符代碼結束,由WHILE再次測試條件,決定是否重復進行匯編,直到條件不成立。⑴格式WHILElogical-expression指令和/或指示符代碼WEND嵌入式系統(tǒng)原理及接口技術(第2版)60

⑵使用在使用中,WHILE和WEND配對使用,對指令和/或指示符代碼重復匯編。重復次數(shù)可以是0。在WHILE…WEND內可以使用IF…ENDIF。WHILE…WEND能被嵌套使用。⑶使用舉例GBLAcount

…countSETA3WHILEcount<=5countSETAcount+1;指令和/或指示符代碼;重復匯編3次

WEND嵌入式系統(tǒng)原理及接口技術(第2版)61

⒊宏定義MACRO、MEND和退出宏MEXIT指示符

MACRO指示符標記一個宏定義的開始;

MEND指示符標記這個宏定義的結束;而MEXIT指示符通知匯編器,從宏中退出。嵌入式系統(tǒng)原理及接口技術(第2版)62

MACRO和MEND指示符⑴格式MACROmacro-prototype;codeMEND在MACRO指示符后,下一行必須跟著宏原型(macro-prototype)語句。宏原型語句格式是:

{$label}macroname{$parameter1{,$parameter2}…}嵌入式系統(tǒng)原理及接口技術(第2版)63

⑵使用使用時,在宏的內部,像$label、$parameter這些參數(shù),能夠像其他的變量那樣,以同樣的方法被使用。每次宏調用(macroinvocation)時,都要給它們一個新的值。參數(shù)必須使用$,用來與其他符號區(qū)別。$label是可選參數(shù)。如果宏內定義一個內部標號,$label是有用的。它被看作宏的一個參數(shù)。如果使用符號|作為變量,用于表示一個參數(shù)的缺省值。如果變量被省略,用空串替換。嵌入式系統(tǒng)原理及接口技術(第2版)64如果一個參數(shù)后面緊跟著文本或另一個參數(shù),在擴展時它們之間無空格時,用“.”放在它們中間。如果前面是文本后面是參數(shù),不能使用“.”。宏定義了局部變量的使用范圍。宏能夠被嵌套。⑶使用舉例(見教材)

嵌入式系統(tǒng)原理及接口技術(第2版)65

MEXIT指示符MEXIT用于在宏定義結束前退出。⑴格式MEXIT⑵

使用在匯編期間,當需要從一個宏中退出時,使用MEXIT指示符。

⑶使用舉例(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)66⒋包含文件的INCLUDE和INCBIN指示符(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)67

4.1.8報告指示符報告指示符的共同之處是使用它們能夠產(chǎn)生一些報告信息。報告指示符包括:

ASSERT、INFO、OPT、SUBT和TTL指示符。

嵌入式系統(tǒng)原理及接口技術(第2版)68表4.7報告指示符指示符描述使用舉例解釋ASSERT斷言ASSERTlabel1<=label2如果斷言為假,匯編器產(chǎn)生錯誤信息INFO/!支持錯誤診斷見INFO指示符OPT列表選擇OPT4在列表文件中,開始新的一頁SUBT放置子標題SUBTFirstSubtitle在列表文件中,放置子標題TTL放置標題TTLFirstTitle在列表文件中,放置標題嵌入式系統(tǒng)原理及接口技術(第2版)69

4.1.9表達式和操作符表達式是符號、值、一元或二元操作符以及括號的組合。在它們計算時,有嚴格的優(yōu)先級。⑴在括號中的表達式先計算;⑵按操作符的優(yōu)先級進行計算;⑶相鄰的一元操作符從右到左計算;⑷同優(yōu)先級的二元操作符從左到右計算。嵌入式系統(tǒng)原理及接口技術(第2版)70

⒈串表達式串表達式由串文字(串常量)、串變量和對串處理的操作符及括號的組合組成。串文字由包含在雙引號內的字符串組成。串文字的長度由輸入行的長度限制。對于不能被放在串文字中的字符,能夠用一元操作符

:CHR:放在串表達式中,其后允許放置整數(shù)0~255(ASCII字符編碼)。串表達式的長度值不能超過512個字符。長度可以為0。如果串文字中包含一個

$或一個雙引號時,可以用

$$表示

$,用兩個雙引號表示一個雙引號。嵌入式系統(tǒng)原理及接口技術(第2版)71

⒉數(shù)值表達式數(shù)值表達式由表示數(shù)值常量的符號、數(shù)值變量、數(shù)值常量、二元操作符和括號的組合組成。如果整個表達式計算產(chǎn)生的值不包含寄存器和程序計數(shù)器,數(shù)值表達式可以包含相對寄存器或相對程序的表達式。數(shù)值表達式計算產(chǎn)生32位整數(shù)。程序員可以把它們看作0~2-1的無符號數(shù),或看作-2~2-1的帶符號數(shù)。然而匯編器對-n和2-n不作區(qū)別。關系操作符,像>=等,使用無符號數(shù)的解釋,因此0>-1結果為{FALSE}。嵌入式系統(tǒng)原理及接口技術(第2版)72⒊相對寄存器和相對程序的表達式一個相對寄存器的表達式計算產(chǎn)生指定寄存器加或減一個數(shù)值常數(shù)。一個相對程序的表達式計算產(chǎn)生程序計數(shù)器(pc)加或減一個數(shù)值常數(shù)。嵌入式系統(tǒng)原理及接口技術(第2版)73⒋邏輯表達式邏輯表達式由邏輯常量({TRUE}或{FALSE})、邏輯變量、布爾操作符、關系和括號的組合組成。關系由變量、文字、常量或使用適當操作符的表達式結合在一起組成。嵌入式系統(tǒng)原理及接口技術(第2版)74⒌一元操作符(unaryoperators)一元操作符(也稱單目運算符)有最高優(yōu)先級并且首先被計算。一元操作符位于它的操作數(shù)前面,多個相鄰的操作符從右到左計算。一元操作符見教材表4.8。嵌入式系統(tǒng)原理及接口技術(第2版)75⒍二元操作符(binaryoperators)二元操作符(也稱雙目運算符)被寫在一對它們要進行操作的子表達式之間。相同優(yōu)先級的操作符從左到右計算。教材表4.9中將二元操作符按優(yōu)先級不同分為6組,1組優(yōu)先級最高,組內*、/、MOD有相同的優(yōu)先級;6組優(yōu)先級最低。嵌入式系統(tǒng)原理及接口技術(第2版)764.2ARM匯編語言編程基礎4.2.1匯編語言和匯編器⒈匯編語言⒉匯編器4.2.2調用子程序在匯編語言中調用子程序使用分支并且連接指令BL,寫作:

BLlabel這里label用作標號,在子程序的第一條指令前標出。嵌入式系統(tǒng)原理及接口技術(第2版)77BL指令保存返回地址到連接寄存器lr,改變pc到子程序的地址。子程序代碼被執(zhí)行后,能夠使用MOVpc,lr指令返回。習慣上寄存器r0-r3用于存放傳送到子程序的參數(shù),從子程序返回時存放返回的結果給調用者。例4.3給出的子程序,加4個參數(shù)的值,用r0返回結果,r0=r0+r1+r2+r3?!纠?.3】用ARM匯編語言編寫的子程序調用程序舉例。(見教材)嵌入式系統(tǒng)原理及接口技術(第2版)78

4.2.3條件執(zhí)行用戶能夠使用ARM指令的條件執(zhí)行,減少代碼中分支指令的條數(shù)。分支指令增加了代碼密度和處理器的周期數(shù)。典型的情況是,每次一個分支出現(xiàn)時,重新填充處理器的流水線要花費多個處理器周期時間?!纠?.4】求歐幾里德(Euclid)最大公約數(shù)。下述例中使用了兩段代碼,實現(xiàn)求歐幾里德最大公約數(shù)。要注意的是如何使用條件執(zhí)行去改進代碼密度和執(zhí)行速度。用偽代碼將算法描述如下:嵌入式系統(tǒng)原理及接口技術(第2版)79

functiongcd(integera,integerb)while(a<>b)doif(a>b)thena=a–belseb=b-a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論