基于ARMTDMI的SCBX嵌入式微處理器技術_第1頁
基于ARMTDMI的SCBX嵌入式微處理器技術_第2頁
基于ARMTDMI的SCBX嵌入式微處理器技術_第3頁
基于ARMTDMI的SCBX嵌入式微處理器技術_第4頁
基于ARMTDMI的SCBX嵌入式微處理器技術_第5頁
已閱讀5頁,還剩89頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章 ARM匯編語言編程 本章重點本章重點 : ARM匯編器提供的匯編語言特性,包括行格式、預定義名和內(nèi)建變量、偽指令、符號、指示符和宏、表達式和操作符等,以及它們的使用; ARM匯編語言編程舉例。4.1 ARM匯編語言概述 本章講述的由ARM匯編器提供的匯編語言特性,如偽指令等,以及它們在編程中如何使用。主要內(nèi)容如下: 源代碼行格式、預定義的寄存器和協(xié)處理器名、內(nèi)建變量; ARM偽指令; Thumb偽指令; 符號; 指示符和宏; 表達式和操作符。4.2 ARM匯編語言特性行格式、預定義名和內(nèi)建變量 行格式symbolinstruction|directive|pseudo_instruct

2、ion;comment也就是:符號 指令|指示符|偽指令 ;注釋 上述行格式中用大括號括起來的三部分是可選的。如果一行中沒有symbol,指令|指示符|偽指令不能從第1列位置開始,指令|指示符|偽指令前面必須放置空格或Tab(制表符)字符。 每一條指令的助記符可以使用全部大寫或全部小寫字符,但不能在同一條指令的助記符中大、小寫混用。指示符必須大寫。指令中每一個寄存器名能夠全部大寫或全部小寫,但不能大、小寫混用。 行格式中symbol通常是標號(label),在指令或偽指令前它總是標號,在某些指示符前它是表示變量或常量的符號(symbol)。 行格式中symbol必須從第一列開始,不能含任何如空

3、格或Tab的字符,詳見本節(jié)符號命名規(guī)則部分。 預定義寄存器和協(xié)處理器名 預定義寄存器名 預定義程序狀態(tài)寄存器名 預定義浮點寄存器名 預定義協(xié)處理器名和協(xié)處理器寄存器名 內(nèi)建變量 內(nèi)建變量(built in variables)見表4.1,它們是由ARM匯編器定義過的。內(nèi)建變量不能用SETA、SETL或SETS指示符設置,它們能被用在表達式或條件中,如: IF ENDIAN=“big” 可用在ARM狀態(tài)的偽指令有: ADR、ADRL、LDFD、LDFS、LDR和NOP 偽指令。 ADR ARM偽指令 ADR偽指令裝入一個相對程序或相對寄存器的地址到一個寄存器。 格式 ADRcondition r

4、egister,expression 使用 使用中,ADR總是被匯編成一條指令。匯編器試圖產(chǎn)生一條ADD或SUB指令,裝入地址。如果不能用一條指令構造出地址,則產(chǎn)生錯誤信息,匯編失敗。 如果expression是相對程序的,計算產(chǎn)生的地址必須與ADR偽指令在同一個代碼區(qū)域。 使用舉例Test1 MOV r1,#0ADR r2,Test1 ;產(chǎn)生指令SUB r2,pc,#0 xC ADRL ARM偽指令 ADRL偽指令裝入一個相對程序或相對寄存器的地址到一個寄存器。與ADR偽指令功能相似,但ADRL比ADR能裝入更大的地址范圍,原因是ADRL產(chǎn)生兩條數(shù)據(jù)處理指令。 格式 ADRLconditio

