標(biāo)題: ARM嵌入式匯編語(yǔ)言程序設(shè)計(jì)重點(diǎn) [打印本頁(yè)]
作者: qq8426030 時(shí)間: 2014-7-14 15:26
標(biāo)題: ARM嵌入式匯編語(yǔ)言程序設(shè)計(jì)重點(diǎn)
ARM嵌入式匯編語(yǔ)言程序設(shè)計(jì)重點(diǎn)
實(shí)驗(yàn)?zāi)康?font face="Times New Roman">
l 熟悉ARM微處理器指令系統(tǒng);
l
學(xué)習(xí)ARM嵌入式匯編程序設(shè)計(jì)的編程重點(diǎn)。
實(shí)驗(yàn)設(shè)備
l 硬件:PC機(jī)。
l
軟件:ADS1.2集成開(kāi)發(fā)環(huán)境,Windows 2000/XP/2003。
實(shí)驗(yàn)內(nèi)容
l 了解多分支程序的編寫(xiě)方法; l
掌握ARM程序的運(yùn)行和調(diào)試。
實(shí)驗(yàn)原理
(1)Arm 體系結(jié)構(gòu)3種執(zhí)行流程 1 順序執(zhí)行:在正常執(zhí)行過(guò)程中,每執(zhí)行一條ARM指令,程序計(jì)數(shù)器(PC)的值加4個(gè)字節(jié);每執(zhí)行一條Thumb指令,程序計(jì)數(shù)器 (PC)加2個(gè)字節(jié)。整個(gè)過(guò)程按順序執(zhí)行。 2 跳轉(zhuǎn)執(zhí)行:程序可以跳轉(zhuǎn)到特定的地址標(biāo)號(hào)處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行。 3 異常中斷執(zhí)行:在進(jìn)入異常中斷處理程序時(shí),要保存被中斷程序的執(zhí)行現(xiàn)場(chǎng),從異常中斷
處理程序退出時(shí),要恢復(fù)被中斷程序的執(zhí)行現(xiàn)場(chǎng)。
(2)跳轉(zhuǎn)表
多分支結(jié)構(gòu)是程序中常見(jiàn)的結(jié)構(gòu),若給出調(diào)用號(hào)來(lái)調(diào)用子程序,一般用查表方法,查到子程序的地址,轉(zhuǎn)到相應(yīng)子程序。注意:讀跳轉(zhuǎn)表時(shí)不要超過(guò)表的末端,檢查超限是必需的。例如:
BL JUMPTABLE …
JUMPTABLE ADR R1,SUBTABLE
CMP R0,#SUBMAX ;檢查超限
BHI stop ;若超限,則程序結(jié)束 LDR PC,[R1,R0,LSL #2];否則跳轉(zhuǎn)到表中 stop MOV R0,#0X18
LDR R1,=0X20026
SWI 0x123456
SUBTABLE DCD SUB0 ;子程序表入口 DCD SUB1 DCD SUB2
實(shí)驗(yàn)參考程序
利用跳轉(zhuǎn)表實(shí)現(xiàn)多分支轉(zhuǎn)移。
AREA JUMP,CODE,READONLY;設(shè)置本段程序的名稱(chēng)(JUMP)及屬性
num EQU 2 ;跳轉(zhuǎn)表中的子程序個(gè)數(shù) ENTRY ;程序執(zhí)行的入口點(diǎn)
START ;設(shè)置3個(gè)參數(shù),然后調(diào)用子程序arithfunc,進(jìn)行算術(shù)運(yùn)算 MOV R0,#0
MOV R1,#3 MOV R2,#2
BL arithfunc ;調(diào)用子程序arithfunc
STOP ;調(diào)用angel_SWIreason_ReportException,從應(yīng)用程序中退出 MOV R0,#0X18
LDR R1,=0X20026 SWI 0x123456
arithfunc ;子程序arithfunc入口點(diǎn)
CMP R0,#num;判斷選擇子程序的參數(shù)是否在有效范圍之內(nèi) MOVHS PC,LR
ADR R3,JumpTable;讀取跳轉(zhuǎn)表的基地址
LDR PC,[R3,R0,LSL #2];根據(jù)參數(shù)R0的值跳轉(zhuǎn)到相應(yīng)的子程序
;跳轉(zhuǎn)表JumpTable中保存了各個(gè)子程序的地址, 在這里有兩個(gè)子程序DoAdd和DoSub ;當(dāng)參數(shù)R0為0時(shí)上面的代碼將選擇DoAdd ;當(dāng)參數(shù)R0為1時(shí)上面的代碼將選擇DoSub JumpTable
DCD DoAdd DCD DoSub
DoAdd 子程序DoAdd執(zhí)行加法操作 ADD R0,R1,R2
MOV PC,LR
DoSub 子程序DoSub執(zhí)行減法操作 SUB R0,R1,R2 MOV PC,LR END;結(jié)束匯編
實(shí)驗(yàn)思考題
1. 修改下列C程序段代碼為ARM匯編程序段代碼。
do { x--; } while(x>0); 這里設(shè)x存放在R0 中(x為無(wú)符號(hào)整數(shù)) DOWHILE_L1 ADD R0,R0,#-1 ; 循環(huán)體,x--
DOWHILE_L2 MOVS R0,R0 ; R0 <= R0,并影響條件碼標(biāo)志
BNE DOWHILE_L1 ; 若R0不為0(即x不為0),則繼續(xù)循環(huán)
DOWHILE_END NOP
2. 編寫(xiě)一簡(jiǎn)單ARM匯編程序段,實(shí)現(xiàn)1+2+…+100的運(yùn)算。 AREA EXAMPLE1, CODE,READONLY ;定義一個(gè)代碼段,名稱(chēng)為EXAMPLE1 ENTRY ;入口
MOV R0,#0 ;給R0賦值為0
MOV R1,#0 ;用R1來(lái)存放1~100的總和,初始化為0
START ADD R0,R0,#1 ;用來(lái)判斷終止的,每次加1 ADD R1,R1,R0 ;從1加到100
CMP R0,#100 ;執(zhí)行R0-100的操作,但不保存,只影響CPSR的值 BLT START ;帶符號(hào)數(shù)小于時(shí)跳轉(zhuǎn)到START處執(zhí)行 STOP B STOP ;死循環(huán) END
全面承快速樣板及小批量貼片,后焊加工業(yè)務(wù),樣板2-3天完成,加快24小時(shí), BGA反修,植球及更換。電話:0755-2655271 QQ: 2643383166,網(wǎng)站
同樣的業(yè)務(wù)我們比質(zhì)量;同樣的質(zhì)量我們比價(jià)格;同樣的價(jià)格我們比時(shí)間,同樣的時(shí)間我們比服務(wù);同樣的服務(wù)我們比信譽(yù),麥斯艾姆,你值得信賴(lài)的樣板貼片專(zhuān)家。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |