3.1.1匯編語(yǔ)言分支程序_第1頁(yè)
3.1.1匯編語(yǔ)言分支程序_第2頁(yè)
3.1.1匯編語(yǔ)言分支程序_第3頁(yè)
3.1.1匯編語(yǔ)言分支程序_第4頁(yè)
3.1.1匯編語(yǔ)言分支程序_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

匯編語(yǔ)言分支程序主講教師:賈松《汽車單片機(jī)應(yīng)用技術(shù)》汽車智能技術(shù)專業(yè)教學(xué)資源庫(kù)1、掌握分支結(jié)構(gòu)程序設(shè)計(jì)的基本方法;2、掌握無(wú)條件和條件轉(zhuǎn)移指令的使用;3、了解分支程序的分類。知識(shí)目標(biāo)1、會(huì)設(shè)計(jì)單分支、多分支和散轉(zhuǎn)程序;2、能用分支程序進(jìn)行數(shù)值轉(zhuǎn)換成二進(jìn)制ASCII碼的程序設(shè)計(jì);3、能用分支程序進(jìn)行函數(shù)計(jì)算的程序設(shè)計(jì)。能力目標(biāo)學(xué)習(xí)目標(biāo)任務(wù)初步訓(xùn)練若Xi均為單字節(jié)數(shù)據(jù),并按i(i=1~n)順序存放在從50H開(kāi)始的內(nèi)部RAM單元中,n等于10,現(xiàn)在要求編程求出它們的和(雙字節(jié)),并放在30H,31H中。強(qiáng)化訓(xùn)練無(wú)符號(hào)數(shù)排序:在片內(nèi)RAM中,起始地址為30H的8個(gè)單元中存放有8個(gè)無(wú)符號(hào)數(shù)。試對(duì)這些無(wú)符號(hào)數(shù)進(jìn)行升序排序。學(xué)習(xí)任務(wù)任務(wù)相關(guān)知識(shí)1、分支程序2、ASCII碼的程序設(shè)計(jì)任務(wù)相關(guān)知識(shí)1、分支程序

在程序設(shè)計(jì)過(guò)程中,有時(shí)要根據(jù)不同情況執(zhí)行不同功能的程序段,這種根據(jù)程序要求而改變程序執(zhí)行順序的設(shè)計(jì),稱為分支程序設(shè)計(jì)。分支程序的主要特點(diǎn)是程序執(zhí)行流程中必然包括條件判斷指令。符合條件要求和不符合條件要求的有不同的處理路徑。設(shè)計(jì)分支程序時(shí),需注意以下幾點(diǎn)方法:借助程序框圖來(lái)知名程序的走向;合理選用具有邏輯判斷功能的指令;每個(gè)分支程序單獨(dú)編寫一段程序,對(duì)分支程序的起始地址賦予另一個(gè)地址標(biāo)號(hào),便于程序的閱讀,使程序更為清晰。任務(wù)相關(guān)知識(shí)2、分支程序的分類

分支程序的特點(diǎn)是程序中含有轉(zhuǎn)移指令。由于轉(zhuǎn)移指令有無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移之分,因此分支程序也可以分為無(wú)條件分支程序和條件分支程序兩類。無(wú)條件分支程序中含有LJMP、AJMP等無(wú)條件轉(zhuǎn)移指令,執(zhí)行這類指令,程序?qū)o(wú)條件轉(zhuǎn)移,這類程序十分簡(jiǎn)單。條件分支程序中含有判零、比較、位控制等條件轉(zhuǎn)移指令,這類程序較為普遍,是討論的重點(diǎn)。條件分支程序體現(xiàn)了計(jì)算機(jī)執(zhí)行程序時(shí)的分析判斷能力:若某種條件滿足,則機(jī)器就轉(zhuǎn)移到另一分支上執(zhí)行程序;若條件不滿足,則機(jī)器就按原程序繼續(xù)執(zhí)行。在MCS-51中,條件轉(zhuǎn)移指令共有13條,分為累加器A判零條件轉(zhuǎn)移、比較條件轉(zhuǎn)移、減l條件轉(zhuǎn)移和位控制條件轉(zhuǎn)移4類。因此,MCS-51匯編語(yǔ)言的分支程序設(shè)計(jì)實(shí)際上就是如何正確運(yùn)用這13條條件轉(zhuǎn)移指令來(lái)進(jìn)行編程的問(wèn)題。

