標(biāo)題: ARM嵌入式匯編語言程序設(shè)計重點 [打印本頁]
作者: qq8426030 時間: 2014-7-14 15:26
標(biāo)題: ARM嵌入式匯編語言程序設(shè)計重點
ARM嵌入式匯編語言程序設(shè)計重點
實驗?zāi)康?font face="Times New Roman">
l 熟悉ARM微處理器指令系統(tǒng);
l
學(xué)習(xí)ARM嵌入式匯編程序設(shè)計的編程重點。
實驗設(shè)備
l 硬件:PC機。
l
軟件:ADS1.2集成開發(fā)環(huán)境,Windows 2000/XP/2003。
實驗內(nèi)容
l 了解多分支程序的編寫方法; l
掌握ARM程序的運行和調(diào)試。
實驗原理
(1)Arm 體系結(jié)構(gòu)3種執(zhí)行流程 1 順序執(zhí)行:在正常執(zhí)行過程中,每執(zhí)行一條ARM指令,程序計數(shù)器(PC)的值加4個字節(jié);每執(zhí)行一條Thumb指令,程序計數(shù)器 (PC)加2個字節(jié)。整個過程按順序執(zhí)行。 2 跳轉(zhuǎn)執(zhí)行:程序可以跳轉(zhuǎn)到特定的地址標(biāo)號處執(zhí)行,或者跳轉(zhuǎn)到特定的子程序處執(zhí)行。 3 異常中斷執(zhí)行:在進入異常中斷處理程序時,要保存被中斷程序的執(zhí)行現(xiàn)場,從異常中斷
處理程序退出時,要恢復(fù)被中斷程序的執(zhí)行現(xiàn)場。
(2)跳轉(zhuǎn)表
多分支結(jié)構(gòu)是程序中常見的結(jié)構(gòu),若給出調(diào)用號來調(diào)用子程序,一般用查表方法,查到子程序的地址,轉(zhuǎn)到相應(yīng)子程序。注意:讀跳轉(zhuǎn)表時不要超過表的末端,檢查超限是必需的。例如:
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
實驗參考程序
利用跳轉(zhuǎn)表實現(xiàn)多分支轉(zhuǎn)移。
AREA JUMP,CODE,READONLY;設(shè)置本段程序的名稱(JUMP)及屬性
num EQU 2 ;跳轉(zhuǎn)表中的子程序個數(shù) ENTRY ;程序執(zhí)行的入口點
START ;設(shè)置3個參數(shù),然后調(diào)用子程序arithfunc,進行算術(shù)運算 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入口點
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中保存了各個子程序的地址, 在這里有兩個子程序DoAdd和DoSub ;當(dāng)參數(shù)R0為0時上面的代碼將選擇DoAdd ;當(dāng)參數(shù)R0為1時上面的代碼將選擇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é)束匯編
實驗思考題
1. 修改下列C程序段代碼為ARM匯編程序段代碼。
do { x--; } while(x>0); 這里設(shè)x存放在R0 中(x為無符號整數(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. 編寫一簡單ARM匯編程序段,實現(xiàn)1+2+…+100的運算。 AREA EXAMPLE1, CODE,READONLY ;定義一個代碼段,名稱為EXAMPLE1 ENTRY ;入口
MOV R0,#0 ;給R0賦值為0
MOV R1,#0 ;用R1來存放1~100的總和,初始化為0
START ADD R0,R0,#1 ;用來判斷終止的,每次加1 ADD R1,R1,R0 ;從1加到100
CMP R0,#100 ;執(zhí)行R0-100的操作,但不保存,只影響CPSR的值 BLT START ;帶符號數(shù)小于時跳轉(zhuǎn)到START處執(zhí)行 STOP B STOP ;死循環(huán) END
全面承快速樣板及小批量貼片,后焊加工業(yè)務(wù),樣板2-3天完成,加快24小時, BGA反修,植球及更換。電話:0755-2655271 QQ: 2643383166,網(wǎng)站
同樣的業(yè)務(wù)我們比質(zhì)量;同樣的質(zhì)量我們比價格;同樣的價格我們比時間,同樣的時間我們比服務(wù);同樣的服務(wù)我們比信譽,麥斯艾姆,你值得信賴的樣板貼片專家。
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产精品伦理一区
|
香蕉视频在线播放
|
特黄老太婆aa毛毛片
|
国产成人午夜
|
国产美女福利
|
超碰777
|
日韩三级中文字幕
|
黄色网址入口
|
www.狠狠操.com
|
欧美一区二|
久久久亚洲精品视频
|
欧美视频一区二区三区
|
av网址在线播放
|
久久精品一区二区国产
|
一区二区三区在线观看免费
|
日本a网站
|
亚洲福利在线观看
|
亚洲欧美在线视频
|
日本韩国欧美中文字幕
|
3p在线观看
|
亚洲免费视频一区
|
999av
|
欧美高清一区二区
|
九九久久精品视频
|
狼人色|
少妇一级片
|
黄色三级免费
|
国产成人精品网站
|
青青草久草
|
成人毛片网
|
成年人免费在线视频
|
可以在线观看的av
|
欧美日韩视频
|
人人澡人人爽
|
国产精品久久久一区二区
|
黄色片一区二区
|
午夜激情影视
|
99热1|
91超碰在线观看
|
国产精品一区二区不卡
|
日本不卡视频在线观看
|