版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 2010.12 陳 賾ARM嵌入式技術(shù)原理與應(yīng)用 131356998038/5/20221整理課件第四章 ARM匯編程序設(shè)計8/5/20222整理課件 了解與熟悉ADS下的偽操作和宏指令以及它的應(yīng)用 了解與熟悉GNU下的偽操作和宏指令以及它的應(yīng)用 熟悉ARM ATPCS 能夠利用匯編語言進(jìn)行簡單的程序設(shè)計 8/5/20223整理課件1. 偽指令、偽操作和宏指令概念 偽指令是匯編語言程序里的特殊指令助記符,在匯編時被合適的機器指令替代。 偽操作為匯編程序所用,在源程序進(jìn)行匯編時由匯編程序處理,只在匯編過程起作用,不參與程序運行。4.1. 匯編偽指令和宏指令8/5/20224整理課件 宏指令通過
2、偽操作定義的一段獨立的代碼。在調(diào)用它時將宏體插入到源程序中。也就是常說的宏。說明:所有的偽指令、偽操作和宏指令,均與具體的開發(fā)工具中的編譯器有關(guān),當(dāng)前主要采用ARM公司的“ADS/SDT IDE”開發(fā)工具,所以后面的討論,均是基于ARM公司的開發(fā)工具。8/5/20225整理課件2 . ARM匯編偽指令 ARM偽指令不屬于ARM指令集中的指令,是為了編程方便而定義的。偽指令可以像其它ARM指令一樣使用,但在編譯時這些指令將被等效的ARM指令代替。ARM偽指令有四條,分別是:ADR:小范圍的地址讀取偽指令。ADRL:中等范圍的地址讀取偽指令。LDR:大范圍的地址讀取偽指令。NOP:空操作偽指令。8
3、/5/20226整理課件(1) ADR小范圍的地址讀取 ADR偽指令功能:將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中。 ADR偽指令功能的實現(xiàn)方法:在匯編編譯器編譯源程序時,ADR偽指令被編譯器替換成一條合適的指令。通常,編譯器用一條ADD指令或SUB指令來實現(xiàn)此ADR偽指令的功能,若不能用一條指令實現(xiàn),則產(chǎn)生錯誤,編譯失敗。語法格式: ADRcond register,expr其中:register:加載的目標(biāo)寄存器。expr:地址表達(dá)式。取值范圍是參考P2128/5/20227整理課件例1: (0 x20) ADR R1,Delay Delay(0 x64) MO
4、V R0,R14 使用ADR將程序標(biāo)號Delay所表示的地址存入R1。編譯后的反匯編代碼: ADD R1,PC,#0 x3C MOV R0,R14 PC+0 x3C=0 x20+0 x08+0 x3C=0 x648/5/20228整理課件例2:查表 ADR R0,D_TAB ;加載轉(zhuǎn)換表地址 LDRB R1,R0,R2 ;使用R2作為參數(shù),進(jìn)行查表 D_TAB DCB 0 xC0, 0 xF9, 0 xA4, 0 xB0, 0 x99, 0 x928/5/20229整理課件(2)ADRL中等范圍的地址讀取ADRL偽指令功能:將基于PC相對偏移的地址值或基于寄存器相對偏移的地址值讀取到寄存器中,
5、比ADR偽指令可以讀取更大范圍的地址。ADRL偽指令功能實現(xiàn)方法:在匯編編譯器編譯源程序時,ADRL被編譯器替換成兩條合適的指令。若不能用兩條指令實現(xiàn),則產(chǎn)生錯誤,編譯失敗。語法格式: ADRLcond register,expr其中:register:加載的目標(biāo)寄存器。expr:地址表達(dá)式。取值范圍參考P2128/5/202210整理課件例3: (0 x20) ADRL R1,Delay Delay(0 x64) MOV R0,R14 使用ADRL將程序標(biāo)號Delay所表示的地址存入R1。編譯后的反匯編代碼: ADD R1,PC,#0 x3CADD R1,R1,#0 MOV R0,R14 A
6、DRL偽指令被匯編成兩條指令,盡管第2條指令并沒有意義。8/5/202211整理課件(3)LDR 大范圍的地址讀取LDR偽指令功能:用于加載32位立即數(shù)或一個地址值到指定的寄存器。LDR偽指令功能實現(xiàn)方法:在匯編編譯源程序時,LDR偽指令被編譯器替換成一條合適的指令。若加載的常數(shù)未超過MOV或MVN的范圍,則使用MOV或MVN指令代替該LDR偽指令;否則匯編器將常量放入文字池,并使用一條程序相對偏移的LDR指令從文字池讀出常量。 8/5/202212整理課件 語法格式: LDRcond register,=expr其中:Register:加載的目標(biāo)寄存器。expr:32位常量或地址表達(dá)式。8/
7、5/202213整理課件例4: (0 x060) LDR R1,=Delay Delay(0 x102) MOV R0,R14 使用LDR將程序標(biāo)號Delay所表示的地址存入R1。編譯后的反匯編代碼: LDR R1,stack Delay MOV R0,R14 LTORGstack DCD 0 x102 LDR偽指令被匯編成一條LDR指令,并在文字池中定義一個常量,該常量為標(biāo)號Delay的地址。8/5/202214整理課件注意: 從指令位置到文字池的偏移量必須小于4KB。 與ARM指令的LDR的區(qū)別:偽指令LDR的參數(shù)有“=”號。8/5/202215整理課件(4)NOP空操作偽指令NOP偽指令
8、功能實現(xiàn)方法:在匯編時將被替代成ARM中的空操作,比如可能是“MOV R0,R0”指令等。用途:NOP可用于延時操作。語法格式: NOP例:延時子程序 Delay NOP ;空操作 NOP NOP SUBS R1,R1,#1 ;循環(huán)次數(shù)減1 BNE Delay MOV PC,LR8/5/202216整理課件3. ARM匯編偽操作ADS編譯環(huán)境下的偽操作可分為以下幾類:符號定義(Symbol Definition)偽操作 數(shù)據(jù)定義(Data Definition)偽操作 匯編控制(Assembly Control)偽操作 其它(Miscellaneous)偽操作 8/5/202217整理課件(1
9、) 符號定義偽操作 GBLA,GBLL,GBLS:聲明全局變量。LCLA,LCLL,LCLS:聲明局部變量。SETA,SETL,SETS:給變量賦值。RLIST:為通用寄存器列表定義名稱。 8/5/202218整理課件(2) 數(shù)據(jù)定義偽操作LTORG:聲明一個數(shù)據(jù)緩沖池的開始SPACE:分配一塊字節(jié)內(nèi)存單元,并用0初始化DCB:分配一段字節(jié)內(nèi)存單元,并初始化DCD、DCDU:分配一段字內(nèi)存單元,并初始化MAP:定義一個結(jié)構(gòu)化的內(nèi)存表的首地址FIELD:定義結(jié)構(gòu)化內(nèi)存表中的一個數(shù)據(jù)域 8/5/202219整理課件 MAP、 FIELD、 SPACEMAP 0 x100, R0 ;定義結(jié)構(gòu)化內(nèi)存表
10、首地址的值為0 x100R0A FIELD 16 ;定義A的長度為16字節(jié),位置為0 x110+R0 LTORG ;定義數(shù)據(jù)緩沖池&0 x8000Data SPACE 4200 ;從當(dāng)前位置開始分配4200字節(jié)的內(nèi)存單元,并初始化為0。8/5/202220整理課件LTORG用于聲明一個數(shù)據(jù)緩沖池(文字池)的開始。語法格式:LTORG例:start BL func; func LDR R1,=0 x8000 ;子程序 MOV PC,LR ;子程序返回 LTORG ;定義數(shù)據(jù)緩沖池&0 x8000Data SPACE 4200 ;從當(dāng)前位置開始分配4200字節(jié)的內(nèi) 存單元,并初始化為0。 END
11、默認(rèn)數(shù)據(jù)緩沖池為空8/5/202221整理課件注意: LTORG偽操作通常放在無條件跳轉(zhuǎn)指令之后,或者子程序返回指令之后,這樣處理器不會錯誤地將數(shù)據(jù)緩沖池中的數(shù)據(jù)當(dāng)作指令來執(zhí)行。 通常ARM匯編編譯器把數(shù)據(jù)緩沖池放在代碼段的最后面,即下一個代碼段開始之前,或者END偽操作之前。8/5/202222整理課件 DCB也可以用符號”=”表示用于定義并且初始化一個或者多個字節(jié)的內(nèi)存區(qū)域。語法格式: label DCB expr,expr或 label = expr,expr其中expr表示:-128到255之間的一個數(shù)值常量或者表達(dá)式。一個字符串。注意:當(dāng)DCB后面緊跟一個指令時,可能需要使用ALIG
12、N確保指令是字對齊的。8/5/202223整理課件例:short DCB 1 ;為short分配了一個字節(jié),并初始化為1。 string DCB “string”,0 ;構(gòu)造一個以0 結(jié)尾的字符串 8/5/202224整理課件DCD、DCDU分配一段字內(nèi)存單元(1)DCD 分配一段字對齊的內(nèi)存單元用于分配一段字對齊的內(nèi)存單元,并初始化。 DCD也可以用符號”&”表示語法格式: label DCD expr,expr或 label & expr,expr 其中:expr :數(shù)字表達(dá)式或程序中的標(biāo)號。注意:DCD偽操作可能在分配的第一個內(nèi)存單元前插入填補字節(jié)以保證分配的內(nèi)存是字對齊的。8/5/20
13、2225整理課件例:data1 DCD 2,4,6 ;為data1分配三個字,內(nèi)容初始化為2,4,6 data2 DCD label+4 ;初始化data2為label+4對應(yīng)的地址 (2)DCDU 分配一段字非嚴(yán)格對齊的內(nèi)存單元DCDU與DCD的不同之處在于DCDU分配的內(nèi)存單元并不嚴(yán)格字對齊。8/5/202226整理課件(3)匯編控制偽操作IF,ELSE及ENDIF:有條件選擇匯編WHILE及WEND:有條件循環(huán)(重復(fù))匯編MACRO,MEND及MEXIT:宏定義匯編8/5/202227整理課件(4)其它偽操作AREA:定義一個代碼段或數(shù)據(jù)段 CODE16、CODE32:告訴編譯器后面的指
14、令序列位數(shù) ENTRY:指定程序的入口點 ALIGN:將當(dāng)前的位置以某種形式對齊 END:源程序結(jié)尾 EQU:為數(shù)字常量、基于寄存器的值和程序中的標(biāo)號定義一個字符名稱。8/5/202228整理課件 EXPORT、GLOBAL:聲明源文件中的符號可以被其他源文件引用 IMPORT、EXTERN:聲明某符號是在其他源文件中定義的 GET、INCLUDE:將一個源文件包含到當(dāng)前源文件中,并將被包含的文件在其當(dāng)前位置進(jìn)行匯編處理。 INCBIN:將一個文件包含到當(dāng)前源文件中,而被包含的文件不進(jìn)行匯編處理8/5/202229整理課件1)AREA用于定義一個代碼段或是數(shù)據(jù)段。語法格式: AREA sect
15、ionname,attr ,attr 其中:sectionname:為所定義的段的名稱。attr:該段的屬性。具有的屬性為:CODE:定義代碼段。DATA:定義數(shù)據(jù)段。READONLY:指定本段為只讀,代碼段的默認(rèn)屬性。READWRITE:指定本段為可讀可寫,數(shù)據(jù)段的默認(rèn)屬性。8/5/202230整理課件ALIGN:指定段的對齊方式為2expression。expression的取值為031。COMMON:指定一個通用段。該段不包含任何用戶代碼和數(shù)據(jù)。NOINIT:指定此數(shù)據(jù)段僅僅保留了內(nèi)存單元,而沒有將各初始值寫入內(nèi)存單元,或者將各個內(nèi)存單元值初始化為0。注意:一個大的程序可包含多個代碼段和
16、數(shù)據(jù)段。一個匯編程序至少包含一個代碼段。8/5/202231整理課件2)CODE16和CODE32CODE16告訴匯編編譯器后面的指令序列為16位的Thumb指令。CODE32告訴匯編編譯器后面的指令序列為32位的ARM指令。語法格式: CODE16 CODE32 注意:CODE16和CODE32只是告訴編譯器后面指令的類型,該偽操作本身不進(jìn)行程序狀態(tài)的切換。8/5/202232整理課件例:AREA ChangeState, CODE, READONLY ENTRY CODE32 ;下面為32位ARM指令 LDR R0,=start+1 BX R0 CODE16 ;下面為16位Thumb指令s
17、tart MOV R1,#10 . END;切換到Thumb狀態(tài),并跳轉(zhuǎn)到start處執(zhí)行8/5/202233整理課件3)ENTRY指定程序的入口點。語法格式: ENTRY注意: 一個程序(可包含多個源文件)中至少要有一個ENTRY(可以有多個ENTRY),但一個源文件中最多只能有一個ENTRY(可以沒有ENTRY)8/5/202234整理課件4)ALIGNALIGN偽操作通過填充0將當(dāng)前的位置以某種形式對齊。語法格式:ALIGN expr,offset其中:expr:一個數(shù)字,表示對齊的單位。這個數(shù)字是2的整數(shù)次冪,范圍在20231之間。 如果沒有指定expr,則當(dāng)前位置對齊到下一個字邊界處
18、。Offset:偏移量,可以為常數(shù)或數(shù)值表達(dá)式。不指定offset表示將當(dāng)前位置對齊到以expr為單位的起始位置。8/5/202235整理課件例1:short DCB 1 ;本操作使字對齊被破壞ALIGN ;重新使其為字對齊MOV R0,1例2:ALIGN 8 ;當(dāng)前位置以2個字的方式對齊8/5/202236整理課件5)ENDEND偽操作告訴編譯器已經(jīng)到了源程序結(jié)尾。語法格式: END注意:每一個匯編源程序都必須包含END偽操作,以表明本源程序的結(jié)束。8/5/202237整理課件6)EQU EQU偽操作為數(shù)字常量、基于寄存器的值和程序中的標(biāo)號定義一個字符名稱。語法格式: name EQU ex
19、pr,type其中:name:為expr定義的字符名稱。expr:基于寄存器的地址值、程序中的標(biāo)號、32位的地址常量或者32位的常量。表達(dá)式,為常量。type:當(dāng)expr為32位常量時,可以使用type指示expr的數(shù)據(jù)的類型。取值為:CODE32CODE16DATA8/5/202238整理課件例: abcd EQU 2 ;定義abcd符號的值為2 abcd EQU label+16 ;定義abcd符號的值為(label+16) abcd EQU 0 x1c,CODE32 ;定義abcd符號的值為絕對地址 ;值0 x1c,而且此處為ARM指令8/5/202239整理課件7)EXPORT及GLO
20、BAL 聲明一個源文件中的符號,使此符號可以被其他源文件引用。語法格式:EXPORT/GLOBAL symbol weak其中:symbol:聲明的符號的名稱。(區(qū)分大小寫)weak:聲明其他同名符號優(yōu)先于本符號被引用。例: AREA example,CODE,READONLY EXPORT DoAdd DoAdd ADD R0,R0,R18/5/202240整理課件8)IMPORT及EXTERN聲明一個符號是在其他源文件中定義的。語法格式:IMPORT symbolweakEXTERN symbolweak其中:symbol:聲明的符號的名稱。8/5/202241整理課件weak:當(dāng)沒有指定
21、此項時,如果symbol在所有的源文件中都沒有被定義,則連接器會報告錯誤。當(dāng)指定此項時,如果symbol在所有的源文件中都沒有被定義,則連接器不會報告錯誤,而是進(jìn)行下面的操作。如果該符號被B或者BL指令引用,則該符號被設(shè)置成下一條指令的地址,該B或BL指令相當(dāng)于一條NOP指令。其他情況下此符號被設(shè)置成0。8/5/202242整理課件9)GET及INCLUDE將一個源文件包含到當(dāng)前源文件中,并將被包含的文件在其當(dāng)前位置進(jìn)行匯編處理。指令格式:GET filenameINCLUDE filename其中: filename:包含的源文件名,可以使用路徑信息(可包含空格)。例:GET d:armfi
22、le.s8/5/202243整理課件10)INCBIN將一個文件包含到當(dāng)前源文件中,而被包含的文件不進(jìn)行匯編處理指令格式:INCBIN filename其中:filename:被包含的文件名稱,可使用路徑信息(不能有空格)。適用情況:通常使用此偽操作將一個可執(zhí)行文件或者任意數(shù)據(jù)包含到當(dāng)前文件中。例:INCBIN d:armfile.txt8/5/202244整理課件例:編寫一具有完整匯編格式的程序,實現(xiàn)冒泡法排序功能。設(shè)無符號字?jǐn)?shù)據(jù)存放在從0 x400004開始的區(qū)域,字?jǐn)?shù)據(jù)的數(shù)目字存放在0 x400000中。AREA SORT,CODE,READONLYENTRYSTARTMOV R1,#0
23、 x400000LPSUBS R1,R1,#1BEQ EXITMOV R7,R1LDR R0,=0 x400004LP1LDR R2,R0,#4LDR R3,R0CMP R2,R3STRLO R3,R0, # -4STRLO R2,R0SUBS R7,R7,#1BNE LP1B LPEXITEND8/5/202245整理課件4.GNU下的偽操作和宏指令 GNU編譯環(huán)境下的偽操作可分為以下幾類:1) 常量編譯控制偽操作2) 匯編程序代碼控制偽操作3) 宏及條件編譯控制偽操作4) 其他偽操作8/5/202246整理課件1)常量編譯控制偽操作 8/5/202247整理課件)匯編程序代碼控制偽操作 8
24、/5/202248整理課件)宏及條件編譯控制偽操作8/5/202249整理課件)其他偽操作 8/5/202250整理課件5.ADS與GNU編譯環(huán)境下的比較 8/5/202251整理課件8/5/202252整理課件4. ARM ATPCS 1. 基本ATPCS ATPCS就是ARM程序和Thumb程序中子程序調(diào)用的基本規(guī)則。ATPCS規(guī)定了一些子程序間調(diào)用的基本規(guī)則。 子程序調(diào)用過程中寄存器的使用規(guī)則 數(shù)據(jù)棧的使用規(guī)則 參數(shù)的傳遞規(guī)則。8/5/202253整理課件相對于其他類型的ATPCS,滿足基本ATPCS的程序的執(zhí)行速度更快,所占用的內(nèi)存更少。 它不能提供以下的支持: 1) ARM程序和Th
25、umb程序相互調(diào)用; 2) 數(shù)據(jù)以及代碼的位置無關(guān)的支持; 3)子程序的可重入性; 4) 數(shù)據(jù)棧檢查的支持。8/5/202254整理課件1)寄存器的使用規(guī)則 寄存器的使用必須滿足下面的規(guī)則:子程序間通過寄存器 R0一R3來傳遞參數(shù)在子程序中,使用寄存器R4R11來保存局部變量 寄存器R12用作子程序間scratch寄存器(用于保存SP,在函數(shù)返回時使用該寄存器出棧),記作ip。在子程序間的連接代碼段中常有這種使用規(guī)則。8/5/202255整理課件寄存器R13用作數(shù)據(jù)棧指針,記作sp。 寄存器R14稱為連接寄存器,記作lr。 寄存器R15是程序計數(shù)器,記作pc。它不能用作其他用途。8/5/202
26、256整理課件 ATPCS中各寄存器的使用規(guī)則及其名稱8/5/202257整理課件2)數(shù)據(jù)棧使用規(guī)則 棧指針通??梢灾赶虿煌奈恢?。當(dāng)棧指針指向棧頂元素(即最后一個入棧的數(shù)據(jù)元素)時,稱為FULL棧;當(dāng)棧指針指向與棧頂元素(即最后一個入棧的數(shù)據(jù)元素)相鄰的一個可用數(shù)據(jù)單元時,稱為EMPTY棧。 數(shù)據(jù)棧的增長方向也可以不同。當(dāng)數(shù)據(jù)棧向內(nèi)存地址減小的方向增長時,稱為DESCENDING棧,當(dāng)數(shù)據(jù)棧向內(nèi)存地址增加的方向增長時,稱為ASCENDING棧。8/5/202258整理課件 綜合這兩種特點可以有以下4種數(shù)據(jù)棧。FD Full DescendingED Empty DescendingFA Fu
27、ll AscendingEA Empty Ascending ATPCS規(guī)定數(shù)據(jù)棧為FD類型,并且對數(shù)據(jù)棧的操作是8字節(jié)對齊的。8/5/202259整理課件3) 數(shù)傳遞規(guī)則 (1)參數(shù)個數(shù)可變的子程序參數(shù)傳遞規(guī)則: 對于參數(shù)個數(shù)可變的子程序,當(dāng)參數(shù)不超過4個時,可以使用寄存器R0R3來傳遞參數(shù);當(dāng)參數(shù)超過4個時,還可以使用數(shù)據(jù)棧來傳遞參數(shù)。 在參數(shù)傳遞時,將所有參數(shù)看作是存放在連續(xù)的內(nèi)存字單元中的宇數(shù)據(jù)。然后,依次將各字?jǐn)?shù)據(jù)傳送到寄存器R0、Rl、R2、R3中,如果參數(shù)多于4個,將剩余的字?jǐn)?shù)據(jù)傳送到數(shù)據(jù)棧中,入棧的順序與參數(shù)順序相反,即最后一個字?jǐn)?shù)據(jù)先入棧。8/5/202260整理課件(2)參
28、數(shù)個數(shù)固定的子程序參數(shù)傳遞規(guī)則 對于參數(shù)個數(shù)固定的子程序,參數(shù)傳遞與參數(shù)個數(shù)可變的子程序參數(shù)傳遞規(guī)則不同。如果系統(tǒng)包含浮點運算的硬件部件,浮點參數(shù)將按照下面的規(guī)則傳遞: 各個浮點參數(shù)按順序處理。 為每個浮點參數(shù)分配FP寄存器。 分配的方法是,滿足該浮點參數(shù)需要的且編號最小的一組連續(xù)的FP寄存器。第一個整數(shù)參數(shù),通過寄存器R0R3來傳遞。其他參數(shù)通過數(shù)據(jù)棧傳遞。8/5/202261整理課件(3)子程序結(jié)果返回規(guī)則 結(jié)果為一個32位的整數(shù)時,可以通過寄存器R0返回。 結(jié)果為一個64位整數(shù)時,可以通過寄存器R0和R1返回,依次類推。 結(jié)果為一個浮點數(shù)時,可以通過浮點運算部件的寄存器f0、d0或者s0
29、來返回。 結(jié)果為復(fù)合型的浮點數(shù)(如復(fù)數(shù))時,可以通過寄存鉛f0fn或者d0dn來返回。 對于位數(shù)更多的結(jié)果,需要通過內(nèi)存來傳遞。8/5/202262整理課件2.ARM和Thumb程序混合使用 在編譯和匯編時,使用/interwork告訴編譯器生成的目標(biāo)代碼遵守支持ARM程序和Thumb程序混合使用的ATPCS。它用在以下場合: 1) 程序中存在ARM程序調(diào)用Thumb程序的情況。 2) 程序中存在Thumb程序調(diào)用ARM程序的情況。 3) 需要連接器來進(jìn)行ARM狀態(tài)和Thumb狀態(tài)切換的情況。8/5/202263整理課件例如:進(jìn)行狀態(tài)切換的匯編程序 ARMADR r0,ThumbProg+1
30、BX r0 ;跳到ThumbProg,程序切換到Thumb狀志THUMB ;THUMB指示編譯器后面的為Thumb指令ThumbProg: .ADR r0,ARMProgBX r0 ;跳轉(zhuǎn)到ARMProg,程序切換到ARM狀態(tài)ARM ;ARM指示編譯器后面的為ARM指令A(yù)RMProg:MOV r4, #48/5/202264整理課件4. ARM程序設(shè)計. ARM匯編語言程序設(shè)計 ARM匯編語言以段(section)為單位組織源文件。 段是相對獨立的、具有特定名稱的、不可分割的指令或數(shù)據(jù)序列。 段又可以分為代碼段和數(shù)據(jù)段,代碼段存放執(zhí)行代碼,數(shù)據(jù)段存放代碼運行時需要用到的數(shù)據(jù)。一個ARM源程序至
31、少需要一個代碼段,大的程序可以包含多個代碼段和數(shù)據(jù)段。8/5/202265整理課件) ARM匯編中的文件格式 ARM源程序文件(可簡稱為源文件)可以由任意一種文本編輯器來編寫程序代碼,它一般為文本格式。在ARM程序設(shè)計中,常用的源文件可簡單分為以下幾種. 8/5/202266整理課件2) ARM匯編語言語句格式 ARM匯編語言語句格式如下所示:symbol instruction | directive | pseudo-instruction;comment 其中: instruction為指令。 directive為偽操作。 pseudo-instrkeuction為偽指令。 symbol
32、為符號。 comment為語句的注釋。 8/5/202267整理課件 ARM匯編語言中,符號可代表地址、變量和數(shù)字常量。數(shù)字常量一般有3種表達(dá)方式: 十進(jìn)制數(shù),如79、4等。 十六進(jìn)制數(shù),以0 x和&開頭,如0 x345、0 xFB。 n進(jìn)制數(shù),用n_XXX表示,如2_01100101、8_5642。 標(biāo)號:表示程序中的指令或數(shù)據(jù)地址的符號,代表地址。局部標(biāo)號:主要用于局部范圍代碼。8/5/202268整理課件)ARM匯編語言程序格式 ADS環(huán)境下ARM匯編語言源程序的基本結(jié)構(gòu): AREA EXAMPLE,CODE,READONLY ENTRY start MOV r0,#10 MOV r1,#3 ADD r0,r0,r1 END 上述程序的程序體部分實現(xiàn)了一個簡單的加法運算。 8/5/202269整理課件GNU環(huán)境下ARM匯編語言源程序的基本結(jié)構(gòu):.equx, 45 /* 定義變量x,并賦值為45*/.equy, 64 /* 定義變量y,并賦值為64*/.equstack_top, 0 x1000/* 定義棧頂0 x1000*/.global _start.text_start: /*程序代碼開始標(biāo)志*/ MOV sp, #stack_top MOV r0, #x /* x的值放入R0 */ MOV
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧工業(yè)大學(xué)《測量學(xué)2》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江省金華市2024年中考數(shù)學(xué)模擬考試試卷含答案
- 喀什大學(xué)《幼兒園教師職業(yè)道德》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇警官學(xué)院《電子商務(wù)數(shù)據(jù)分析與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉安幼兒師范高等專科學(xué)?!督ㄖz影初步》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南理工學(xué)院《線天線與面天線》2023-2024學(xué)年第一學(xué)期期末試卷
- 高考物理模擬測試題(有答案)
- 重慶外語外事學(xué)院《軟件測試與質(zhì)量保證》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶電子工程職業(yè)學(xué)院《地理研究方法與寫作》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江建設(shè)職業(yè)技術(shù)學(xué)院《鄉(xiāng)土文化與鄉(xiāng)村教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版青島市勞動合同
- 中小學(xué)十五五發(fā)展規(guī)劃(2025-2030)
- Unit 7 同步練習(xí)人教版2024七年級英語上冊
- 電廠員工三級安全培訓(xùn)(完美版)課件
- 2024年中考復(fù)習(xí)-數(shù)學(xué)(廣州專用)(解析版)
- 第三十六屆全國電力行業(yè)風(fēng)力發(fā)電運行檢修職業(yè)技能競賽基礎(chǔ)理論題庫附有答案
- 2024年紀(jì)檢監(jiān)察綜合業(yè)務(wù)知識題庫含答案(研優(yōu)卷)
- 科室醫(yī)療質(zhì)量與安全管理小組工作制度
- 中華民族共同體概論課件第五講大一統(tǒng)與中華民族共同體初步形成(秦漢時期)
- 初二生地會考試卷及答案-文檔
- 私營企業(yè)廉潔培訓(xùn)課件
評論
0/150
提交評論