GNU環(huán)境下的偽指令_第1頁
GNU環(huán)境下的偽指令_第2頁
GNU環(huán)境下的偽指令_第3頁
GNU環(huán)境下的偽指令_第4頁
GNU環(huán)境下的偽指令_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

3.GNUARM匯編偽操作符號定義偽操作數據定義偽操作匯編與反匯編代碼控制偽操作預定義控制偽操作1)符號定義偽操作(1)常量定義偽操作.equ或.set格式.equ symbol,expr.set symbol,expr說明Symbol-要指定的名稱,它可以是以前定義過的符號;Expr-表示數字常量或程序中的標號。示例.equ Undef_Mode,0x1B.equ

Mode_Mask,0x1F.equ NOINT, 0xC0.global_start.text_start:MRS R0,CPSR @讀CPSR BIC R0,R0,#Mode_Mask

ORR R1,R0,#Undef_Mode|NOINT @修改

MSR CPSR_cxsf,R1 @進入未定義模式Stop: B Stop @使程序停在此處查看結果.end(2)常量定義偽操作.equiv格式:.equivsymbol,expr說明Symbol-要指定的名稱,它不可以是以前定義過的符號;Expr-表示數字常量或程序中的標號。(3)聲明全局變量偽操作.global或.globl格式.global symbol.globl symbol說明Symbol-為要聲明的全局變量名稱,該變量可以被其它文件引用。(4)聲明外部變量偽操作.extern格式:.extern symbol說明symbol-為要聲明的外部變量名稱,該變量在其它文件中被定義。例如:在C編程中要引用匯編中定義的函數或變量,則要在C中用extern進行聲明引用。

GNU

ARM

編譯環(huán)境下,在匯編程序中要使用.global偽操作聲明匯編程序為全局的函數,可被外部函數調用,同時在C程序中要用關鍵

extern

聲明要調用的2)數據定義偽操作(1)字節(jié)定義.byte格式:.byte expr{,expr}…說明expr-數字表達式或程序中的標號。(2)半字定義.hword或.short格式.hword

expr{,expr}…..short expr{,expr}…說明expr-數字表達式或程序中的標號。(3)字定義.word或.int或.long格式.word expr{,expr}…..int

expr{,expr}….long expr{,expr}…說明expr-數字表達式或程序中的標號。(4)雙字定義.quad格式:.quad expr{,expr}…說明expr-數字表達式。(6)字符串定義.ascii和.asciz或.string格式.ascii

expr{,expr}….asciz

expr{,expr}….stringexpr{,expr}…說明expr-表示字符串。(5)四字定義.octa

格式:.octa expr{,expr}…說明expr-數字表達式。(7)單精度浮點數定義.float或.single格式.float expr{,expr}…..single expr{,expr}….說明Expr-為32位的IEEE單精度浮點數。(8)雙精度浮點數定義.double格式:.double expr{,expr}…說明expr-為64位的IEEE雙精度浮點數。(9)聲明數據緩沖池.ltorg格式:.ltorg說明在使用LDR偽指令時,要在適當的位置加入.ltorg聲明數據緩存池,這樣就會把要加載的數據保存到緩存池中,再使用ARM加載指令讀出,如果沒有使用.ltorg聲明數據緩沖池,則匯編器會在程序末尾自動聲明。3)匯編與反匯編代碼控制偽操作(1)指令集類型標識偽操作.arm.code32.thumb.code16(2)段屬性定義偽操作格式:.sectionexpr說明expr-為段屬性,可以是.text、.data、.bss中的一個。(3)段起始聲明偽操作格式.text.data.bss(4)對齊方式設置偽操作.align或.balign格式.align {alignment}{,fill}.balign {alignment}{,fill}說明alignment-是一個數值表達式,用于指定對齊方式,其取值在0~15范圍內;默認為字對齊。Fill-用來指定進行填充的數據。(5)代碼位置設置偽操作.org

格式:.orgoffset{,expr}

說明offset-是一個數值表達式,表示地址偏移量;Expr-用來指定進行填充的數據。4)預定義控制偽操作匯編器在對程序代碼進行編譯時,會根據匯編控制偽操作的定義情況對程序進行編譯,常用的有條件編譯、宏定義和文件包含(1)文件包含偽操作.include格式:.include "file_name"說明用于將一個源文件包含到當前的源文件中,所包含的文件在.include指令的位置處進行匯編處理。(2)條件編譯偽操作.if格式.if logical_expression程序代碼段A {.else程序代碼段B} ..endif

