版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章AT89S51匯編語
言程序設(shè)計(jì)
14.3.1子程序的設(shè)計(jì)將那些需多次應(yīng)用的、完成相同的某種基本運(yùn)算或操作的程序段從整個(gè)程序中獨(dú)立出來,單獨(dú)編成一個(gè)程序段,需要時(shí)進(jìn)行調(diào)用。這樣的程序段稱為子程序。優(yōu)點(diǎn):采用子程序可使程序結(jié)構(gòu)簡單,縮短程序的設(shè)計(jì)時(shí)間,減少占用的程序存儲(chǔ)空間。子程序在程序設(shè)計(jì)中非常重要,讀者應(yīng)熟練掌握子程序的設(shè)計(jì)方法。21.子程序的設(shè)計(jì)原則和應(yīng)注意的問題編寫子程序應(yīng)注意以下問題:(1)子程序的入口地址,前必須有標(biāo)號(hào)。(2)主程序調(diào)用子程序,可通過調(diào)用指令來實(shí)現(xiàn)。有兩條指令:①絕對(duì)調(diào)用指令A(yù)CALLaddr11。雙字節(jié),addr11指出了調(diào)用的目的地址,PC中16位地址中的高5位不變,被調(diào)用的子程序的首地址與絕對(duì)調(diào)用指令的下一條指令的高5位地址相同,即只能在同一個(gè)2KB區(qū)內(nèi)。②長調(diào)用指令LCALLaddr16。三字節(jié),addr16為直接調(diào)用的目的地址,子程序可放在64KB程序存儲(chǔ)器區(qū)任意位置。3(3)子程序結(jié)構(gòu)中常用到堆棧,用來進(jìn)行斷點(diǎn)和現(xiàn)場的保護(hù)。(4)子程序返回主程序時(shí),最后一條指令必須是RET指令,功能是把堆棧中的斷點(diǎn)地址彈出送入PC指針中,從而實(shí)現(xiàn)子程序返回后從主程序斷點(diǎn)處繼續(xù)執(zhí)行主程序。(5)子程序可以嵌套,即主程序可以調(diào)用子程序,子程序又可以調(diào)用另外的子程序。42.子程序的基本結(jié)構(gòu)典型的子程序的基本結(jié)構(gòu)如下:MAIN: …… ;MAIN為主程序入口標(biāo)號(hào) LCALL SUB ;調(diào)用子程序SUB
……子程序SUB: PUSH PSW ;現(xiàn)場保護(hù)
PUSH Acc POP Acc ;現(xiàn)場恢復(fù),注意要先進(jìn)后出 POP PSW RET ;最后一條指令必須為RET
注意:上述子程序結(jié)構(gòu)中,現(xiàn)場保護(hù)與現(xiàn)場恢復(fù)不是必需的,要根據(jù)實(shí)際情況而定。5子程序處理程序段子程序4.3.2查表程序設(shè)計(jì)查表程序是一種常用程序,避免復(fù)雜的運(yùn)算或轉(zhuǎn)換過程,可完成數(shù)據(jù)補(bǔ)償、修正、計(jì)算、轉(zhuǎn)換等各種功能,具有程序簡單、執(zhí)行速度快等優(yōu)點(diǎn)。查表是根據(jù)自變量x,在表格尋找y,使y=f(x)。單片機(jī)中,數(shù)據(jù)表格存放于程序存儲(chǔ)器內(nèi),在執(zhí)行查表指令時(shí),發(fā)出讀程序存儲(chǔ)器選通脈沖
。兩條極為有用的查表指令如下:(1)MOVC A,@A+DPTR(2)MOVC A,@A+PC兩條指令的功能完全相同,具體使用時(shí)有些差別。6指令“MOVCA,@A+DPTR”把A中內(nèi)容與DPTR中的內(nèi)容相加,結(jié)果為某一程序存儲(chǔ)單元的地址,然后把該地址單元的內(nèi)容送到A中。指令“MOVCA,@A+PC”,PC的內(nèi)容與A的內(nèi)容相加后所得的數(shù)作為某一程序存儲(chǔ)器單元的地址,根據(jù)地址取出程序存儲(chǔ)器相應(yīng)單元中的內(nèi)容送到累加器A,指令執(zhí)行后,PC的內(nèi)容不發(fā)生變化,仍指向該查表指令的下一條指令。優(yōu)點(diǎn):在于預(yù)處理較少且不影響其他特殊功能寄存器的值,不必保護(hù)其他特殊功能寄存器。缺點(diǎn):在于該表格只能存放在這條指令的地址X3X2X1X0以下00H~FFH之中,這就使得表格所在的程序空間受到了限制。下面說明查表指令的用法和計(jì)算偏移量應(yīng)注意的問題。7【例4-3】
設(shè)計(jì)一子程序,功能是根據(jù)累加器A中的數(shù)x(0~9之間)查x的平方表y,根據(jù)x的值查出相應(yīng)的平方y(tǒng)。本例中的x和y均為單字節(jié)數(shù)。(作業(yè)2:建一個(gè)文件夾,命名為exp2_學(xué)號(hào),在該文件夾中建立keil工程,命名為exp2_學(xué)號(hào),每行盡量引入注釋,簡要說明該行語句執(zhí)行后,句中所含寄存器的變化情況,具體情況可參考例3-13的注釋。)
地址
子程序Y3Y2Y1Y0 ADDA,#01HY3Y2Y1Y0+2 MOVCA,@A+PCY3Y2Y1Y0+3
RETY3Y2Y1Y0+4 DB00H,01H,04H,09H,10H;數(shù)0~9的平方表 DB19H,24H,31H,40H,51H指令“ADDA,#01H”的作用是A中的內(nèi)容加上“01H”“01H”即為查表指令與平方表之間的“RET”指令所占的字節(jié)數(shù)加上“01H”后,可保證PC指向表首,累加器A中原來的內(nèi)容僅是從表首開始向下查找多少個(gè)單元。8在進(jìn)入程序前,A的內(nèi)容在00~09H之間,如A中的內(nèi)容為02H,它的平方為04H,可根據(jù)A的內(nèi)容查出x的平方仿真:P2->3個(gè)KEY->d4_3_xy_3K.asmE:\教學(xué)檔案\16172教學(xué)檔案170304\16172教學(xué)材料\0單片機(jī)原理及應(yīng)用16172\1單片機(jī)教案\范例\仿真-exp15162\D4第四章程序仿真參考指令“MOVCA,@A+DPTR”應(yīng)用范圍較廣,使用該指令時(shí)不必計(jì)算偏移量,優(yōu)點(diǎn)是表格可以設(shè)在64KB程序存儲(chǔ)器空間內(nèi)的任何地方,而不像“MOVCA,@A+PC”那樣只設(shè)在PC下面的256個(gè)單元中,所以使用較方便。如果DPTR已被使用,則在查表前必須保護(hù)DPTR,且結(jié)束后恢復(fù)DPTR,例4-3可改成如下形式:9PUSHDPH ;保存DPHPUSHDPL ;保存DPLMOVDPTR,#TAB1MOVCA,@A+DPTRPOPDPL ;恢復(fù)DPLPOPDPH ;恢復(fù)DPHRETTAB1:DB00H,01H,04H,09H,10H;平方表
DB19H,24H,31H,40H,51HC:\Users\Administrator\Desktop\16171教學(xué)檔案160905\教案\范例\exp3_15_2DPTR實(shí)際查表,有時(shí)x為單字節(jié)數(shù),y為雙字節(jié)數(shù)。來看下例。10【例4-4】有一巡回檢測報(bào)警裝置,需對(duì)16路(x)輸入進(jìn)行檢測,每路有一個(gè)最大允許值(y),為雙字節(jié)數(shù)。需根據(jù)測量的路數(shù)(x),查表找出對(duì)應(yīng)該路的最大允許值(y),看輸入值是否大于最大允許值,如果大于就報(bào)警。取路數(shù)為x(0≤x≤15),y為最大允許值,放在表格中。設(shè)進(jìn)入查表程序前,假設(shè)路數(shù)x已放于R2中,查表后該路的最大允許值y放于R3R4中。查表的程序如下:..\范例\exp3_16_4_411
TB3:
MOV A,R2 ADD A,R2 ;(R2)*2→(A) MOV R3,A ;保存指針
ADD A,#6 ;加偏移量
MOVCA,@A+PC ;查第一字節(jié) XCH A,R3 ADD A,#3
MOVCA,@A+PC ;查第二字節(jié) MOV R4,A RETTAB3:
DW 1520,3721,42645,7580;最大值表 DW 3483,32657,883,9943 DW 10000,40511,6758,8
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省濰坊市普通高中2026屆生物高一第一學(xué)期期末達(dá)標(biāo)檢測試題含解析
- 罕見腫瘤的個(gè)體化治療治療策略優(yōu)化經(jīng)驗(yàn)與個(gè)體化醫(yī)療
- 修改單位財(cái)務(wù)制度流程
- 2026新疆博州聯(lián)通小營盤營業(yè)廳招聘備考題庫完整參考答案詳解
- 收款付款財(cái)務(wù)制度
- 綜治協(xié)會(huì)財(cái)務(wù)制度
- 貿(mào)易類財(cái)務(wù)制度
- 豆制食品公司財(cái)務(wù)制度
- 招待費(fèi)培訓(xùn)費(fèi)財(cái)務(wù)制度
- 餐飲新公司財(cái)務(wù)制度
- 2026年廣州市自來水公司招考專業(yè)技術(shù)人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 散文系列《補(bǔ)鞋子的人》精-品解讀
- 安徽省合肥一中2025-2026學(xué)年高三上學(xué)期1月考試化學(xué)(含答案)
- 2025國開本科《公共部門人力資源管理》期末歷年真題(含答案)
- 河北省唐山市2024-2025學(xué)年高一上學(xué)期期末數(shù)學(xué)試題(含答案)
- 新課標(biāo)解讀培訓(xùn)
- 2025年CFA二級(jí)市場有效性習(xí)題
- 農(nóng)行內(nèi)控制度匯編
- 國際物流(雙語)陳艷全套課件
- 絕經(jīng)后宮頸上皮內(nèi)病變處理要點(diǎn)2026
- 乙醇購銷合同范本
評(píng)論
0/150
提交評(píng)論