5、n register,expression 使用 使用中,ADRL總是被匯編成2條指令。如果匯編器不能以2條指令構造出地址,則產(chǎn)生錯誤信息,匯編失敗。 如果expression是相對程序的,它必須計算產(chǎn)生一個與ADRL偽指令在同一個代碼區(qū)域的地址,否則在隨后的連接時,地址可能出了范圍。 使用舉例start MOV r0,#10ADRL r4,start+60000 ;產(chǎn)生指令ADD r4,pc,#0 xe800 ; ADD r4,r4,#0 x254 LDFD和LDFS ARM偽指令 LDFD偽指令裝入一個雙精度浮點常數(shù)到指定的浮點寄存器。 LDFS偽指令裝入一個單精度浮點常數(shù)到指定的浮點寄存

6、器。 格式 LDFDcondition fp-register,=expression LDFScondition fp-register,=expression 使用 使用舉例 LDFD f2,=2.01E205 ;裝入2.01E205到f2 LDFS f0,=2.01E-5 ;裝入2.01E-5到f0 LDR ARM偽指令 LDR偽指令裝入一個32位常數(shù)值或一個地址到一個寄存器。 格式 LDRcondition register,=expression|label-expression 使用 使用LDR偽指令有兩個主要目的,一是當一個立即數(shù)的值由于超了范圍,不能用MOV和MVN指令裝入到一

7、個寄存器時,用LDR偽指令產(chǎn)生一個文字池常數(shù);二是裝入一個相對程序或外部的地址到一個寄存器。 使用舉例 LDR r0,=0 x1ff ;裝入0 x1ff到r0 LDR r1,=label ;裝入label地址到r1 NOP ARM偽指令 對NOP偽指令,匯編器產(chǎn)生什么也不操作的ARM指令:MOV r0,r0。 格式 NOP偽指令 ADR Thumb偽指令 ADR偽指令裝入一個相對程序或相對寄存器的地址到一個寄存器。 格式 ADR register,expression 使用 使用中,在Thumb狀態(tài),ADR只能產(chǎn)生字對齊的地址。要使用ALIGN指示符去確認expression是字對齊的。 若表

8、達式是相對程序的,必須計算產(chǎn)生一個與ADR偽指令在同一個代碼區(qū)域的地址。 使用舉例 ADR r3,testexml ;產(chǎn)生指令ADD r3,pc,#nn ;code ALIGNtestexm1 DCW 1,2,3,4 LDR Thumb偽指令 LDR偽指令裝入一個32位常數(shù)值或一個地址到一個低寄存器中。 格式 LDR register,=expression|label-expression 使用 使用LDR偽指令有兩個主要目的,一是當一個立即數(shù)的值由于超出MOV指令的范圍,不能裝入一個寄存器時,產(chǎn)生文字池常數(shù);二是裝入一個相對程序或外部的地址到一個寄存器。 使用舉例 LDR r0,=0 x0

9、ffe ;裝入0 x0ffe到r0 LDR r1,=labeladdr ;裝入labeladdr地址到r1 MOV Thumb偽指令 MOV偽指令傳送一個低寄存器的值到另一個低寄存器(r0-r7)。而MOV指令不能傳送一個低寄存器的值到另一個低寄存器。 格式 MOV Rd,Rs 使用 在使用中,匯編器將MOV偽指令變成帶立即數(shù)的ADD指令,指令中立即數(shù)的值為0。 使用舉例 MOV Rd,Rs;產(chǎn)生指令ADD Rd,Rs,#0 NOP Thumb偽指令 對NOP偽指令,匯編器產(chǎn)生什么也不操作的Thumb指令:MOV r8,r8。 格式 NOP 使用符號能夠代表變量、地址和數(shù)值常數(shù)。符號代表地址時