(3)宏定義偽操作.macro格式.macro{ macroname {parameter{,parameter}…}程序代碼段.endm

4.2ARM匯編語言的語句格式1.ARM編譯環(huán)境下匯編語句格式2.ARM編譯環(huán)境下匯編語句中的符號規(guī)則3.GNU環(huán)境下ARM匯編語句格式4.GNU環(huán)境下ARM匯編程序編譯

1.ARM編譯環(huán)境下匯編語句格式{程序標號}{指令}{;注釋}{程序標號}{偽操作}{;注釋}{程序標號}{偽指令}{;注釋}2.ARM編譯環(huán)境下匯編語句中的符號規(guī)則1)符號命名規(guī)則符號由大小寫字母、數字、下劃線組成,且符號是區(qū)分大小寫的。符號在其作用范圍內必須是唯一的。程序中的符號不要與指令助記符或者偽操作同名。局部標號可以用數字開頭,其他的標號不能。2)變量數字變量邏輯變量字符串變量3)常量十進制數,如535、246。十六進制數,如0x64、0xff00。n_XXX,n表示n進制數,從2~9,XXX是具體的數字。例如:8_3777字符常量用一對單引號括起來,包括一個單字符或者標準C中的轉義字符。例如‘A’、‘\n’。字符串常量由一對雙引號以及由它括住的一組字符串組成,包括標準C中的轉義字符。如果需要使用雙引號”或字符$,則必須用””和$$代替。4)字符串表達式操作字符串表達式一般由字符串常量、字符串變量、運算符和括號構成。與字符串表達式相關的運算符:

LEN:計算字符串長度運算符。

CHR:ASCII碼轉換運算符。STR:字符串轉換運算符。LEFT:字符串取左運算符。RIGHT:字符串取右運算符。CC:字符串連接運算符。例如:abcSETS"one""doublequote"improbSETS"literal":CC:(abc:LEFT:4)6)局部標號局部標號是一個0~99之間的十進制數字,可重復定義。局部標號后面可以緊接一個通常表示該局部變量作用范圍的符號。局部變量的作用范圍為當前段,也可以用偽操作ROUT來定義局部標號的作用范圍。局部變量命名語法:n{routname}局部變量引用的語法格式:%{F|B}{A|T}n{routname}匯編器默認搜索:先向后搜索,再向前搜索。從當前層次到宏最高層次,比當前層次低的層次不再搜索。n是局部標號的數字號。routname是當前局部范圍的名稱。%表示引用操作。F指示匯編器只向前搜索。B指示匯編器只向后搜索。A指示匯編器搜索宏的所有嵌套層次。T指示匯編器搜索宏的當前層次。3.GNU環(huán)境下ARM匯編語句格式{程序標號:}{指令}{@注釋}{程序標號:}{偽操作}{@注釋}{程序標號:}{偽指令}{@注釋}4.GNU環(huán)境下ARM匯編程序編譯1)預處理GNU匯編器as的內部預處理包括:移除多余的間隔符及代碼中的所有注釋,并將字符常量轉換為數字值。它不作宏處理和文件包含處理,但這些事情可以交由gcc編譯器去做,文件包含可以用.include偽指令來實現(xiàn)。2)注釋GNUARMAssembly可識別的注釋方式有:C風格多行注釋符/*...*/或GNU單行注釋符“@”或“#”。3)符號與C語言基本一致,符號名由字母、數字以及'_'和'.'組成,大小寫敏感。4)段與重定位鏈接器ld用于把多個目標文件合并為一個可執(zhí)行文件。匯編器as生成的目標文件都假定從地址0開始,ld為其指定最終的地址。鏈接器ld把目標文件中的每個section都作為一個整體,為其分配運行的地址。

在ARM(Thumb)匯編語言程序中以程序段為單位組織代碼。段是相對獨立的指令或數據序列,具有特定的名稱。段可以分為代碼段(CodeSection)和數據段(DataSection),代碼段的內容為執(zhí)行代碼,數據段存放代碼運行時需要用到的數據。一個匯編程序至少應該有一個代碼段,當程序較長時,可以分割為多個代碼段和數據段,多個段在程序編譯鏈接時最終形成一個可執(zhí)行的映像文件??蓤?zhí)行映像文件通常由以下幾部分構成。一個或多個代碼段,代碼段的屬性為只讀。零個或多個數據段,數據段的屬性為可讀寫。數據段可是被初始化的數據段或沒有被初始化的數據段(ZI,zeroinitialized)。4.3匯編語言的程序格式311.在ARM集成開發(fā)環(huán)境下AREAFCTRL,CODE,READONLY;聲明代碼FCTRLENTRY ;標識程序入口START MOV R0,#0X3000;初始化寄存器

MOV R1,#0X10000001 MOVR2,#100loop_1 STR R1,[R0],#4 ADDR1,R1,#1 SUBSR2,R2,#1 BNE loop_1

MOV R0,#0X3000 MOV R2,#100 MOV R9,#0 MOV R8,#0 loop_2 LDR R1,[R0],#4 ADDS R8,R1,R8 ADC R9,R9,#0 SUBS R2,R2,#1 BNE loop_2Stop B Stop END ;文件結束332.在GNUARM開發(fā)環(huán)境下.global _start.text_start: MOV R0,#0X3000@初始化寄存器

MOV R1,#0X10000001 MOV R2,#100loop_1: STR R1,[R0],#4 ADD R1,R1,#1 SUBS R2,R2,#1 BNE loop_1

MOV R0,#0X3000 MOV R2,#100 MOV R9,#0 MOV R8,#0 loop_2: LDR R1,[R0],#4 ADDSR8,R1,R8

ADC R9,R9,#0

SUBS R2,R2,#1 BNE loop_2Stop: B Stop.end @文件結束4.4ADT

溫馨提示

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

評論

0/150

提交評論