分支結(jié)構(gòu)程序可分為單分支結(jié)構(gòu)程序和多分支結(jié)構(gòu)程序兩種,此外還有一種特殊的分支程序—散轉(zhuǎn)程序。任務(wù)相關(guān)知識(shí)(1)單分支結(jié)構(gòu)程序單分支程序是只使用一次條件轉(zhuǎn)移指令的分支程序。例1:求R1和R2寄存器中兩個(gè)無(wú)符號(hào)數(shù)之差的絕對(duì)值,結(jié)果存放在片內(nèi)RAM30H單元中。分析:

題目中R1和R2寄存器中的數(shù)是未知的,對(duì)兩個(gè)不知大小的數(shù)相減并求絕對(duì)值,顯然應(yīng)該先弄清楚哪一個(gè)值稍大些,然后再用大數(shù)減小數(shù)的方法,才可求得絕對(duì)值。

利用指令系統(tǒng)中的減法指令來(lái)判斷兩數(shù)的大小。

根據(jù)流程圖編程。求絕對(duì)值程序流程圖如圖3-1-1-1所示。任務(wù)相關(guān)知識(shí)ORG

0000HAJMP

MAINORG

0030HMAIN:

CLR

C

;清進(jìn)位標(biāo)志MOV

A,R1

;A←R1SUBB

A,R2

;(R1)-(R2)→AJC

LL

;(R1)<(R2),跳到標(biāo)號(hào)LL處MOV

30H,A

;(R1)≥(RE),存放兩者的絕對(duì)值SJMP

JIE

LL:

MOV

A,R2

;(R2)-(R1)→A

SUBB

A,R1

;存放兩者的絕對(duì)值

MOV

30H,AJIE:

SJMP

$

END

任務(wù)相關(guān)知識(shí)(2)多分支結(jié)構(gòu)程序多分支結(jié)構(gòu)程序的設(shè)計(jì)常采用比較轉(zhuǎn)移指令“CJNEA,#data,rel”,其規(guī)則為:若(A)=#data,順序執(zhí)行并(Cy)=0;若(A)>#data,轉(zhuǎn)移并(Cy)=0;若(A)<#data,轉(zhuǎn)移并(Cy)=1。例2:按下面公式編寫程序,x為無(wú)符號(hào)數(shù)(x<128),存在內(nèi)部20H單元,y存放在21H單元。分析:

首先比較A與21H的大小,然后再比較A與40H的大小。

比較大小用比較轉(zhuǎn)移指令CJNE和判Cy標(biāo)志指令JC、JNC。流程圖見(jiàn)圖3-1-2所示。任務(wù)相關(guān)知識(shí)

(3)散轉(zhuǎn)程序在多分支程序中,因?yàn)榭赡艿姆种?huì)有N個(gè),若采用多條“CJNE”指令逐次比較,程序的執(zhí)行效率會(huì)低很多,特別是分支較多時(shí)。這時(shí),一般采用跳轉(zhuǎn)表的方法,利用基址寄存器加變址寄存器間接轉(zhuǎn)移指令“LJMP@A+DPTR”,可以根據(jù)累加器A的內(nèi)容實(shí)現(xiàn)多路分支。這類程序又稱為散轉(zhuǎn)程序,是一種并行分支程序。例3:假設(shè)累加器A中內(nèi)容為0~4,編程實(shí)現(xiàn)根據(jù)累加器A的內(nèi)容實(shí)現(xiàn)不同的處理。程序流程圖如圖所示。程序清單如下。

任務(wù)相關(guān)知識(shí)START:

MOV

R0,A

;將A送R0

ADD

A,R0

;A←(A)×2

ADD

A,R0

;A←(A)×3

MOV

DPTR,#TABLE;轉(zhuǎn)移表首地址送DPTR

JMP

@A+DPTR

;散轉(zhuǎn)相應(yīng)分支入口TABLE:

LJMP

FZ0

;轉(zhuǎn)向分支0的處理入口

LJMP

FZ1

;轉(zhuǎn)向分支l的處理入口

LJMP

FZ2

;轉(zhuǎn)向分支2的處理入口

LJMP

FZ3

;轉(zhuǎn)向分支3的處理入口

LJMP

FZ4