10、,也稱為標號。 符號命名規(guī)則 符號命名遵守以下規(guī)則: 在符號名中可以使用大寫字母、小寫字母、數(shù)字字符或下劃線字符。 除了局部標號外,不允許在符號名的第一個字符位置使用數(shù)字字符。 符號名中對大、小寫字母是敏感的。 在符號名中所有的字符是有意義的。 在它們的作用范圍內(nèi),符號名必須是唯一的。 符號名必須不使用內(nèi)建變量名、預定義寄存器名和預定義協(xié)處理器名。 符號名應該不使用與指令助記符或指示符相同的名字。 如果需要在符號名中使用更大范圍的字符,使用如下舉例的格式為符號名劃界線: |C$code| 其中兩邊的兩條豎線不是符號的一部分,只用于為符號名劃界線,它們之間不允許使用豎線、分號和換行符。 變量(v

11、ariables)變量有三種類型: 數(shù)值 邏輯 串變量的類型不能被改變,變量的值可以被改變。 匯編時串變量的替換 標號(labels) 相對程序的標號 相對寄存器的標號 絕對地址 局部標號(local labels) 局部標號使用099范圍內(nèi)的一個數(shù),可以有選擇地在其后跟隨一個表示當前范圍的名字。 局部標號用在指令中,指出分支的目標處。 局部標號格式為: nroutname 常量 常量由數(shù)值常量、串常量、布爾常量和字符常量組成。 數(shù)值常量 數(shù)值常量在匯編語言中采用以下三種形式: 十進制數(shù),例如234; 十六進制數(shù),例如0 x7b或0 x7B; n進制數(shù),格式為n_xxx,n是29之間的一個基數(shù)

12、,xxx是這個基數(shù)下的數(shù)值,例如8_375,表示基數(shù)為8(八進制數(shù)),數(shù)值為375。 串常量 布爾常量 字符常量使用舉例:anum SETA 3500 ;假定anum在以前聲明過addr DCD 0 x00ff ;十六進制數(shù) DCD 0 x00FF ;十六進制數(shù) DCD 2_11000011 ;二進制數(shù)bnum SETA 8_74007 ;假定bnum在以前聲明過,八進制數(shù) LDR r1,=A ;字符匯編器提供指示符用來支持: 定義數(shù)據(jù)結構和為數(shù)據(jù)分配空間; 文件分隔成邏輯上的一個或多個區(qū)域; 錯誤報告和匯編列表控制; 符號定義; 條件匯編和重復匯編,以及在一個文件中包含輔助文件。 定義區(qū)域的

13、AREA指示符 AREA指示符通知匯編器,匯編一個新的代碼或數(shù)據(jù)區(qū)域。區(qū)域是能被連接器(linker)處理的、獨立的、命名的、不可分的代碼或數(shù)據(jù)塊。 格式 AREA name,attr ,attr 使用 一個匯編程序必須最少有一個AREA指示符。 當程序比較大時,可以將代碼和數(shù)據(jù)用不同的名字分為多個區(qū)域。 使用舉例 如下例子定義了一個只讀,稱為Test的代碼區(qū)域。 AREA Test,CODE,READONLY ;代碼區(qū)域,名為Test ;code 用于選擇指令集的CODE16和CODE32指示符 格式格式分別是: CODE16 CODE32 使用 在ARM狀態(tài)當使用BX指令分支到Thumb指

14、令時,使用CODE16。CODE16放置在分支目標處代碼的前面。當從Thumb狀態(tài)分支到ARM指令時,使用CODE32。CODE32放置在分支目標處代碼的前面。 使用舉例 使用舉例1:這個例子給出如何從ARM指令分支到Thumb指令。 AREA ARMtoThumb,CODE,READONLY ;這個區(qū)域開始于ARM狀態(tài) ADR r1,test1+1 ;裝入地址,設置最低位為1 BX r1 ;分支并且改變指令集 CODE16 ;跟隨指令為 Thumb指令test1 MOV r0,#20 ;Thumb指令 源程序結束的END指示符 END指示符告訴匯編器,已經(jīng)匯編到源文件結束處。 格式 END

