版權(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ì)知識(shí)知識(shí)BH計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室內(nèi)容提要& 第1章 微機(jī)基礎(chǔ)知識(shí)& 第2章 89C51單片機(jī)硬件結(jié)構(gòu)和原理& 第3章 89C51指令系統(tǒng)& 第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí)& 第4章 C-51程序設(shè)計(jì)知識(shí)& 第5章 中斷系統(tǒng)& 第6章 定時(shí)器及應(yīng)用& 第7章 89C51串行口及通信技術(shù)& 第8章 單片機(jī)小系統(tǒng)片外擴(kuò)展& 第9章 應(yīng)用系統(tǒng)配置及接口技術(shù)計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室第4章 匯編語(yǔ)言程序設(shè)計(jì)知識(shí)4.1 4.1 編程的步驟、方法和技巧編程的步驟、方法和技巧4.2 4.2 匯編
2、語(yǔ)言源程序的編輯和匯編匯編語(yǔ)言源程序的編輯和匯編4.3 4.3 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與舉例匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與舉例計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.1 4.1 編程的步驟、方法和技巧編程的步驟、方法和技巧4.1.1 4.1.1 編程的步驟編程的步驟4.1.2 4.1.2 編程的方法和技巧編程的方法和技巧4.1.3 4.1.3 匯編語(yǔ)言程序的基本結(jié)構(gòu)匯編語(yǔ)言程序的基本結(jié)構(gòu)計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.1.1 4.1.1 編程的步驟編程的步驟 一、分析問題一、分析問題 二、確定算法二、確定算法 三、畫程序流程圖三、畫程序
3、流程圖 四、編寫程序四、編寫程序計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室一、分析問題 對(duì)需要解決的問題進(jìn)行分析,以求對(duì)問題由正確的理解。如, 解決問題的任務(wù)是什么? 工作過程? 現(xiàn)有的條件,已知數(shù)據(jù),對(duì)運(yùn)算的精度和速度方面的要求? 硬件資源如何訪問?計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室二、確定算法 算法是如何將實(shí)際問題轉(zhuǎn)化成程序模塊來(lái)處理。 在編程以前,先要對(duì)幾種不同的算法進(jìn)行分析、比較,找出最適宜的算法計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室三、畫程序流程圖程序流程圖是使用各種圖形、符號(hào)、有向線段等來(lái)說(shuō)明程序設(shè)
4、計(jì)過程的一種直觀的表示。流程圖步驟分得越細(xì)致,編寫程序是也越方便。畫流程圖是程序結(jié)構(gòu)設(shè)計(jì)是采用的一種重要手段。一個(gè)系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的流程圖。流程圖常采用的圖形和符號(hào)。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室橢圓框或桶形框:表示程序的開始或結(jié)束。矩形框:表示要進(jìn)行的工作。菱形框:表示要判斷的事情,菱形框內(nèi)的表達(dá)式表示要判斷的內(nèi)容。圓圈:表示連接點(diǎn)指向線:表示程序的流向計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室四、編寫程序 用89C51匯編語(yǔ)言編寫的源程序行(一條語(yǔ)句)包括四個(gè)部分,也叫四個(gè)字段:標(biāo)號(hào):操作碼操作數(shù);注釋 每
5、個(gè)字段之間要用分隔符分隔,而每個(gè)字段內(nèi)部不能使用分隔符。可以用作分隔符的符號(hào):空格“ ”、冒號(hào)“:”、逗號(hào)“,”、分號(hào)“;”等。例:LOOP:MOV A,#00H;立即數(shù)00HA計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.1.2 編程的方法和技巧一、模塊化的程序設(shè)計(jì)方法二、編程技巧計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室一、模塊化的程序設(shè)計(jì)方法1、程序功能模塊化的優(yōu)點(diǎn)2、劃分模塊的原則計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室1、程序功能模塊化的優(yōu)點(diǎn) 單個(gè)模塊結(jié)構(gòu)的程序功能單一,易于編寫、閱讀、調(diào)試和修改。 便于分工,
6、從而可使多個(gè)程序員同時(shí)進(jìn)行程序的編寫和調(diào)試工作,加快軟件研制進(jìn)度。 程序可讀性好,便于功能擴(kuò)充和版本升級(jí)。 對(duì)程序的修改可局部進(jìn)行,其它部分可以保持不變。 對(duì)于使用頻繁的子程序可以建立子程序庫(kù),便于多個(gè)模塊調(diào)用。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室2、劃分模塊的原則 每個(gè)模塊應(yīng)具有獨(dú)立的功能,能產(chǎn)生一個(gè)明確的結(jié)果,即單模塊的功能高內(nèi)聚性。 模塊之間的控制耦合應(yīng)盡量簡(jiǎn)單,數(shù)據(jù)耦合應(yīng)盡量少,即模塊間的低耦合性??刂岂詈鲜侵改K進(jìn)入和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息交換方式、交換量的多少及交換頻繁程度。 模塊長(zhǎng)度適中。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)
7、教研室電子信息科學(xué)教研室二、編程技巧1、盡量采用循環(huán)結(jié)構(gòu)和子程序。2、盡量少用無(wú)條件轉(zhuǎn)移指令。3、對(duì)于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數(shù)的寄存器外,子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧(返回前再?gòu)棾觯?,即保護(hù)現(xiàn)場(chǎng)。4、在中斷處理程序中,除了要保護(hù)處理程序中用到的寄存器外,還要保護(hù)標(biāo)志寄存器。5、用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程序中,一般不必把累加器內(nèi)容壓入堆棧。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.2 匯編語(yǔ)言源程序的編輯和匯編4.2.1 源程序編輯4.2.2 源程序的匯編4.2.3 偽指令計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電
8、子信息科學(xué)教研室電子信息科學(xué)教研室4.2.1 源程序編輯在微型計(jì)算機(jī)上,借助編輯軟件,編寫或修改匯編語(yǔ)言源程序。如行編輯或屏幕編輯軟件。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.2.2 源程序的匯編 匯編:將匯編語(yǔ)言源程序轉(zhuǎn)換為機(jī)器碼表示的目標(biāo)程序的過程。對(duì)單片機(jī)有: 一、手工匯編 二、機(jī)器匯編 三、反匯編計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室一、手工匯編 通過手工方式查指令編碼表,逐個(gè)把助記符指令“翻譯”成機(jī)器碼,然后把得到的機(jī)器碼程序鍵入單片機(jī),進(jìn)行調(diào)試和運(yùn)行。 手工匯編的缺點(diǎn): 1、偏移量的計(jì)算容易出錯(cuò) 2、程序的修改會(huì)引起后面指令
9、地址的變化,轉(zhuǎn)移指令的偏移量也要重新計(jì)算。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室二、機(jī)器匯編 機(jī)器匯編是在計(jì)算機(jī)上使用交叉匯編程序進(jìn)行源程序的匯編。匯編工作由機(jī)器自動(dòng)完成,最后得到以機(jī)器碼表示的目標(biāo)程序。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室三、反匯編 將二進(jìn)制機(jī)器語(yǔ)言程序翻譯成匯編語(yǔ)言程序的過程稱反匯編。 匯編和反匯編的過程如圖4-3所示。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室源程序(匯編語(yǔ)言)目標(biāo)碼(機(jī)器語(yǔ)言)匯編(匯編程序)反匯編(匯編程序)圖4-3 匯編和反匯編過程計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息
10、科學(xué)教研室電子信息科學(xué)教研室4.2.3 偽指令 偽指令不是真正的指令,無(wú)對(duì)應(yīng)的機(jī)器碼,在匯編時(shí)不產(chǎn)生目標(biāo)程序,只是用來(lái)對(duì)匯編過程進(jìn)行某種控制。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室ORG 匯編起始命令 格式:ORG 16位地址 功能:規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目標(biāo)程序存放的起始地址。例如: ORG 2000HSTART:MOV A,#64H 規(guī)定了START的地址是2000H,又規(guī)定了匯編后的第一條指令碼從2000H開始存放。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室END 匯編結(jié)束指令 格式:END 功能:通知匯編程序結(jié)束
11、匯編。在END之后所有的匯編指令均不予以處理。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室EQU 賦值命令 格式:字符名稱 EQU 項(xiàng)(數(shù)或匯編符號(hào)) 功能:把“項(xiàng)”賦給“字符名稱”。 注意:字符名稱不等于標(biāo)號(hào)(其后沒有冒號(hào));其中的項(xiàng),可以是數(shù),也可以是匯編符號(hào)。EQU賦值過的符號(hào)名可以用作數(shù)據(jù)、代碼地址、位地址或一個(gè)立即數(shù)??梢允?位的,也可以是16位的。 例如:計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室EQU 賦值命令例1:AA EQU R1 MOV A,AA;AA代表工作寄存器R1例2: A10 EQU 10 DELY EQU 07EBH
12、MOV A,A10;A10作為片內(nèi)的一個(gè)直接地址 LCALL DELY;DELY作為一個(gè)16位子程序的入口地址計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室DATA 數(shù)據(jù)地址賦值命令 格式:字符名稱 DATA 表達(dá)式 功能:與EQU類似,但有以下差別: 1、EQU定義的字符名必須先定義后使用,而DATA定義的字符名可以后定義先使用。 2、用EQU偽指令可以把一個(gè)匯編符號(hào)賦給一個(gè)名字,而DATA只能把數(shù)據(jù)賦給字符名。 3、DATA語(yǔ)句可以把一個(gè)表達(dá)式的值賦給字符名稱,其中的表達(dá)式應(yīng)是可求值的。DATA偽指令在程序中常用來(lái)定義數(shù)據(jù)地址計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教
13、研室電子信息科學(xué)教研室DB 定義字節(jié)命令 格式:DB(項(xiàng)或項(xiàng)表) 功能:通知匯編程序從當(dāng)前ROM地址開始,保留一個(gè)字或字節(jié)串的存儲(chǔ)單元,并存入DB后的數(shù)據(jù)。 注意:項(xiàng)或項(xiàng)表可以是一個(gè)字節(jié),用逗號(hào)隔開的字節(jié)串或括在單引號(hào)中的ASCII字符串。 例如:計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室DB 定義字節(jié)命令 ORG 2000H DB 0A3H LIST:DB 26H,03H STR:DB ABC 經(jīng)匯編后(2000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H,(*41H,4
14、2H,43H分別為A,B,C的ASCII碼)計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室DW 定義字命令 格式:DW 16位數(shù)據(jù)項(xiàng)或項(xiàng)表 功能:把DW后的16位數(shù)據(jù)項(xiàng)或項(xiàng)表從當(dāng)前地址連續(xù)存放。每項(xiàng)數(shù)值為16位二進(jìn)制數(shù),高8位先放,低8位后存放。DW用于定義一個(gè)地址表。 例如:計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室DW 定義字命令 ORG 1500HTABLE:DW 7234H,8AH,10H 經(jīng)匯編后(1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=
15、10H,計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室DS 定義存儲(chǔ)空間命令 格式:DS 表達(dá)式 功能:在匯編時(shí),從指定地址開始保留DS之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元以備后用。 例如:ORG 1000H DS 08H DB 30H,8AH匯編后,從1000H保留8個(gè)單元,然后從1008H按DB命令給內(nèi)存賦值,即(1008H)=30H (1009H)=8AH計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室BIT 位地址符號(hào)命令 格式:字符名 BIT 位地址 功能:把BIT后的位地址值賦給字符名。其中字符名不是標(biāo)號(hào),其后沒有冒號(hào),但字符名是必須的。 例如: A
16、1 BIT P1.0 A2 BIT 02H 匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.3 程序設(shè)計(jì)基礎(chǔ)與舉例 4.3.0 MCS-51匯編語(yǔ)言程序代碼框架 4.3.1 順序程序設(shè)計(jì) 4.3.2 分支程序設(shè)計(jì) 4.3.3 循環(huán)程序設(shè)計(jì) 4.3.4 子程序設(shè)計(jì)及調(diào)用 4.3.5 邏輯運(yùn)算程序設(shè)計(jì)計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室 ORG 1000HORG 1000HLEN EQU 10HLEN EQU 10HSTART: START: MOV AMOV A,#LEN#L
17、EN ADD AADD A,#30H#30H SJMP $ SJMP $ ORG 2000HORG 2000HTAB1:TAB1: DB 32H DB 32H,0A7H 0A7H TAB2:TAB2: DW 324AH DW 324AH,3CH3CHTAB3:TAB3: DS 5 DS 5 ENDEND7410243080FEFFFFFFFF1000H32A7324A003CFFFFFFFF2000H2001H2002H2003H2004H2005H2006H2007H2008H2009H200AH200BHTAB1TAB2TAB34.3.0 MCS-51匯編語(yǔ)言程序代碼框架計(jì)算機(jī)科學(xué)學(xué)院計(jì)算
18、機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.3.1 順序程序順序程序是一種最簡(jiǎn)單,最基本的程序。特點(diǎn):程序按編寫的順序依次往下執(zhí)行每一條指令,直到最后一條。例 有一變量存放在片內(nèi)RAM 20H單元,其取值范圍為:00H05H,編程實(shí)現(xiàn):求變量的平方值,并存入片內(nèi)RAM 21H單元。分析:XX220H21H內(nèi)部RAMTABLE+002122232425200H01H04H09H10H19H+1+2+3+4+5XX2計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室步驟:1. 送表頭首地址2. 取X到A3. 求X2 存于A4. 將X2存于內(nèi)部RAM21HORG 1000HS
19、TART: MOV DPTR ,#TABLEMOV A , 20HMOVC A ,A+DPTRMOV 21H , ASJMP $TABLE: DB 00H, 01H, 04H DB 09H, 10H, 19HORG 2000H5. 建立平方表計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室例 三字節(jié)無(wú)符號(hào)數(shù)加法。一個(gè)加數(shù)存放在內(nèi)部RAM 50H,51H,52H單元,另一個(gè)加數(shù)存放在內(nèi)部RAM 60H,61H,62H單元,將相加結(jié)果存入50H,51H,52H單元。進(jìn)位存放在位尋址區(qū)的00H位。按低字節(jié)對(duì)應(yīng)低地址存放。分析:+15 1 09AC5 1626160789ABF123
20、45652515052515000R0R1R0計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室ORG 0000HSTART: LJMP START1 ORG 1000HSTART1:MOV A, 50H ADD A, 60H MOV 50H,A MOV A, 51H ADDC A,61H MOV 51H,A MOV A, 52H ADDC A, 62H MOV 62H,A MOV 00H,C SJMP $思考題:1. 若求兩個(gè)十字節(jié)數(shù)的和,程序應(yīng)該怎么寫?計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室1分支程序的基本形式 分支程序有三種基本形式。分支程序的
21、設(shè)計(jì)要點(diǎn)如下:(1)先建立可供條件轉(zhuǎn)移指令測(cè)試的條件。 (2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號(hào)。4.3.2 分支程序計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室N(a)(b)(c) 分支程序結(jié)構(gòu)流程圖分支程序結(jié)構(gòu)流程圖分支0K=0 K=1 K=nK=?分支1分支nY 條件滿足?下條指令程序段A條件滿足?程序段A程序段BNY計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室例 X存于20H單元,求出Y值,將Y值存入30H單元。 X X0 Y = 20H X=0 X+5 X0分析:根據(jù)數(shù)據(jù)的符號(hào)位判別該數(shù)的正負(fù),若最高位為0,再判別該數(shù)
22、是否為0。請(qǐng)看程序流程。2雙向分支程序設(shè)計(jì)舉例計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室A為0?Y取數(shù),A(20H)開始結(jié)束A0?YNNA#20HAX+5AX(30H)A程序流程圖計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室3多向分支程序設(shè)計(jì)舉例例 根據(jù)R0的值轉(zhuǎn)向7個(gè)分支程序。 R0=0,轉(zhuǎn)向SUB0; R0=1,轉(zhuǎn)向SUB1; . R0=N,轉(zhuǎn)向SUBN。分析:利用JMP A+DPTR 指令直接給PC賦值,使程序?qū)崿F(xiàn)轉(zhuǎn)移。程序流程如下。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室多向分支程序流程圖結(jié)束K=?轉(zhuǎn)SUB0轉(zhuǎn)SU
23、B1轉(zhuǎn)SUBNK=0 K=1 K=N開始計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室 參考程序如下: ORG 2000HSTART:MOV DPTR,#TAB ;轉(zhuǎn)移指令表首地址 MOV A,R0 ;取數(shù) RL A ;A2(A) JNC A1 INC DPHA1 : JMP A+DPTR;PC A+DPTRTAB: AJMP SUB0 ;轉(zhuǎn)移指令表 AJMP SUB1 AJMPSUB2 AJMPSUB3 AJMPSUB4 AJMPSUBN計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室5.3.3 循環(huán)程序 在程序運(yùn)行時(shí),有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序,可以
24、使用循環(huán)程序。其結(jié)構(gòu)包括四部分: 1、置循環(huán)初值 2、循環(huán)體(循環(huán)工作部分) 3、修改控制變量 4、循環(huán)控制部分 其組織方式如圖4-2所示。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室1、置循環(huán)初值 對(duì)于循環(huán)程序中所使用的工作單元,在循環(huán)開始時(shí)應(yīng)置初值。 例如,工作寄存器設(shè)置計(jì)數(shù)初值,累加器A清0,以及設(shè)置地址指針、長(zhǎng)度等。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室2、循環(huán)體(循環(huán)工作部分) 重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和循環(huán)控制部分。 循環(huán)控制部分每循環(huán)一次,檢查結(jié)束條件,當(dāng)滿足條件時(shí),就停止循環(huán),往下繼續(xù)執(zhí)行其他程序計(jì)算機(jī)科學(xué)學(xué)院計(jì)算
25、機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室3、修改控制變量 在循環(huán)程序中,不許給出循環(huán)結(jié)束條件。 常見的是計(jì)數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就停止循環(huán)。 在單片機(jī)中,一般用一個(gè)工作寄存器Rn作為計(jì)數(shù)器,對(duì)該計(jì)數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一次,計(jì)數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計(jì)數(shù)器的置件為0時(shí),就停止循環(huán)。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4、循環(huán)控制部分 根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。 89C51可采用DJNZ指令來(lái)自動(dòng)修改控制變量并能結(jié)束循環(huán)。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室置初值循環(huán)體循環(huán)修改循環(huán)控制退出循
26、環(huán)未完完(a)置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(b)圖4-2 循環(huán)組織方式流程圖計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室 5循環(huán)程序設(shè)計(jì)舉例1. 數(shù)據(jù)傳送2. 算術(shù)運(yùn)算4. 軟件定時(shí)3. 排序計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室例 編程實(shí)現(xiàn)將內(nèi)部RAM 20H開始的連續(xù)的10個(gè)單元清零。(加) ORG 0100HCLEAR: MOV R2, #10 MOV R0, #20H CLR A;初始化部分LOOP: MOV R0, A INC R0 DJNZ R2, LOOP SJMP $;執(zhí)行清零操作;修改地址指針;判斷循環(huán)是否結(jié)束?
27、計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室例 編程實(shí)現(xiàn)將內(nèi)部RAM 起始地址為data的數(shù)據(jù)串傳送到外部RAM中起始地址為BUF的存儲(chǔ)區(qū)內(nèi),直到發(fā)現(xiàn)“$”字符,則停止傳送。分析:此例中,我們不知道循環(huán)次數(shù),但知道循環(huán)結(jié)束條件,即遇到“$”字符時(shí),循環(huán)停止。那么,如何判斷字符“$”?CJNE A, #24H(或$), LOOP1(A)= #24H?不相等,轉(zhuǎn)LOOP1 相等,執(zhí)行下條指令取數(shù) 判斷是否結(jié)束 結(jié)束 傳送 修改指針計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室 MOV R0, #data MOV DPTR, #BUFLOOP0: MOV A
28、, R0 CJNE A, #24H, LOOP1 SJMP DONELOOP1: MOVX DPTR, A INC R0 INC DPTR SJMP LOOP0DONE: END;初始化部分;取數(shù);判斷是否為$;是$,結(jié)束;不是$,繼續(xù)找;修改指針;取下一數(shù);結(jié)束計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室例 單字節(jié)求和。 設(shè)在內(nèi)部RAM 20H單元開始存有10個(gè)單字節(jié)無(wú)符號(hào)數(shù),求其和,存于內(nèi)部RAM 30H(低位),31H單元(高位)。MOV R0, #20HMOV R2, #10CLR AMOV 31H, A;初始化部分LOOP: ADD A, R0 JNC NEXT
29、 INC 31HNEXT: INC R0 DJNZ R2, LOOP MOV 30H, A SJMP $;求和;沒有進(jìn)位,準(zhǔn)備下一數(shù);有進(jìn)位,31H加1;修改指針;10個(gè)數(shù)加完否,未完,回LOOP;加完,存低位和到30H計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室例 無(wú)符號(hào)數(shù)排序。在片內(nèi)RAM中,起始地址為30H的8個(gè)單元中存放有8個(gè)無(wú)符號(hào)數(shù)。試進(jìn)行升序排序。數(shù)據(jù)排序最常用的方法是冒泡排序法。執(zhí)行時(shí)從前向后進(jìn)行相鄰數(shù)的比較,如數(shù)據(jù)的大小次序與要求的順序不符,就將這兩個(gè)數(shù)互換,否則不換。進(jìn)行第一次冒泡,就會(huì)把最大數(shù)(或最小數(shù))放到最前(降序)或最后(升序)。再進(jìn)行第一次冒泡
30、,就會(huì)把次大數(shù)(或最小數(shù))放到第二位(降序)或倒數(shù)第二位(升序)計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室START: CLR C ;互換標(biāo)志清 0 MOV R7, #07H ;各次冒泡比較次數(shù)MOV R0, #30H ;送數(shù)據(jù)區(qū)首地址LOOP: MOV A, R0 ;取前數(shù) MOV 2BH, A ;暫存MOV 2AH, R0 ;取后數(shù) INC R0 ;CLR CSUBB A, R0 ;前數(shù)減后數(shù)JC NEXT ; 前數(shù)小于后數(shù),進(jìn)行下一次比較MOV R0 ,2BH ; 前數(shù)大于后數(shù),將大數(shù)放在后面DEC R0MOV R0,2AH ;將小數(shù)放在前面計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科
31、學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室SETB 00H ;置互換標(biāo)志INC R0 ; 準(zhǔn)備下一次比較NEXT : DJNZ R7, LOOP ;進(jìn)行下一次比較JB 00H, START ;進(jìn)行下一輪冒泡SJMP $計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室50 ms延時(shí)程序如下: DELAY: MOV R7, 200 DEL2: MOV R6, 123 DEL1: NOP DJNZ R6, DEL1 DJNZ R7, DEL2 RET 例例 50 ms延時(shí)程序。 延時(shí)程序與 MCS - 51 執(zhí)行指令的時(shí)間有關(guān), 如果使用 6MHz晶振, 一個(gè)機(jī)器周期為 2 s,
32、 計(jì)算出一條指令以至一個(gè)循環(huán)所需要的執(zhí)行時(shí)間, 給出相應(yīng)的循環(huán)次數(shù), 便能達(dá)到延時(shí)的目的。;1 s;1 s;1 s;2 s;2s;2 s123次200次T=1+(3123)+3 200+2*2=XXXX ms 計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室4.3.4 子程序的設(shè)計(jì)及其調(diào)用 1子程序概念 通常把這些基本操作功能編制為程序段作為獨(dú)立的子程序, 以供不同程序或同一程序反復(fù)調(diào)用。在程序中需要執(zhí)行這種操作的地方放置一條調(diào)用指令, 當(dāng)程序執(zhí)行到調(diào)用指令, 就轉(zhuǎn)到子程序中完成規(guī)定的操作, 并返回到原來(lái)的程序繼續(xù)執(zhí)行下去。2. 子程序的調(diào)用所謂調(diào)用子程序,暫時(shí)中斷主程序的執(zhí)
33、行,而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室調(diào)用子程序應(yīng)注意:(1)子程序占用的存儲(chǔ)單元和寄存器。 (2)參數(shù)的傳遞。(3)保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。(4)嵌套調(diào)用與遞歸調(diào)用。如圖4-9所示。調(diào)用子程序的指令有“ACALL”和“LCALL”, 執(zhí)行調(diào)用指令時(shí), 先將程序地址指針PC改變(“ACALL”加 2, “LCALL”加 3), 然后 PC值壓入堆棧, 用新的地址值代替。執(zhí)行返回指令時(shí), 再將 PC值彈出。 下一頁(yè)計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室子程序的調(diào)用與返回 返回RETLCALL SUBSUB
34、計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室子程序的嵌套調(diào)用與返回LCALL ARETRETLCALL B子程序A子程序B返回計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室 子程序調(diào)用中, 主程序應(yīng)先把有關(guān)的參數(shù)存入約定的位置, 子程序在執(zhí)行時(shí), 可以從約定的位置取得參數(shù);當(dāng)子程序執(zhí)行完, 將得到的結(jié)果再存入約定的位置, 返回主程序后, 主程序可以從這些約定的位置上取得需要的結(jié)果, 這就是參數(shù)的傳遞。參數(shù)的傳遞的方法:1. 利用累加器或寄存器2. 利用存儲(chǔ)器3. 利用堆棧保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng):子程序執(zhí)行過程中,常常要用到一些通用單元,如R0R7,A,DP
35、TR,PSW等。保護(hù)現(xiàn)場(chǎng):子程序要用到這些單元,因此把主程序中這些單元內(nèi)容保存起來(lái),通常用壓棧操作?;謴?fù)現(xiàn)場(chǎng):執(zhí)行完子程序返回主程序后,要恢復(fù)這些單元內(nèi)容,通常用出棧操作。返回計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室2子程序設(shè)計(jì)舉例例4.3.12 編程實(shí)現(xiàn)F=X2 +Y2,設(shè)F,X,Y分別存于內(nèi)部RAM的DTA,DTB,DTC單元中。例DTA EQU 30HDTB EQU 31HDTC EQU 32H程序清單: ORG 0100HSTART: MOV A, DTAACALL SQRMOV R1, A;A X;求X平方;暫存于R1計(jì)算機(jī)科學(xué)學(xué)院計(jì)算機(jī)科學(xué)學(xué)院 電子信息科學(xué)教研室電子信息科學(xué)教研室MOV DTC,AMOV A, DTBACALL SQRADD A, R1SJMP $SQR: MOV DPTR, #TABMOVC A, A+DPTRRETTAB: DB 0,1,4,9,16,25,36,49,64,81ENDO
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中國(guó)聯(lián)通昭通市分公司招聘?jìng)淇碱}庫(kù)及參考答案詳解一套
- 2025年中職(助產(chǎn))產(chǎn)科護(hù)理階段測(cè)試題及答案
- 2025年中職(學(xué)前教育)幼兒教學(xué)階段測(cè)試題及答案
- 2025年中職(物流包裝實(shí)訓(xùn))包裝標(biāo)識(shí)設(shè)計(jì)階段測(cè)試試題及答案
- 2026年地下結(jié)構(gòu)設(shè)計(jì)與分析方法
- 2026年電氣傳動(dòng)系統(tǒng)的網(wǎng)絡(luò)化設(shè)計(jì)與應(yīng)用
- 2026年橋梁風(fēng)荷載對(duì)結(jié)構(gòu)優(yōu)化設(shè)計(jì)的影響探討
- 2026年電氣控制系統(tǒng)的項(xiàng)目管理與實(shí)施
- 2026年地質(zhì)勘察與生態(tài)保護(hù)的協(xié)同
- 2026年綠色建筑項(xiàng)目中的電氣經(jīng)濟(jì)分析
- 鹿邑縣2025年事業(yè)單位引進(jìn)高層次人才備考題庫(kù)及答案詳解(新)
- 2025云南昆明巫家壩城市發(fā)展建設(shè)有限公司社會(huì)招聘14人筆試歷年難易錯(cuò)考點(diǎn)試卷帶答案解析
- 2025年大學(xué)(直播電商實(shí)訓(xùn))管理實(shí)操試題及答案
- 醫(yī)院重癥醫(yī)學(xué)科主任談重癥醫(yī)學(xué)治療
- 云南省2025年普通高中學(xué)業(yè)水平合格性考試地理試題
- 基礎(chǔ)土方回填施工工藝方案
- 2025年蘇州工業(yè)園區(qū)領(lǐng)軍創(chuàng)業(yè)投資有限公司招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 天一大聯(lián)考海南省2026屆數(shù)學(xué)高二上期末統(tǒng)考試題含解析
- DB50∕T 1803-2025 鄉(xiāng)村振興勞務(wù)品牌人員等級(jí)評(píng)定 武陵山縫紉工
- 中煤集團(tuán)機(jī)電裝備部副部長(zhǎng)管理能力考試題集含答案
- 黨支部2026年度主題黨日活動(dòng)方案
評(píng)論
0/150
提交評(píng)論