




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4章
匯編語言程序設(shè)計
4.1匯編語言基本概念4.2匯編語言程序設(shè)計4.1匯編語言基本概念4.1.1程序設(shè)計語言4.1.2匯編語言的語句結(jié)構(gòu)4.1.3偽指令返回本章首頁4.1.1程序設(shè)計語言 按照語言的結(jié)構(gòu)及其功能可以分為三種:1.機器語言:機器語言是用二進制代碼0和1表示指令和數(shù)據(jù)的最原始的程序設(shè)計語言。2.匯編語言:在匯編語言中,指令用助記符表示,地址、操作數(shù)可用標號、符號地址及字符等形式來描述。3.高級語言:高級語言是接近于人的自然語言,面向過程而獨立于機器的通用語言。返回本節(jié)4.1.2匯編語言的語句結(jié)構(gòu) 1.匯編語言的指令類型MCS-51單片機匯編語言,包含兩類不同性質(zhì)的指令。(1)基本指令:即指令系統(tǒng)中的指令。它們都是機器能夠執(zhí)行的指令,每一條指令都有對應(yīng)的機器碼。(2)偽指令:匯編時用于控制匯編的指令。它們都是機器不執(zhí)行的指令,無機器碼。2.匯編語言的語句格式匯編語言源程序是由匯編語句(即指令)組成的。匯編語言一般由四部分組成。其典型的匯編語句格式如下:標號: 操作碼 操作數(shù) ;注釋START: MOV A,30H ;A←(30H)返回本節(jié)4.1.3偽指令 1.ORG:匯編起始地址用來說明以下程序段在存儲器中存放的起始地址。例如程序: ORG 1000H START: MOV A,#20H MOV B,#30H┇2.EQU:賦值給變量標號賦予一個確定的數(shù)值。3.DB:定義數(shù)據(jù)字節(jié)把數(shù)據(jù)以字節(jié)數(shù)的形式存放在存儲器單元中。
4.DW:定義數(shù)據(jù)字按字的形式把數(shù)據(jù)存放在存儲單元中。5.DS:定義存儲區(qū)從指定的地址單元開始,保留一定數(shù)量存儲單元。
6.BIT:位定義確定字符名為確定的位地址值。
7.END:匯編結(jié)束返回本節(jié)4.2匯編語言程序設(shè)計4.2.1匯編語方程序設(shè)計步驟4.2.2順序程序4.2.3分支程序4.2.4循環(huán)程序4.2.5子程序4.2.6位操作程序 返回本章首頁4.2.1匯編語方程序設(shè)計步驟1.分析問題2.確定算法3.設(shè)計程序流程圖4.分配內(nèi)存單元5.編寫匯編語言源程序6.調(diào)試程序返回本節(jié)4.2.2順序程序 順序程序是一種最簡單,最基本的程序。特點:程序按編寫的順序依次往下執(zhí)行每一條指令,直到最后一條?!纠?.1】將30H單元內(nèi)的兩位BCD碼拆開并轉(zhuǎn)換成ASCII碼,存入RAM兩個單元中。程序流程如圖4-1所示。參考程序如下:ORG 2000HMOV A,30H ;取值A(chǔ)NL A,#0FH ;取低4位ADD A,#30H ;轉(zhuǎn)換成ASCII碼MOV 32H,A ;保存結(jié)果MOV A,30H ;取值SWAP A ;高4位與低4位互換ANL A,#0FH ;取低4位(原來的高4位)ADD A,#30H ;轉(zhuǎn)換成ASCII碼MOV 31H,A ;保存結(jié)果SJMP $END結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位轉(zhuǎn)換成ASCII碼存ASCII碼開始圖4-1拆字程序流程圖結(jié)束取數(shù)據(jù)X求X2暫存X2取數(shù)據(jù)Y求Y2求X2+Y2開始保存平方和圖4-2例4.2程序流程圖【例4.2】設(shè)X、Y兩個小于10的整數(shù)分別存于片內(nèi)30H、31H單元,試求兩數(shù)的平方和并將結(jié)果存于32H單元。解:兩數(shù)均小于10,故兩數(shù)的平方和小于100,可利用乘法指令求平方。程序流程如圖4-2所示。參考程序如下:ORG 2000HMOV A,30H ;取30H單元數(shù)據(jù)MOV B,A ;將X送入B寄存器MUL AB ;求X2,結(jié)果在累加器中MOV R1,A ;將結(jié)果暫存于R1寄存器中MOV A,31H ;取31H單元數(shù)據(jù)MOV B,A ;將Y送入B寄存器MUL AB ;求Y2,結(jié)果在累加器中ADD A,R1 ;求X2+Y2MOV 32H,A ;保存數(shù)據(jù)SJMP $ ;暫停END結(jié)束取數(shù)據(jù)X求X2暫存X2取數(shù)據(jù)Y求Y2求X2+Y2開始保存平方和圖4-2例4.2程序流程圖返回本節(jié)4.2.3分支程序 1.分支程序的基本形式分支程序有三種基本形式,如圖4-3所示。分支程序的設(shè)計要點如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標號。條件滿足?AYN(a)條件滿足?ABNY(b)(c)A0A1AnK=0K=1…K=nK=?……圖4-3分支程序結(jié)構(gòu)流程圖2.雙向分支程序設(shè)計舉例【例4.3】設(shè)X存在30H單元中,根據(jù)下式
X+2 X>0Y= 100 X=0求出Y值,將Y值存入31H單元。∣X∣ X<0解:根據(jù)數(shù)據(jù)的符號位判別該數(shù)的正負,若最高位為0,再判別該數(shù)是否為0。程序流程如圖4-4所示。
參考程序如下:ORG 1000HMOV A,30H ;取數(shù)JB ACC.7,NEG;負數(shù),轉(zhuǎn)NEGJZ ZER0 ;為零,轉(zhuǎn)ZER0ADD A,#02H ;為正數(shù),求X+2AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0:MOV A,#64H ;數(shù)據(jù)為零,Y=100AJMPSAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)NEG:DEC A ; CPL A ;求∣X∣SAVE: MOV 31H,A ;保存數(shù)據(jù)SJMP $ ;暫停A為負數(shù)?取數(shù),A←(30H)開始結(jié)束A=0?YNNA←|X|A←64HA←X+2存數(shù),(31H)←A(30H)圖4-4例4.3程序流程圖3.多向分支程序設(shè)計舉例【例4.4】
根據(jù)R0的值轉(zhuǎn)向7個分支程序。R0<10,轉(zhuǎn)向SUB0;R0<20,轉(zhuǎn)向SUB1;
R0<60,轉(zhuǎn)向SUB5;R060,轉(zhuǎn)向SUB6;解:利用JMP@A+DPTR指令直接給PC賦值,使程序?qū)崿F(xiàn)轉(zhuǎn)移。程序流程如圖4-5所示。參考程序如下: ORG2000H MOVDPTR,#TAB;轉(zhuǎn)移指令表首地址 MOVA,R0 ;取數(shù)MOV B,#10…… DIV AB;A10,商在A中CLR C RLCA ;A←2A JMP@A+DPTR ;PC←A+DPTRTAB: AJMP SUB0 ;轉(zhuǎn)移指令表 AJMPSUB1AJMP SUB2 AJMPSUB5AJMP SUB6K=?轉(zhuǎn)SUB0轉(zhuǎn)SUB1轉(zhuǎn)SUB6K=0K=1……K=6開始圖4-5多向分支程序流程圖返回本節(jié)4.2.4循環(huán)程序 1.循環(huán)程序的結(jié)構(gòu)(如圖4-6所示)☆循環(huán)程序一般包括如下四個部分:(1)初始化(2)循環(huán)體(3)循環(huán)控制(4)結(jié)束☆循環(huán)程序按結(jié)構(gòu)形式,有單重循環(huán)與多重循環(huán)?!钤诙嘀匮h(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)?!畈辉试S循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部(如圖4-7所示)。(a)當型循環(huán)結(jié)構(gòu)(b)直到型循環(huán)結(jié)構(gòu)循環(huán)結(jié)束?循環(huán)體YN初始化修改循環(huán)參數(shù)結(jié)束部分開始結(jié)束循環(huán)結(jié)束?循環(huán)體Y初始化修改循環(huán)參數(shù)結(jié)束部分開始N結(jié)束圖4-6循環(huán)結(jié)構(gòu)程序流程圖外循環(huán)中循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)(a)嵌套正確(b)嵌套正確(c)交叉不正確圖4-7多重循環(huán)示意圖2.循環(huán)程序設(shè)計舉例【例4.5】有一數(shù)據(jù)塊從片內(nèi)RAM的30H單元開始存入,設(shè)數(shù)據(jù)塊長度為10個單元。根據(jù)下式:
X+2 X>0Y=100X=0求出Y值,并將Y值放回原處。∣X∣X<0解:設(shè)置一個計數(shù)器控制循環(huán)次數(shù),每處理完一個數(shù)據(jù),計數(shù)器減1。程序流程如圖4-8所示。參考源程序如下: ORG 2000H MOV R0,#10MOV R1,#30HSTART: MOV A,@R1 ;取數(shù) JB ACC.7,NEG ;若為負數(shù),轉(zhuǎn)NEG JZ ZER0 ;若為零,轉(zhuǎn)ZER0 ADD A,#02H ;若為正數(shù),求X+2 AJMP SAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0: MOV A,#64H ;數(shù)據(jù)為零,Y=100
AJMP SAVE ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)NEG: DEC A CPL A ;求∣X∣SAVE: MOV @R1,A ;保存數(shù)據(jù) INC R1 ;地址指針指向下一個地址 DJNZ R0,START ;數(shù)據(jù)未處理完,繼續(xù)處理 SJMP $ ;暫停A=0?YYNNYNA為負數(shù)?取數(shù),A←((R1))開始結(jié)束A←∣X∣A←64HA←X+2存數(shù),((R1))←A(30H)設(shè)置地址指針R1、計數(shù)器R0初值R1←R1+1;R0←R0-1R0=0?圖4-8例4.5的程序流程圖返回本節(jié)4.2.5子程序 1.子程序概念所謂調(diào)用子程序,暫時中斷主程序的執(zhí)行,而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。如圖4-10所示。調(diào)用子程序應(yīng)注意:(1)子程序占用的存儲單元和寄存器。(2)參數(shù)的傳遞。(3)子程序經(jīng)過調(diào)用后得到的數(shù)據(jù)來完成程序之間的參數(shù)傳遞。
(4)嵌套調(diào)用與遞歸調(diào)用。如圖4-11所示。RETLCALLSUB圖4-10子程序的調(diào)用與返回LCALLARETRETLCALLB圖4-11子程序的嵌套調(diào)用與返回2.子程序設(shè)計舉例【例4.8】將4.4節(jié)中的例4.5改為子程序結(jié)構(gòu)。解:數(shù)據(jù)塊中的十個數(shù)都需要進行符號判斷并作相應(yīng)處理,可把一部分工作交給子程序完成,主程序只負責讀取數(shù)據(jù)、調(diào)用判斷處理子程序、保存數(shù)據(jù)、循環(huán)控制工作。源程序如下:ORG 0000H MOV R0,#10 MOV R1,#30HSTART: MOV A,@R1 ;取數(shù) ACALL DISPOSE ;調(diào)用判斷、處理子程序SAVE: MOV @R1,A ;保存數(shù)據(jù) INC R1 ;修改地址指針,指向下一個地址 DJNZ R0,START ;數(shù)據(jù)未處理完,繼續(xù)處理 SJMP $ ;暫停ORG 0200HDISPOSE: JB ACC.7,NEG ;若為負數(shù),轉(zhuǎn)NEG JZ ZER0 ;若為零,轉(zhuǎn)ZER0 ADD A,#02H ;若為正數(shù),求X+2 AJMP BACK ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)ZER0: MOV A,#64H ;數(shù)據(jù)為零,Y=100 AJMP BACK ;轉(zhuǎn)到SAVE,保存數(shù)據(jù)NEG: DEC A CPL A ;求∣X∣BACK: RET返回本節(jié)4.2.6位操作程序 【例4.9】編寫一程序,實現(xiàn)圖4-12中的邏輯運算電路。其中P3.1、P1.1、P1.0分別是單片機端口線上的信息,RS0、RS1是PSW寄存器中的兩個標志位,30H、31H是兩個位地址,運算結(jié)果由P1.0輸出。程序如下:ORG 0000HMOV C,P3.1ANL C,P1.1CPL C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老顧聘用合同范本
- 先付款后供貨合同范本
- 保險投資合同范本
- 加工生產(chǎn)勞務(wù)合同范本
- 京東物流折扣合同范本
- 上門電纜轉(zhuǎn)讓合同范例
- epc裝飾工程合同范本
- 代人取藥兼職合同范本
- 不賒銷合同范本模板
- 化肥銷售協(xié)議合同范本
- 數(shù)字電子技術(shù)(武漢科技大學)知到智慧樹章節(jié)測試課后答案2024年秋武漢科技大學
- 綜合應(yīng)用能力事業(yè)單位考試(綜合管理類A類)試題及解答參考
- 阿爾茲海默病的家庭護理
- bim技術(shù)課件教學課件
- 腹水形成的原因及治療
- 單晶爐車間安全培訓
- 高中地理必修第一冊期末試卷及答案-中圖版-2024-2025學年
- 護理核心制度測試題+參考答案
- 機械制造技術(shù)基礎(chǔ)(課程課件完整版)
- 《2023版CSCO卵巢癌診療指南》解讀課件
- 【醫(yī)院藥品管理系統(tǒng)探析與設(shè)計(論文)10000字】
評論
0/150
提交評論