15、使用 使用時,每個匯編語言源文件必須以END指示符結束。 使用舉例 AREA Init,CODE,READONLY END 聲明匯編程序入口點的ENTRY指示符 ENTRY指示符聲明一個程序的入口點。 格式 ENTRY 使用 使用時,必須為一個程序指定一個且只有一個ENTRY指示符。如果不存在ENTRY或存在一個以上ENTRY,連接時產(chǎn)生錯誤信息。如果在一個單一的源文件中存在多個ENTRY,匯編時產(chǎn)生錯誤信息。 使用舉例 AREA Init,CODE,READONLY ENTRY ;程序入口點 禁止浮點運算的NOFP指示符 NOFP指示符表明在一個匯編語言源文件中不接受浮點指令。 格式 NOF

16、P 使用 使用NOFP指示符確認在軟件或目標硬件不支持浮點指令的情況下,程序中沒有使用浮點指令。 定義局部標號使用范圍的ROUT指示符 ROUT指示符標記局部標號使用范圍的界線。 格式 name ROUT 使用 在使用中,ROUT指示符限制了局部標號的使用范圍。這使得程序員容易避免偶然引用一個錯誤的標號這種情況的發(fā)生。如果不存在ROUT指示符,局部標號的使用范圍是整個AOF區(qū)域。如果存在ROUT指示符,局部標號的使用范圍在兩個ROUT之間。 使用name選項用于保證每次引用正確的標號。如果標號名或引用標號名與ROUT指示符前面的名字不匹配,匯編器產(chǎn)生錯誤信息,匯編失敗。使用舉例(見參考書P12

17、9) 在代碼中使用數(shù)據(jù)的DATA指示符 DATA指示符通知匯編器,這個標號是在代碼中的數(shù)據(jù)標號,這意味著標號是在代碼段中的數(shù)據(jù)的地址。 格式 label DATA 使用 使用時,如果需要在Thumb代碼區(qū)域用到某一個數(shù)據(jù)定義指示符,如DCD、DCB和DCW,定義數(shù)據(jù)時,必須使用DATA指示符。 使用舉例 AREA test,CODEThumb_Code ;code ;code MOV pc,lr Thumb_Data DATA DCB 2,5,8 分配存儲器字節(jié)的DCB指示符 DCB也可以用 = 指示符代替。 DCB指示符分配一個或多個存儲器中的字節(jié),并且定義初始運行時的存儲器內(nèi)容。 格式 l

18、abel DCB expression ,expression 使用 如果需要在Thumb代碼中用DCB定義帶標號的數(shù)據(jù),必須使用DATA指示符。 如果DCB后跟隨著指令,應該使用ALIGN指示符去確認指令存放是邊界對齊的。 使用舉例(見參考書P131) 分配存儲器半字的DCW和DCWU指示符 DCW指示符分配一個或多個存儲器中的半字,以2字節(jié)邊界對齊,定義初始運行時的存儲器內(nèi)容。 DCWU與DCW的區(qū)別是:DCWU不要求以2字節(jié)邊界對齊。 格式格式分別是: label DCW expression,expression label DCWU expression,expression 使用

19、使用時,如果需要在Thumb代碼中用DCW(DCWU)定義一個帶標號的數(shù)據(jù),必須使用DATA指示符。 如果DCW(DCWU)后跟隨著指令,要使用ALIGN指示符,確認指令是字邊界對齊的。 使用舉例(見參考書P132) 分配存儲器字的DCD和DCDU指示符 DCD也可以用 & 指示符代替。 DCD指示符分配1個或多個存儲器中的字,4字節(jié)邊界對齊,并且定義初始運行時的存儲器內(nèi)容。 DCDU與DCD的區(qū)別是:DCDU不要求4字節(jié)邊界對齊。 格式格式分別是: label DCD expression,expression label DCDU expression,expression 使用

20、使用時,如果需要在Thumb代碼中用DCD(DCDU)定義一個帶標號的數(shù)據(jù),必須使用DATA指示符。 如果DCDU后面跟隨著代碼,需要使用ALIGN指示符,確認指令是字邊界對齊的。 為了獲得4字節(jié)邊界對齊,如果需要,DCD指示符在第1個定義的字前,會插入最多3字節(jié)作為填充字節(jié)。 DCDU不插入填充字節(jié)。 使用舉例(見參考書P133) 為單精度浮點數(shù)分配存儲器的DCFS和DCFSU指示符 (見參考書P133) 為雙精度浮點數(shù)分配存儲器的DCFD和DCFDU指示符 (見參考書P134) 分配數(shù)據(jù)區(qū)并使其初值為0的SPACE指示符 SPACE也可以用 % 指示符代替。 % 指示符保留存儲器的一塊內(nèi)容

