第32章匯編語言程序設(shè)計基礎(chǔ)與Embest模擬開發(fā)流程課件_第1頁
第32章匯編語言程序設(shè)計基礎(chǔ)與Embest模擬開發(fā)流程課件_第2頁
第32章匯編語言程序設(shè)計基礎(chǔ)與Embest模擬開發(fā)流程課件_第3頁
第32章匯編語言程序設(shè)計基礎(chǔ)與Embest模擬開發(fā)流程課件_第4頁
第32章匯編語言程序設(shè)計基礎(chǔ)與Embest模擬開發(fā)流程課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章基于ARM的嵌入式程序設(shè)計1ARM匯編語言的偽操作、宏指令與偽指令

--ARM匯編語言程序設(shè)計2ARM匯編程序的結(jié)構(gòu)

.equ x,45 /*x=45*/.equ y,64 /*y=64*/.equ z,87 /*z=87*/.equ stack_top,0x1000 /*definethetopaddressforstacks*/.global_start.text_start: /*codestart*/ mov r0,#x /*putxvalueintoR0*/ mov r0,r0,lsl#8 /*R0=R0<<8*/ mov r1,#y /*putyvalueintoR1*/ add r2,r0,r1,lsr#1/*R2=(R1>>1)+R0*/

stop: b stop /*endthecode,cycling*/.end4.1ARM匯編語言的偽操作、宏指令與偽指令

偽操作:ARM匯編語言程序里的一些特殊指令助記符,它的作用主要是為完成匯編程序做各種準(zhǔn)備工作。宏指令:一段獨立的程序代碼,可以插在源程序中,它通過偽操作來定義。偽操作、宏指令一般和編譯程序有關(guān)。因此ARM匯編語言的偽操作、宏指令在不同的編譯環(huán)境下有不同的編寫形式和規(guī)則。目前常用的ARM編譯開發(fā)環(huán)境有兩種ADSIDE開發(fā)環(huán)境:它由ARM公司開發(fā),使用了CodeWarrior公司的編譯器;集成了GNU開發(fā)工具的IDE開發(fā)環(huán)境:它由GNU的匯編器as、交叉編譯器gcc、和鏈接器ld等組成。4.1.1GNU編譯環(huán)境下的ARM偽操作常量編譯控制偽操作1.byte用于分配一段字節(jié)內(nèi)存單元,并用偽操作中的expr初始化。語法格式.byteexpr{,expr}….byte21,48,89,0x13,0xff 4.1.1GNU編譯環(huán)境下的ARM偽操作常量編譯控制偽操作1.word.long.int用于分配一段字內(nèi)存單元,并用偽操作中的expr初始化。語法格式.wordexpr{,expr}….word21,0x1,10033,0x77ff2255 4.1.1GNU編譯環(huán)境下的ARM偽操作Src:.long1,2,3,4,5,6 /*定義一個數(shù)據(jù)區(qū),以src為起始地址*/ /*每個數(shù)據(jù)均分配4B空間*/ 4.1.1GNU編譯環(huán)境下的ARM偽操作字符編譯控制偽操作1.equ及.set.equ偽操作用于為數(shù)字常量、基于寄存器的值和程序中的標(biāo)號定義一個字符名稱。.set作用同.equ。語法格式.equsymbol,expr.equ x,45 /*定義變量x,并賦值為45*/2.global,.globl,.extern聲明一個符號可以被其他文件引用。相當(dāng)于聲明了一個全局變量,語法格式 .globalsymbol其中:symbol為聲明的符號的名稱,它是區(qū)分大小寫的。示例:.global_start.externMain匯編程序代碼控制偽操作1.text.text偽操作將操作符開始的代碼編譯到代碼段或代碼段子段(subsection)。語法格式.text{subsection}示例.text2.data作用:.data偽操作將操作符開始的數(shù)據(jù)編譯到數(shù)據(jù)段或數(shù)據(jù)段子(subsection)。語法格式.data{subsection}示例.datasrc: .long1,2,3,4,5/*定義了一個數(shù)據(jù)區(qū),以src為起始地址*/dst: .long0,0,0,0,0/*定義了一個數(shù)據(jù)區(qū),以src為起始地址*/3.code16|32作用:.code偽操作用于選擇當(dāng)前匯編指令的指令集。參數(shù)16選擇Thumb指令集,參數(shù)32選擇ARM指令集。語法格式.code16.code32.thumb同.code16。.arm同.code32。.code32

ADRr0,Tstart+1BXr0

NOP.code16Tstart:MOVr0,#10MOVr1,#3.arm

ADRr0,Tstart+1BXr0