;轉(zhuǎn)向分支4的處理入口任務(wù)相關(guān)知識(shí)

由于每條長(zhǎng)跳轉(zhuǎn)指令“LJMP”要占用3個(gè)程序存儲(chǔ)器單元,所以在此程序中,首先將累加器A中的內(nèi)容置為原來(lái)的3倍,然后通過(guò)“LJMP@A+DPTR”指令實(shí)現(xiàn)散轉(zhuǎn),程序中的FZ0~FZ4為與0~4對(duì)應(yīng)的各處理程序的入口地址。使用散轉(zhuǎn)指令,根據(jù)X的內(nèi)容(X=0,1,…)進(jìn)行程序散轉(zhuǎn)的地址表達(dá)式為:地址=表首地址+表中每元素字節(jié)數(shù)×XASCII程序設(shè)計(jì)

ASCII程序設(shè)計(jì)1、初步訓(xùn)練已知R0低4位有一個(gè)十六進(jìn)制數(shù)(0~F中的一個(gè)),請(qǐng)編程把它轉(zhuǎn)換成相應(yīng)ASCII碼并送入30H。初步訓(xùn)練任務(wù)分析:ASCII碼(AmericanStandardCodeInformationInterchange)是美國(guó)信息交換標(biāo)準(zhǔn)代碼的簡(jiǎn)稱,誕生于1963年,廣泛應(yīng)用于微型計(jì)算機(jī)中。ASCII碼采用一個(gè)字節(jié)的低7位進(jìn)行編碼,共可表示128個(gè)字符。由常用ASCII碼可知,0~9的ASCII碼為30H~39H,即十進(jìn)制與ASCII碼二者相差30H;A~F的ASCII碼為41H~46H,即十進(jìn)制與ASCII碼二者相差37H,所以本實(shí)驗(yàn)中,若R0≤9,則R0內(nèi)容只需加30H;若R0>9,則R0內(nèi)容需加37H,分支程序流程圖如圖所示。初步訓(xùn)練操作步驟1)運(yùn)行KeilμVision4軟件,新建一個(gè)工程,新建一個(gè)文件,將文件添加到工程中并編譯,如有錯(cuò),請(qǐng)更改直到編譯成功。2)單擊“DebugProject”菜單,在下拉菜單中單擊“Start/StopDebugSession”(或者使用快捷鍵Ctrl+F5)進(jìn)入調(diào)試模式,進(jìn)行調(diào)試。3)在存儲(chǔ)器窗口中輸入D:30H,然后單步執(zhí)行,查看30H單元值的變化情況。并記錄在任務(wù)工單中。6、完成實(shí)訓(xùn)操作,關(guān)閉電源,拆除接線,整理歸位。任務(wù)相關(guān)知識(shí)參考程序ORG0000HCLRCMOVR0,#16HMOVA,R0ANLA,#0FH;取低4位數(shù)CJNEA,#10,NEXT1NEXT1:JNCNEXT2ADDA,#30H;小于等于9,加30HSJMPDONENEXT2:ADDA,#37H;大于9,加37HDONE:MOV30H,A;存儲(chǔ)結(jié)果SJMP$END強(qiáng)化訓(xùn)練強(qiáng)化訓(xùn)練

進(jìn)行函數(shù)計(jì)算,已知VAR單元中有一個(gè)自變量X,請(qǐng)按如下條件編出求函數(shù)值Y,并將它存入FUNC單元的程序,其中VAR代表30H單元,F(xiàn)UNC代表31H單元。任務(wù)分析:分支程序通常有兩種思路來(lái)做,一是“先分支后賦值”,二是“先賦值后分支”。流程圖見(jiàn)圖所示。參考程序

解法一:先分支后后賦值法ORG0100HVARDATA30HFUNCDATA31HMOVA,VARJZDONEJNBACC.7,POSIMOVA,#0FFHSJMPDONEPOSI:MOVA,#01HDONE:MOVFUNC,ASJMP$END解法二:先賦值后分支ORG0100HVARDATA30HFUNCDATA31HMOVA,VARJZDONEMOVR0,#0FFHJBACC.7,NEGMOVR0,#01HNEG:MOVA,R0DONE:MOVFUNC,ASJMP$END強(qiáng)化訓(xùn)練訓(xùn)練習(xí)題1、什么

溫馨提示

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

評(píng)論

0/150

提交評(píng)論