21、設置為0的數(shù)據(jù)區(qū)。 格式 label % numeric-expression 使用 使用中,如果用 % 定義了標號的數(shù)據(jù)在Thumb代碼中,必須使用DATA指示符。 可以使用ALIGN指示符去對齊跟在 % 指示符后的代碼的存放地址。 使用舉例 AREA TestData,DATA,READWRITEdata1 % 127 ;分配127字節(jié)內(nèi)容為0的存儲區(qū) 邊界對齊的ALIGN指示符 用ALIGN指示符在代碼中對齊當前的位置到確定的邊界。 格式 ALIGN expression,offset-expression 使用 在使用中,用ALIGN去確認代碼地址被正確地對齊。 當需要時,可以使用AL

22、IGN去確認Thumb代碼地址按字對齊。例如,ADR Thumb偽指令只能裝入字對齊的地址。 使用舉例(見參考書P135) 聲明文字池的LTORG指示符 LTORG指示符通知匯編器,立即匯編當前的文字池。 格式 LTORG 使用 由AREA指示符定義開始的每個區(qū)域,在代碼區(qū)域結尾處或匯編結尾處,即使不寫出LTORG,匯編器也執(zhí)行LTORG指示符。 使用LTORG確認在LDR、LDFD和LDFS偽指令范圍內(nèi),文字池被匯編。大一些的程序可能要求幾個文字池。 放LTORG指示符應該在無條件分支或子程序返回指令之后,使得處理器不會試圖把常數(shù)當作指令去執(zhí)行。 在文字池中,匯編器以字邊界對齊數(shù)據(jù)。 使用舉

23、例(見參考書P136) 定義結構化內(nèi)存表的MAP和FIELD指示符 MAP也可以用 指示符代替。 FIELD也可以用 # 指示符代替。 MAP和FIELD指示符用于描述結構化內(nèi)存表。MAP指示符 MAP指示符設置結構化內(nèi)存表首地址在指定位置。結構化內(nèi)存表定位計數(shù)器用表示,被設置成相同地址。 格式 MAP expression,base-register 使用 MAP指示符可以多次使用,定義多個結構化內(nèi)存表。 計數(shù)器在第一個MAP指示符被使用前設置為0。 使用舉例(見參考書P137)FIELD指示符 FIELD指示符描述已經(jīng)由MAP定義的結構化內(nèi)存表中的數(shù)據(jù)域。 格式 label FIELD e

24、xpression 使用 使用 指示符與 # 指示符的組合來描述結構化內(nèi)存表。 使用舉例(見參考書P137) 聲明并初始化全局變量的GBLA、GBLL和GBLS指示符 GBLA指示符聲明并初始化一個全局算術變量,取值范圍與數(shù)值表達式相同。 GBLL指示符聲明并初始化一個全局邏輯變量,取值范圍為TRUE或FALSE。 GBLS指示符聲明并初始化一個全局串變量,取值范圍與串表達式相同。 格式 格式分別是: GBLA variable-name GBLL variable-name GBLS variable-name 使用 使用舉例(見參考書P139) 聲明并初始化局部變量的LCLA、LCLL和L

25、CLS指示符 局部變量僅僅能在一個宏內(nèi)聲明。 LCLA指示符聲明并初始化一個局部算術變量,取值范圍與數(shù)值表達式相同。 LCLL指示符聲明并初始化一個局部邏輯變量,取值范圍為TRUE或FALSE。 LCLS指示符聲明并初始化一個局部串變量,取值范圍與串表達式相同。 格式 格式分別是: LCLA variable-name LCLL variable-name LCLS variable-name 使用 使用舉例(見參考書P140) 設置變量值的SETA、SETL和SETS指示符 SETA指示符設置局部或全局算術變量的值。 SETL指示符設置局部或全局邏輯變量的值。 SETS指示符設置局部或全局串

