版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章 匯編語(yǔ)言程序設(shè)計(jì), 匯編語(yǔ)言程序設(shè)計(jì), 順序結(jié)構(gòu)程序設(shè)計(jì), 分支結(jié)構(gòu)程序設(shè)計(jì), 循環(huán)結(jié)構(gòu)程序設(shè)計(jì), 查表程序設(shè)計(jì), 子程序設(shè)計(jì),如果在程序中需要根據(jù)不同條件,采取不同的處理方法,就應(yīng)采用分支結(jié)構(gòu),而分支程序是通過(guò)轉(zhuǎn)移指令實(shí)現(xiàn)的。 在MCS51單片機(jī)指令系統(tǒng)中, 有JZ(JNZ)、 CJNE、 JC(JNC)及JB(JNB)等豐富的控制轉(zhuǎn)移指令, 它們是分支結(jié)構(gòu)程序設(shè)計(jì)的基礎(chǔ), 可以完成各種各樣的條件判斷、分支。 分支結(jié)構(gòu)程序有兩種,單分支選擇結(jié)構(gòu)和多分支選擇結(jié)構(gòu)。,二、分支結(jié)構(gòu)程序設(shè)計(jì),編寫分支結(jié)構(gòu)程序重點(diǎn)在于正確使用轉(zhuǎn)移指令。轉(zhuǎn)移指令有3類:無(wú)條件轉(zhuǎn)移、條件轉(zhuǎn)移和散轉(zhuǎn)。 1)無(wú)條件轉(zhuǎn)
2、移 它的程序轉(zhuǎn)移方向是程序設(shè)計(jì)者事先安排的,與已執(zhí)行程序的結(jié)果無(wú)關(guān),使用時(shí)只需給出正確的轉(zhuǎn)移目標(biāo)地址和偏移量。 2)條件轉(zhuǎn)移 它是根據(jù)已經(jīng)執(zhí)行程序?qū)?biāo)志位或?qū)奂悠骰驅(qū)?nèi)部RAM某位的影響結(jié)果,決定程序的走向,形成各種分支。 3)散轉(zhuǎn) 它是根據(jù)某種已輸入的或者運(yùn)算的結(jié)果,使程序分別轉(zhuǎn)向各個(gè)處理程序中去。MCS-51中的JMP A+DPTR可以方便地實(shí)現(xiàn)散轉(zhuǎn)功能。,例:設(shè)變量x存放在VAR單元中,函數(shù)值y存放FUNC中,按下式給y賦值。,1、無(wú)條件/條件轉(zhuǎn)移程序,解:設(shè)VAR單元為內(nèi)部RAM的30H單元,F(xiàn)UNC單元為內(nèi)部RAM的3lH單元。,JZ,JNB,程序如下: VAR EQU 30H F
3、UNC EQU 31H MOV A,VAR ;取x JZ COMP ;為零轉(zhuǎn)COMP JNB ACC.7,POSI ;x0轉(zhuǎn)POSI MOV A, # 0FFH ;x0,-1A SJMP COMP POSI: MOV A,#01H COMP:MOV FUNC,A END,散轉(zhuǎn)指令JMP A+DPTR是把16位數(shù)據(jù)指針DPTR的內(nèi)容與累加器A中的8位無(wú)符號(hào)數(shù)相加,形成散轉(zhuǎn)的目的地址,裝入程序計(jì)數(shù)器PC,其操作結(jié)果不影響累加器A和數(shù)據(jù)指針DPTR。,2、散轉(zhuǎn)程序設(shè)計(jì),(1)采用轉(zhuǎn)移指令表,在不少應(yīng)用場(chǎng)合中,需根據(jù)某一單元的內(nèi)容是0,1,n,分別轉(zhuǎn)向處理程序0,處理程序1,處理程序n。對(duì)于這種情況,
4、可用無(wú)條件直接轉(zhuǎn)移指令(AJMP或LJMP指令)組成一個(gè)轉(zhuǎn)移表,然后把標(biāo)志單元的內(nèi)容讀入累加器A,轉(zhuǎn)移表首地址放入DPTR中,再利用指令JMP A+DPTR實(shí)現(xiàn)散轉(zhuǎn)。,例:根據(jù)R2中的內(nèi)容,轉(zhuǎn)入各個(gè)操作程序:,R2=0, 轉(zhuǎn)入OPR0 R2= l, 轉(zhuǎn)入OPR1 R2=2, 轉(zhuǎn)入OPR2 R2=n, 轉(zhuǎn)入OPRn,程序如下: JUMP: MOV DPTR,# JPT ;跳轉(zhuǎn)表首地址JPT送數(shù)據(jù)指針 MOV A,R2 ADD A,R2 ;R22A JNC LN ;判斷有否進(jìn)位 INC DPH ;有進(jìn)位則加到高字節(jié)地址 LN: JMP A+DPTR ;轉(zhuǎn)向已經(jīng)形成的散轉(zhuǎn)地址入口 JPT: AJMP
5、 OPR0 ;直接轉(zhuǎn)移地址表 AJMP OPR1 AJMP OPRn,上面程序中每條“AJMP”指令占用2個(gè)字節(jié),各轉(zhuǎn)移指令“AJMP”地址相差兩個(gè)字節(jié),所以累加器A中變址值必須作乘2修正。若轉(zhuǎn)移表是由三字節(jié)長(zhǎng)轉(zhuǎn)移指令“LJMP”組成,則累加器A中變址值必須乘3。當(dāng)修正值有進(jìn)位時(shí),則應(yīng)將進(jìn)位先加在數(shù)據(jù)指針高位字節(jié)DPH上。 轉(zhuǎn)移表中使用“AJMP”指令,這就限制了轉(zhuǎn)移的入口地址OPR0、 OPR1 、 OPRn必須和散轉(zhuǎn)表首地址JPT位于同一個(gè)2 KB范圍內(nèi)。另外規(guī)定散轉(zhuǎn)點(diǎn)不能超過(guò)256個(gè),因?yàn)楣ぷ骷拇嫫鱎2為8位寄存器。為了克服上述局限性,除了可以使用“LJMP”指令組成跳轉(zhuǎn)表外,還可采用雙
6、字節(jié)的寄存器存放散轉(zhuǎn)值,并利用對(duì)DPTR進(jìn)行加法運(yùn)算的方法,直接修改DPTR,然后再用散轉(zhuǎn)指令實(shí)現(xiàn)散轉(zhuǎn)。,(2)采用地址偏移量表,例:根據(jù)R6中的內(nèi)容轉(zhuǎn)向4個(gè)操作程序。,OPR0: 操作程序0 OPR l: 操作程序1 OPR2: 操作程序2 OPR3: 操作程序3,R6=0,1,2,3,分別為操作程序0,1,2,3。地址偏移量表每項(xiàng)對(duì)應(yīng)一個(gè)操作程序的入口,占一個(gè)字節(jié),分別表示對(duì)應(yīng)入口地址與表首的偏移量。,TAB:DB OPRT0 DB OPRT1 DB OPRT2 DB OPRT3,在散轉(zhuǎn)程序中,如果散轉(zhuǎn)點(diǎn)較少,所有操作程序處在同一頁(yè),即256B時(shí),可以使用地址偏移量轉(zhuǎn)移表。,地址偏移量,(
7、3)采用轉(zhuǎn)向地址表,前面介紹的地址偏移量轉(zhuǎn)向限制在一頁(yè)范圍內(nèi),故使用受到一定限制。在轉(zhuǎn)向范圍較大時(shí),可以直接使用轉(zhuǎn)向地址表,它的各項(xiàng)表目為各個(gè)轉(zhuǎn)向程序的入口。散轉(zhuǎn)時(shí)使用查表指令,按某個(gè)單元的內(nèi)容查表找到對(duì)應(yīng)的轉(zhuǎn)向地址,把它裝入DRTR中,然后對(duì)累加器A清“0” ,再用JMP A+DPTR直接轉(zhuǎn)向各個(gè)處理程序。,可以實(shí)現(xiàn)64KB范圍內(nèi)的轉(zhuǎn)移,但散轉(zhuǎn)數(shù)n應(yīng)小于256。,例:根據(jù)R6中的內(nèi)容轉(zhuǎn)向OPR0、OPRl、OPR2、OPRn 操作程序中去。,TAB:DW OPR0 DW OPR1 DW OPR2 DW OPRn,各操作程序 的入口地址,(4)利用“RET”指令實(shí)現(xiàn)散轉(zhuǎn)程序,前面介紹的幾種方法
8、,均是采用JMP A+DPTR散轉(zhuǎn)指令 來(lái)實(shí)現(xiàn)散轉(zhuǎn)功能的。 實(shí)際上,在使用轉(zhuǎn)向地址表時(shí),還可以用RET指令來(lái)實(shí)現(xiàn)散轉(zhuǎn)。 在上例中,找到轉(zhuǎn)向地址后,不是把它裝入DPTR中,而是把 它壓入堆棧中(先為低字節(jié),后為高字節(jié),即模仿調(diào)用指令)。 然后通過(guò)執(zhí)行RET指令來(lái)把該地址退棧到PC中,這樣PC值就是 要跳轉(zhuǎn)的程序段地址值。,循環(huán)程序的構(gòu)成 1、循環(huán)初態(tài) 設(shè)置循環(huán)初始狀態(tài),如建立地址指針,設(shè)置循環(huán)計(jì)數(shù)器初值等; 2、循環(huán)體 重復(fù)執(zhí)行的程序段,完成主要的計(jì)算或操作任務(wù); 3、循環(huán)控制部分 用于控制循環(huán)的執(zhí)行和結(jié)束,不滿足結(jié)束條件,重復(fù)執(zhí)行循環(huán)體工作部分,滿足條件,則退出循環(huán); 4、結(jié)束部分 處理和保存
9、循環(huán)程序執(zhí)行的結(jié)果。,在處理實(shí)際問(wèn)題時(shí),有時(shí)要求某些程序多次重復(fù)執(zhí)行,此時(shí)就應(yīng)利用循環(huán)結(jié)構(gòu)實(shí)現(xiàn),這樣可以使程序簡(jiǎn)練,不易出錯(cuò),節(jié)省存儲(chǔ)單元。,三、 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),例: 已知:MCS-51單片機(jī)使用的晶振為6MHz,要求設(shè)計(jì)一個(gè)軟件延時(shí)程序,時(shí)間為12ms。,解:延時(shí)程序的延時(shí)時(shí)間與兩個(gè)因素有關(guān):晶振頻率和延時(shí)程序中的循環(huán)次數(shù)。一旦晶振確定之后,主要是計(jì)算需要給定的延時(shí)循環(huán)次數(shù)。本題中晶振為 ,則一個(gè)機(jī)器周期為: ,即 。設(shè)計(jì)二重循環(huán)程序,內(nèi)循環(huán)為l ms延時(shí),外循環(huán)12次。,周期數(shù) ORG 2000H 1 MOV R0,#0CH ;12R0 1 DL2:MOV R1,#MT ;l ms延時(shí)
10、的循環(huán)次數(shù)R1 1 DL1:NOP 1 NOP 2 DJNZ Rl,DL1 ;l ms延時(shí)循環(huán) 2 DJNZ R0,DL2 ;毫秒數(shù)減1,不等于0繼續(xù)循 環(huán),等于0結(jié)束 END,本程序中內(nèi)循環(huán)的預(yù)定值MT尚需計(jì)算,因?yàn)楦鳁l指令的執(zhí)行時(shí)間是 確定的(周期數(shù)一定),需要延時(shí)的總時(shí)間1ms也已確定,因而 MT可由如下方程計(jì)算: MT1257DH,例: 把內(nèi)部RAM的20H30H單元中的內(nèi)容,傳送到外部RAM的1000H單元,并將原數(shù)據(jù)區(qū)清零。,分析:通過(guò)單元地址相減可知字符串長(zhǎng)度,可用該長(zhǎng)度作為循環(huán)次數(shù),但要注意單元地址相減得到的值要加1才是真正的字符串長(zhǎng)度,其流程如圖所示。,程序清單: MAIN:
11、 MOV R1,# 20H ;源字符串首地址 MOV A,#30H ;字符串首末地址相減 CLR C SUBB A,R1 ;計(jì)算字符串長(zhǎng)度 INC A ;長(zhǎng)度加1 MOV R2,A ;存字符串長(zhǎng)度 MOV DPTR,#1000H ;目的字符串首地址 LOOP1: MOV A,R1 MOVX DPTR,A ;傳送 MOV R1,#00H ;原數(shù)據(jù)區(qū)清零 INC R1 ;修改指針 INC DPTR DJNZ R2,LOOP1 ;判斷字符串是否結(jié)束? END,所謂查表法,就是對(duì)于一些復(fù)雜的函數(shù)運(yùn)算,事先把其運(yùn)算結(jié)果按一定規(guī)律編制成表格,存放在程序存儲(chǔ)器中。當(dāng)用戶在程序中需要這些函數(shù)時(shí),直接在表格中尋
12、找答案。 在控制應(yīng)用場(chǎng)合和智能化儀器中常使用這些方法。 MCS-51中有2條查表指令:MOV A,A+PC MOV A,A+DPTR,例: 將十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼的子程序。,解:現(xiàn)在用查表法設(shè)計(jì)子程序。 設(shè)程序的入口、出口都在R0中,表中所有的值都是單字節(jié), 表格長(zhǎng)度為16字節(jié)。,四、查表程序設(shè)計(jì),地址 ORG 2000H 2000H MOV A,R0 2001H ANL A,# 0FH ;保留低4位 2003H ADD A,#2 2005H MOVC A,A+PC ;查表獲取ASCII碼值 2006H MOV R0,A 2007H RET 2008H TAB: DB 30H,3lH,
13、32H 200BH DB 33H,34H,35H 200EH DB 36H,37H,38H 2011H DB 39H,4lH,42H 2014H DB 43H,44H,45H,46H,;變址調(diào)整,2008H-2006H =2,例:用查表法將壓縮的BCD碼數(shù)轉(zhuǎn)換為ASCII碼。,解:R0:BCD碼的存儲(chǔ)首地址 R7:字節(jié)數(shù) R1:存結(jié)果的存儲(chǔ)首地址,BCDASC:MOV A,R0 ;取待轉(zhuǎn)換的BCD數(shù) MOV R2,A ;暫存R2中 ANL A,# 0FH ;屏蔽高4位 MOV DPTR,#TAB ;表首地址送DPTR MOVC A,A+DPTR ;查表 MOV R1,A ;存轉(zhuǎn)換結(jié)果,壓縮的B
14、CD 碼低4位轉(zhuǎn)換 為ASCII碼,MOV A,R2 ANL A,# 0F0H ;屏蔽低4位 SWAP A ;交換 MOVC A,A+DPTR ;查表 INC R1 MOV R1,A INC R1 INC R0 DJNZ R7,BCDASC END,壓縮的BCD 碼高4位轉(zhuǎn)換 為ASCII碼,例:用查表法將16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼的子程序。,解:R0:16進(jìn)制數(shù)首地址 R2:字節(jié)數(shù) R1:ASCII碼的首地址,以下程序中每一個(gè)單元存放2個(gè)16進(jìn)制數(shù),轉(zhuǎn)換為ASCII碼后存 入2個(gè)單元,低位存入低地址,高位存在高地址單元中。,HASC:MOV A,R0 ;取16進(jìn)制數(shù)低字節(jié) ANL A,# 0FH ;屏蔽高4位 ADD A,#10H MOVC A,A+PC ;低4位轉(zhuǎn)換為ASCII碼 MOV R1,A ;存入RAM,INC R1 MOV A,R0 ANL A,# 0F0H ;屏蔽低4位 SWAP A ADD A,# 7 MOVC A,A+PC ;高4位轉(zhuǎn)換為ASCII碼 MOV R1,A ;存入RAM INC R0 INC R1 DJNZ R2,HASC DEC R1 RET TAB:DB012345678 DB9ABCDEF,HASC:MOV A,R0 ANL A,# 0FH ADD A,#10H MOVC A,A+PC MO
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)沖壓制動(dòng)成型服務(wù)行業(yè)現(xiàn)狀規(guī)模與投資效益預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)USB音箱行業(yè)供需分析及發(fā)展前景研究報(bào)告(2024-2030版)
- 2024-2030年魚膠行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2024-2030年高解像彩色攝像機(jī)行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景與投資研究報(bào)告
- 吉林省長(zhǎng)春市田家炳實(shí)驗(yàn)中學(xué)2025屆物理高一上期末達(dá)標(biāo)檢測(cè)試題含解析
- 甘肅省蘭州市城關(guān)區(qū)第一中學(xué)2025屆高三物理第一學(xué)期期中監(jiān)測(cè)試題含解析
- 2025屆云南省曲靖市宜良縣第八中學(xué)物理高三上期中考試模擬試題含解析
- 河南省漯河市漯河實(shí)驗(yàn)高中2025屆高二物理第一學(xué)期期中預(yù)測(cè)試題含解析
- 2025屆河南省八市學(xué)評(píng)物理高三上期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 2025屆山西省西安中學(xué)物理高一第一學(xué)期期中調(diào)研試題含解析
- 【00后大學(xué)生理財(cái)意識(shí)與規(guī)劃探究(定量論文)11000字】
- 公路消防知識(shí)培訓(xùn)內(nèi)容
- 吊車吊裝方案計(jì)算書
- 2024年云南省數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)投資集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 警方開展心理輔導(dǎo)活動(dòng)方案
- 餐廳股份合作協(xié)議書
- 成人重癥患者人工氣道濕化護(hù)理專家共識(shí)
- 醫(yī)療廢棄物培訓(xùn)
- 朝花夕拾讀書分享會(huì)
- 突發(fā)事件應(yīng)急處理知識(shí)培訓(xùn)
- 糖尿病??谱o(hù)士考試試題
評(píng)論
0/150
提交評(píng)論