NOP.thumbTstart:MOVr0,#10MOVr1,#34.end

作用:標(biāo)記匯編文件的結(jié)束行,即標(biāo)號后的代碼不作處理。語法格式.end5.include作用:.include偽操作用于將一個源文件包含到當(dāng)前源文件中。一般是將該源文件用到的庫文件包含到本源文件中。語法格式.include“”#include"44blib.h"4.1.2宏編譯控制偽操作.macro偽操作標(biāo)識宏定義的開始,.endm標(biāo)識宏定義的結(jié)束。用.macro及.endm定義一段代碼,稱為宏定義體,這樣在程序中就可以通過宏指令多次調(diào)用該代碼段。語法格式.macromacroname{parameter…}… /*代碼段*/.endm其中,宏參數(shù)的定義可以使用逗號分隔,宏字符參數(shù)可以使用斜線“\字符”直接使用。.macro.endm.macroHANDLERLabel /*宏名為HANDLER,有一個參數(shù)Label*/sub sp,sp,#4stmfdsp!,{r0}ldrr0,=\Labelldrr0,[r0]strr0,[sp,#4]ldmfdsp!,{r0,pc}.endm /*宏定義體結(jié)束*/

HandlerRTC: HANDLERHandleRTCHandlerRTC:

sub sp,sp,#4stmfdsp!,{r0}ldrr0,=HandleRTCldrr0,[r0]strr0,[sp,#4]ldmfdsp!,{r0,pc}

HandlerRTC: HANDLERHandleRTC4.1.3ARM偽指令1.ADR(小范圍的地址讀取偽指令)該指令將基于PC的地址值或基于寄存器的地址值讀取到寄存器中。.armADRr0,Tstart+1BXr0

NOP.thumbTstart:MOVr0,#10MOVr1,#32.LDR大范圍的地址讀取偽指令當(dāng)需要讀取到寄存器中的數(shù)據(jù)超過了MOV及MVN指令可以操作的范圍時,可以使用LDR偽指令將該數(shù)據(jù)讀取到寄存器中。LDR r0,=0x78100000LDR r1,=0x2A8STR r1,[r0]寄存器賦值時經(jīng)常使用Ldrr0,=WTCON /*watchdogdisable*/Ldrr1,=0x0 Strr1,[r0]//為WTCON寄存器賦值0NOP空操作偽指令使用格式:

nop

nop

4.2ARM匯編程序的結(jié)構(gòu)ARM匯編源文件*.sARM匯編頭文件*.a注釋行:@.....或/*……..*/4.2ARM匯編程序的結(jié)構(gòu).equ x,45 /*定義變量x,并賦值為45*/.equ stack_top,0x1000 /*定義棧頂0x1000*/.global_start.text_start: /*程序代碼開始標(biāo)志*/MOV sp,#stack_topMOVr0,#x /*x的值放入R0*/STR r0,[sp] /*x保存到堆棧地址0x1000中*/stop:B stop/*程序結(jié)束,進入死循環(huán)*/.end開發(fā)流程工程建立

源文件工程配置Buildremoteconnect

C語言程序*.c匯編源程序*.sdownload調(diào)試&運行程序執(zhí)行起始地址程序入口點是:_start,默認(rèn)地址是0x8000調(diào)試配置設(shè)置調(diào)試信息文件設(shè)置下載文件設(shè)置下載到RAM區(qū)地址改變代碼段地址的方法鏈接選項:-Ttext0x0Debug的download填入地址鏈接腳本鏈接腳本是用來控制連接過程,連接腳本是用連接腳本語言來實現(xiàn),控制如何放在輸出文件中,以及放入存儲器的什么位置。最簡單的連接腳本只包含一個SECTION語句,控制文件在存儲器中地址的分配。鏈接腳本的后綴名為.ld鏈接腳本舉例SECTIONS{ .=0x1000; .text:{*(.text)} .=0x80000; .data:{*(.data)} .rodata:{*(.rodata)} .bss:{*(.bss)}}復(fù)位運行停止重新運行單步進入函數(shù)單步執(zhí)行單步跳出函數(shù)執(zhí)行到光標(biāo)設(shè)置斷點禁止斷點控制程序執(zhí)行實驗一ARM匯編指令實驗實驗二

ARM處理器工作模式實驗

實驗一ARM匯編指令實驗實驗內(nèi)容:1.完成將src:處的數(shù)據(jù)拷貝到dst:處。src:

.long1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4dst:.long0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,02.完成數(shù)據(jù)運算:結(jié)果存入R10寄存器中。要求:定義變量x=45,y=32,z=7

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論