26、變量的值。 格式 格式分別是: variable-name SETA expression variable-name SETL expression variable-name SETS expression 使用 使用SETA、SETL和SETS之前,必須先聲明全局變量或局部變量,后設置它們的值。 使用舉例(見參考書P141) 為協(xié)處理器寄存器定義一個名字的CN指示符 為指定的協(xié)處理器定義一個名字的CP指示符 (具體內(nèi)容見參考書P141) 給符號名一個數(shù)值常數(shù)的EQU指示符 EQU也可以用 * 指示符代替。 格式 name EQU expression 使用 使用EQU來定義常數(shù),與C語言

27、中#define類似。 使用舉例num2 EQU 25 ;給符號num2指定值為25 聲明全局符號的EXPORT或GLOBAL指示符 GLOBAL與EXPORT有相同的功能。 格式 EXPORT symbol qualifier,qualifier,qualifier 使用 使用EXPORT指示符,允許別的文件中的代碼引用當前文件中的符號。 使用舉例 AREA TestSub,CODE,READONLY EXPORT DoSub ;函數(shù)名能被外部模塊使用 DoSub SUB r1,r2,r1 為指定的浮點寄存器定義一個名字的FN指示符 聲明其他文件定義的符號的IMPORT或EXTERN指示符

28、保留局部符號的KEEP指示符 定義寄存器列表名的RLIST指示符 定義寄存器名的RN指示符 (具體內(nèi)容見參考書P142-145) 條件匯編IF、ELSE和ENDIF指示符 IF指示符可以用 代替;ELSE指示符可以用 | 代替;ENDIF指示符可以用 代替。 IF指示符引入一個條件,由這個條件決定是否匯編指令和或指示符代碼1。 ELSE指示符標記指令和或指示符代碼2的開始,當IF后的條件為假,則匯編指令和或指示符代碼2。 ENDIF指示符標記條件匯編結束。 格式 IF logical-expression 指令和或指示符代碼1 ELSE 指令和或指示符代碼2 ENDIF 使用 匯編器根據(jù)條件決

29、定是否匯編某一段代碼 使用舉例 GBLL Test ;聲明一個全局邏輯變量 Test=TRUE;IF ;指令和或指示符代碼1 | ;ELSE ;指令和或指示符代碼2 ;ENDIF。 重復匯編WHILE和WEND指示符 WHILE指示符測試一個條件,由這個條件決定是否匯編指令和或指示符代碼。 WEND指示符表示指令和或指示符代碼結束,由WHILE再次測試條件,決定是否重復進行匯編,直到條件不成立。 格式 WHILE logical-expression 指令和或指示符代碼 WEND 使用 在使用中,WHILE和WEND配對使用,對指令和或指示符代碼重復匯編。重復次數(shù)可以是0。 在WHILEWEN

30、D內(nèi)可以使用IFENDIF。WHILEWEND能被嵌套使用。 使用舉例 GBLA count count SETA 3 WHILE count = 5 count SETA count+1 ;指令和或指示符代碼;重復匯編3次 WEND 宏定義MACRO、MEND和退出宏MEXIT指示符 MACRO指示符標記一個宏定義的開始; MEND指示符標記這個宏定義的結束; 而MEXIT指示符通知匯編器,從宏中退出。MACRO和MEND指示符 格式 MACRO macro-prototype ;code MEND 在MACRO指示符后,下一行必須跟著宏原型(macro-prototype)語句。 宏原型語

31、句格式是: $label macroname $parameter1,$parameter2 使用 使用時,在宏的內(nèi)部,像$label、$parameter這些參數(shù),能夠像其他的變量那樣,以同樣的方法被使用。每次宏調(diào)用(macro invocation)時,都要給它們一個新的值。參數(shù)必須使用$,用來與其他符號區(qū)別。 $label是可選參數(shù)。如果宏內(nèi)定義一個內(nèi)部標號,$label是有用的。它被看作宏的一個參數(shù)。 如果使用符號 | 作為變量,用于表示一個參數(shù)的缺省值。如果變量被省略,用空串替換。 如果一個參數(shù)后面緊跟著文本或另一個參數(shù),在擴展時它們之間無空格時,用“.”放在它們中間。如果前面是文本

32、后面是參數(shù),不能使用“.”。 宏定義了局部變量的使用范圍。 宏能夠被嵌套。 使用舉例(見參考書P147-148) MEXIT指示符 MEXIT用于在宏定義結束前退出。 格式 MEXIT 使用 在匯編期間,當需要從一個宏中退出時,使用MEXIT指示符。 使用舉例(見參考書P148) 包含文件的INCLUDE和INCBIN指示符(見參考書P148-149)報告指示符 報告指示符的共同之處是使用它們能夠產(chǎn)生一些報告信息。報告指示符包括: ASSERT、INFO、OPT、SUBT和TTL指示符。 表4.7 報告指示符指示符指示符描描 述述使使 用用 舉舉 例例解解 釋釋ASSERT斷言斷言ASSERT

33、 label1= 等,使用無符號數(shù)的解釋,因此0-1結果為FALSE。 相對寄存器和相對程序的表達式 一個相對寄存器的表達式計算產(chǎn)生指定寄存器加或減一個數(shù)值常數(shù)。 一個相對程序的表達式計算產(chǎn)生程序計數(shù)器(pc)加或減一個數(shù)值常數(shù)。 邏輯表達式 邏輯表達式由邏輯常量(TRUE或FALSE)、邏輯變量、布爾操作符、關系和括號的組合組成。 關系由變量、文字、常量或使用適當操作符的表達式結合在一起組成。 一元操作符(unary operators) 一元操作符(也稱單目運算符)有最高優(yōu)先級并且首先被計算。一元操作符位于它的操作數(shù)前面,多個相鄰的操作符從右到左計算。 一元操作符見表4.9。(P153)

34、二元操作符(binary operators) 二元操作符(也稱雙目運算符)被寫在一對它們要進行操作的子表達式之間。相同優(yōu)先級的操作符從左到右計算。 表4.10中將二元操作符按優(yōu)先級不同分為6組,1組優(yōu)先級最高,組內(nèi)*、MOD有相同的優(yōu)先級;6組優(yōu)先級最低。(P154)4.3 ARM匯編語言編程舉例 匯編語言 匯編器 (詳細內(nèi)容見參考書P155-156)【例4.1】 匯編語言模塊舉例。 AREA example,CODE,READONLY;命名代碼塊為命名代碼塊為example ENTRY;標記第一條要執(zhí)行的指令標記第一條要執(zhí)行的指令run1 MOV r1,#20;設置參數(shù)設置參數(shù) MOV r

35、2,#15 SUB r1,r1,r2;r1=r1-r2;代碼代碼 MOV r0,#0 x18;傳送到軟件中斷的參數(shù)傳送到軟件中斷的參數(shù) LDR r1,=0 x20026;傳送到軟件中斷的參數(shù)傳送到軟件中斷的參數(shù) SWI 0 x123456;通過軟件中斷指令返回通過軟件中斷指令返回 END;標記文件結束標記文件結束【例4.2】 子程序調(diào)用。 AREA addsubrout,CODE,READONLY;命名代碼塊命名代碼塊 ENTRY;標記執(zhí)行的第一條指令標記執(zhí)行的第一條指令run1 MOV r0,#101;建立參數(shù)建立參數(shù) MOV r1,#321 MOV r2,#43 MOV r3,#55 BL addfun;調(diào)用子程序調(diào)用子程序 MOV r0,#0 x18 LDR

溫馨提示

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

評論

0/150

提交評論