匯編語言程序設(shè)計(jì)知識wt課件_第1頁
匯編語言程序設(shè)計(jì)知識wt課件_第2頁
匯編語言程序設(shè)計(jì)知識wt課件_第3頁
匯編語言程序設(shè)計(jì)知識wt課件_第4頁
匯編語言程序設(shè)計(jì)知識wt課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄 第一章 微機(jī)基礎(chǔ)知識 第二章 89C51單片機(jī)的結(jié)構(gòu)和原理 第三章 89C51指令系統(tǒng) 第四章 匯編語言程序設(shè)計(jì)知識 第五章 中斷系統(tǒng) 第六章 定時(shí)器及應(yīng)用 第七章 89C51串行口及通信技術(shù) 第八章 單片機(jī)小系統(tǒng)片外擴(kuò)展 第九章 應(yīng)用系統(tǒng)配置及接口技術(shù) 附錄A 89C51指令系統(tǒng)表 參考資料第1頁,共54頁。4.1 編程的步驟、方法和技巧4.2 匯編語言源程序的編輯和匯編第四章匯編語言程序設(shè)計(jì)知識第2頁,共54頁。4.1.1 編程的步驟4.1.2 編程的方法和技巧4.1.3 匯編語言程序的基本結(jié)構(gòu)4.1 編程的步驟、方法和技巧第3頁,共54頁。1、分析問題2、確定算法3、畫程序流程圖4

2、、編寫程序4.1.1 編程的步驟第4頁,共54頁。1、分析問題 對需要解決的問題進(jìn)行分析,以求對問題有正確的理解。 解決問題的任務(wù)是什么? 工作過程? 現(xiàn)有的條件,已知數(shù)據(jù),對運(yùn)算的精度和速 度方面的要求? 設(shè)計(jì)的硬件結(jié)構(gòu)是否方便編程?4.1.1 編程的步驟第5頁,共54頁。2、確定算法 算法是如何將實(shí)際問題轉(zhuǎn)化成程序模塊來處理。 在編程以前,先要對幾種不同的算法進(jìn)行分 析、比較,找出最適宜的算法。4.1.1 編程的步驟第6頁,共54頁。 程序流程圖是使用各種圖形、符號、有向線段等來說明程序 設(shè)計(jì)過程的一種直觀的表示。 畫流程圖是程序結(jié)構(gòu)設(shè)計(jì)是采用的一種重要手段。 流程圖步驟分得越細(xì)致,編寫程

3、序是也越方便。 一個(gè)系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的流程圖。 流程圖常采用的圖形和符號。3、畫程序流程圖4.1.1 編程的步驟第7頁,共54頁。橢圓框或桶形框:表示程序的開始或結(jié)束。矩形框:表示要進(jìn)行的工作。菱形框:表示要判斷的事情,菱形框內(nèi)的 表達(dá)式表示要判斷的內(nèi)容。圓圈:表示連接點(diǎn)指向線:表示程序的流向流程圖常采用的圖形和符號第8頁,共54頁。開始將學(xué)生成績存入累加器A中比較(A)與#60的大小(A)=#60?增加R1的值打印學(xué)生成績(A)#60?增加R2的值結(jié)束YESYESNONO第9頁,共54頁。4、編寫程序用89C51匯編語言編寫的源程序行(一條語句)包括四個(gè)部分,也叫四個(gè)

4、字段: 標(biāo)號:操作碼操作數(shù);注釋每個(gè)字段之間要用分隔符分隔,而每個(gè)字段內(nèi)部不能使用分隔符??梢杂米鞣指舴姆枺嚎崭瘛?”、冒號“:”、逗號“,”、分號“;”等。 例:LOOP:MOV A,#00H ;立即數(shù)00HA4.1.1 編程的步驟第10頁,共54頁。標(biāo)號:操作碼操作數(shù);注釋出現(xiàn)在助記符之前的,是由用戶定義的一個(gè)字符串。一條指令的標(biāo)號是該條指令的符號名字,標(biāo)號的值是匯編這條指令時(shí)指令的地址,代表16位長的ROM地址編碼。標(biāo)號可以由賦值偽指令賦值,如果沒有賦值,匯編程序把存放該指令目標(biāo)碼第一字節(jié)的存儲單元的地址賦給該標(biāo)號,所以,標(biāo)號又叫指令標(biāo)號。并不是每一條語句都需要標(biāo)號,只有那些欲被引用

5、的語句才需要。(1)標(biāo)號4、編寫程序4.1.1 編程的步驟第11頁,共54頁。標(biāo)號:操作碼操作數(shù);注釋對于標(biāo)號的限定: 最多可由31個(gè)字符構(gòu)成,字符可以是英文字母(一般不區(qū) 分大小寫)、阿拉伯?dāng)?shù)字和其他字符(“?”和“_”); 第一字符必須是非數(shù)字; 后面跟冒號“:”; 一個(gè)標(biāo)號在程序中只能定義一次; 標(biāo)號不能為指令助記符、偽指令、SFR名稱等系統(tǒng)保留字。(1)標(biāo)號4、編寫程序4.1.1 編程的步驟第12頁,共54頁。標(biāo)號:操作碼操作數(shù);注釋(2)操作碼操作碼是必不可少的。它用一組字母符號表示指令的操作碼。在89C51中,由指令助記符組成。一般留出標(biāo)號字段的空位,以便與標(biāo)號相區(qū)別。4、編寫程序

6、4.1.1 編程的步驟第13頁,共54頁。(3)操作數(shù)匯編語言指令可能要求或不要求操作數(shù),所以這一字段可能有也可能沒有。若有兩個(gè)操作數(shù),操作數(shù)之間用逗號“,”分開。操作數(shù)字段的內(nèi)容復(fù)雜多樣,可能包括:標(biāo)號:操作碼操作數(shù);注釋4、編寫程序4.1.1 編程的步驟第14頁,共54頁。 工作寄存器:由RS0和RS1規(guī)定的當(dāng)前工作寄存器區(qū)中的R0R7。 特殊功能寄存器:21個(gè)特殊功能寄存器SFR的名字。 標(biāo)號名: 賦值標(biāo)號 由匯編指令EQU等賦值的標(biāo)號; 指令標(biāo)號 指令標(biāo)號指示的指令的第一字節(jié)地址是該標(biāo)號的值。 $:用來表示程序計(jì)數(shù)器的當(dāng)前值。(3)操作數(shù) 符號第15頁,共54頁。 可為二進(jìn)制(B)、八

7、進(jìn)制(O)、十進(jìn)制(D)、十六進(jìn)制(H) 或字符串。(3)操作數(shù) 數(shù)值 匯編時(shí),計(jì)算出表達(dá)式的值填入目標(biāo)碼。 一般缺省情況下,匯編器默認(rèn)的數(shù)值是十進(jìn)制數(shù)值; 若常數(shù)以字符AF開頭,必須在其前面加“0”作為引導(dǎo),以便 與標(biāo)號或符號名相區(qū)別。 表達(dá)式4.1.1 編程的步驟第16頁,共54頁。4.1 編程的步驟4、編寫程序標(biāo)號:操作碼操作數(shù);注釋(4)注釋注釋部分不是匯編語言的功能部分,只是用語增加程序的可讀性。良好的注釋是匯編語言程序編寫中的重要組成部分。由“;”或“/*/”表示。5、上機(jī)調(diào)試第17頁,共54頁。4.1.2 編程的方法和技巧1、模塊化的程序設(shè)計(jì)方法2、編程技巧第18頁,共54頁。1

8、、模塊化的程序設(shè)計(jì)方法單個(gè)模塊結(jié)構(gòu)的程序功能單一,易于編寫、調(diào)試和修改。便于分工,從而可使多個(gè)程序員同時(shí)進(jìn)行程序的編寫和調(diào)試工作,加快軟件研制進(jìn)度。程序可讀性好,便于功能擴(kuò)充和版本升級。對程序的修改可局部進(jìn)行,其它部分可以保持不變。對于使用頻繁的子程序可建立子程序庫,便于多個(gè)模塊調(diào)用。(1)程序功能模塊化的優(yōu)點(diǎn)4.1.2 編程的方法和技巧第19頁,共54頁。1、模塊化的程序設(shè)計(jì)方法每個(gè)模塊應(yīng)具有獨(dú)立的功能,能產(chǎn)生一個(gè)明確的結(jié)果,即單模塊的功能高內(nèi)聚性。模塊之間的控制耦合應(yīng)盡量簡單,數(shù)據(jù)耦合應(yīng)盡量少,即模塊間的低耦合性??刂岂詈鲜侵改K進(jìn)入和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息交換方式、交

9、換量的多少及交換頻繁程度。模塊長度適中。20條100條的范圍較合適。(2)劃分模塊的原則4.1.2 編程的方法和技巧第20頁,共54頁。2、編程技巧盡量采用循環(huán)結(jié)構(gòu)和子程序。盡量少用無條件轉(zhuǎn)移指令。對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數(shù)的寄存器外,子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧(返回前再彈出),即保護(hù)現(xiàn)場。在中斷處理程序中,除了要保護(hù)處理程序中用到的寄存器外,還要保護(hù)標(biāo)志寄存器。用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程序中,一般不必把累加器內(nèi)容壓入堆棧。4.1.2 編程的方法和技巧第21頁,共54頁。4.1.2 編程的方法和技巧1、模塊化的程序設(shè)計(jì)方法2、

10、編程技巧第22頁,共54頁。4.1.3 匯編語言程序的基本結(jié)構(gòu) 1、順序程序 2、分支程序 3、循環(huán)程序第23頁,共54頁。1、順序程序順序程序是最簡單的程序結(jié)構(gòu),也稱直線程序。程序按順序一條一條地執(zhí)行指令。這類程序是所有復(fù)雜程序的基礎(chǔ)。要寫出高質(zhì)量的程序還是需要掌握一定的技巧,需要熟悉指令系統(tǒng),正確地選擇指令,最大限度地優(yōu)化程序。4.1.3 匯編語言程序的基本結(jié)構(gòu)第24頁,共54頁。2、分支程序程序分支是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對程序的執(zhí)行進(jìn)行判斷、滿足條件則進(jìn)行程序轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序。分支程序又分為單分支和多分支結(jié)構(gòu)。多分支程序是首先把分支程序按序號排列,然后按序號值

11、進(jìn)行轉(zhuǎn)移。4.1.3 匯編語言程序的基本結(jié)構(gòu)第25頁,共54頁。在MCS-51指令系統(tǒng)中,通過條件判斷實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用這些指令可以完成0、1、正、負(fù),以及相等、不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移。散轉(zhuǎn)指令轉(zhuǎn)向0分支轉(zhuǎn)向1分支轉(zhuǎn)向n-1分支轉(zhuǎn)向n分支K=0K=1K=n-1K=n4.1.3 匯編語言程序的基本結(jié)構(gòu)第26頁,共54頁。JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTRJMPTAB:AJMP ROUT0

12、0 AJMP ROUT01 AJMP ROUT7F例: 128種分支轉(zhuǎn)移程序。 功能:根據(jù)入口條件轉(zhuǎn)移到128個(gè)目的地址。 入口:(R3)=轉(zhuǎn)移目的地址的序號00H7FH。 出口:轉(zhuǎn)移到相應(yīng)子程序入口。128個(gè)子程序首址;A循環(huán)左移一位,相當(dāng)于2第27頁,共54頁。說明:此程序要求128個(gè)轉(zhuǎn)移目的地址(ROUT00 ROUT7FH)必須駐留在與絕對轉(zhuǎn)移指令A(yù)JMP相同的一個(gè)2KB存儲區(qū)內(nèi)。RL指令對變址部分乘以2,因?yàn)槊織lAJMP指令占兩個(gè)字節(jié)。第28頁,共54頁。3、循環(huán)程序在程序運(yùn)行時(shí),有時(shí)需要連續(xù)重復(fù)執(zhí)行某段程序,可以使用循環(huán)程序。其結(jié)構(gòu)包括四部分: 置循環(huán)初值 循環(huán)體(循環(huán)工作部分)

13、修改控制變量 循環(huán)控制部分其組織方式如圖4-2所示。4.1.3 匯編語言程序的基本結(jié)構(gòu)第29頁,共54頁。置初值循環(huán)體循環(huán)修改循環(huán)控制?退出循環(huán)NY(a)組織方式1置初值循環(huán)體循環(huán)修改循環(huán)控制?退出循環(huán)NY(b)組織方式2圖4-2 循環(huán)組織方式流程圖第30頁,共54頁。(1)置循環(huán)初值3、循環(huán)程序?qū)τ谘h(huán)程序中所使用的工作單元,在循環(huán)開始時(shí)應(yīng)置初值。 例如,工作寄存器設(shè)置計(jì)數(shù)初值,累加器 A清0,以及設(shè)置地址指針、長度等。4.1.3 匯編語言程序的基本結(jié)構(gòu)第31頁,共54頁。(2)循環(huán)體(循環(huán)工作部分)3、循環(huán)程序重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和循環(huán)控制部分。 循環(huán)控制部分每循環(huán)一次,

14、檢查結(jié)束條件, 當(dāng)滿足條件時(shí),就停止循環(huán),往下繼續(xù)執(zhí)行 其他程序。4.1.3 匯編語言程序的基本結(jié)構(gòu)第32頁,共54頁。(3)修改控制變量3、循環(huán)程序在循環(huán)程序中,必須給出循環(huán)結(jié)束條件。常見的是計(jì)數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就停止循環(huán)。在單片機(jī)中,一般用一個(gè)工作寄存器Rn作為計(jì)數(shù)器,對該計(jì)數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一次,計(jì)數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計(jì)數(shù)器的置件為0時(shí),就停止循環(huán)。4.1.3 匯編語言程序的基本結(jié)構(gòu)第33頁,共54頁。(4)循環(huán)控制部分3、循環(huán)程序根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。 89C51可采用DJNZ指令來自動修改控制變 量并能結(jié)束循環(huán)。4.1.3 匯編語

15、言程序的基本結(jié)構(gòu)第34頁,共54頁。若循環(huán)程序的循環(huán)體中不再包含循環(huán)程序,即為單重循環(huán)程序。如果在循環(huán)體中還包含循環(huán)程序,那么這種現(xiàn)象稱為循環(huán)嵌套。 注意:多重循環(huán)程序中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)程序,不允許循環(huán)互相相交,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部。 3、循環(huán)程序4.1.3 匯編語言程序的基本結(jié)構(gòu)第35頁,共54頁。4.2 匯編語言源程序的編輯和匯編4.2.1 源程序編輯4.2.2 源程序的匯編4.2.3 偽指令第36頁,共54頁。4.2.1 源程序編輯在微型計(jì)算機(jī)上,借助編輯軟件,編寫或修改匯編語言源程序。如行編輯或屏幕編輯軟件。第37頁,共54頁。4.2.2 源程序的匯編

16、匯編:將匯編語言源程序轉(zhuǎn)換為機(jī)器碼表示的目標(biāo)程序的過程。對單片機(jī)有: 一、手工匯編 二、機(jī)器匯編 三、反匯編第38頁,共54頁。通過手工方式查指令編碼表,逐個(gè)把助記符指令“翻譯”成機(jī)器碼,然后把得到的機(jī)器碼程序鍵入單片機(jī),進(jìn)行調(diào)試和運(yùn)行。手工匯編的缺點(diǎn): 1、偏移量的計(jì)算容易出錯(cuò) 2、程序的修改會引起后面指令地址的變化,轉(zhuǎn)移指令的偏移量也要重新計(jì)算。1、手工匯編4.2.2 源程序的匯編第39頁,共54頁。機(jī)器匯編是在計(jì)算機(jī)上使用交叉匯編程序 進(jìn)行源程序的匯編。匯編工作由機(jī)器 自動完成,最后得到以機(jī)器碼表示 的目標(biāo)程序。2、機(jī)器匯編4.2.2 源程序的匯編第40頁,共54頁。將二進(jìn)制機(jī)器語言程序

17、翻譯成匯編語言程序的過程稱反匯編。匯編和反匯編的過程如圖4-3所示。3、反匯編4.2.2 源程序的匯編第41頁,共54頁。源程序(匯編語言)目標(biāo)碼(機(jī)器語言)匯編(匯編程序)反匯編(匯編程序)圖4-3 匯編和反匯編過程3、反匯編4.2.2 源程序的匯編第42頁,共54頁。 偽指令不是真正的指令,它主要是為匯編程序服務(wù)的,在匯編過程中起控制作用的指示性語句。無地址、無對應(yīng)的機(jī)器碼,在匯編時(shí)不產(chǎn)生目標(biāo)程序。 ORG 匯編起始地址命令 END 匯編語言程序結(jié)束偽指令 EQU 賦值偽指令 DB 定義字節(jié)偽指令 DW 定義字偽指令 BIT 位地址符號偽指令 DATA 定義標(biāo)號數(shù)值偽指令4.2.3 偽指令

18、第43頁,共54頁。1、ORG 匯編起始地址命令 格式:ORG 16位地址功能:規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目 標(biāo)程序存放的起始地址。例如: ORG 2000H START:MOV A,#64H 規(guī)定了START的地址是2000H,又規(guī)定了匯編后的第一條指令碼從2000H開始存放。注意:在一個(gè)源程序中,可以多次使用ORG指令,來規(guī)定不同的程序段的起始地址。但是,地址必須由小到大排列,不能交叉、重疊。4.2.3 偽指令第44頁,共54頁。2、END 匯編結(jié)束命令 格式:END功能:通知匯編程序結(jié)束匯編。在END之后所有的匯編指令均 不予以處理。4.2.3 偽指令第45頁,共54頁

19、。3、EQU 賦值命令 格式:字符名稱 EQU 項(xiàng)(數(shù)或匯編符號)功能:把“項(xiàng)”賦給“字符名稱”。注意:字符名稱不等于標(biāo)號(其后沒有冒號);其中的項(xiàng),可以是數(shù),也可以是匯編符號。EQU賦值過的符號名可以用作數(shù)據(jù)、代碼地址、位地址或一個(gè)立即數(shù)??梢允?位的,也可以是16位的。為程序的閱讀、修改和調(diào)試帶來方便4.2.3 偽指令第46頁,共54頁。3、EQU 賦值命令 例如:例1: A_ASCII EQU A ;A_ASCII分配字符“A”的ASCII MOV A,A_ASCII ;值(41H=65)例2: A10 EQU 10 DELY EQU 07EBH MOV A,A10 ;A10作為片內(nèi)的一

20、個(gè)直接地址 LCALL DELY ;DELY作為一個(gè)16位子程序的入口地址4.2.3 偽指令第47頁,共54頁。4、DATA 數(shù)據(jù)地址賦值命令 格式:字符名稱 DATA 表達(dá)式功能:與EQU類似,但有以下差別: EQU定義的字符名必須先定義后使用,而DATA定義的字 符名可以后定義先使用。 用EQU指令可以把一個(gè)匯編符號賦給一個(gè)名字,而DATA 只能把數(shù)據(jù)賦給字符名。 DATA語句可以把一個(gè)表達(dá)式的值賦給字符名稱,其中的表 達(dá)式應(yīng)是可求值的。 DATA偽指令在程序中用來定義數(shù)據(jù)地址。4.2.3 偽指令第48頁,共54頁。5、DB 定義字節(jié)命令 格式:DB 項(xiàng)或項(xiàng)表功能:通知匯編程序從當(dāng)前ROM地址開始,保留一個(gè)字或字節(jié) 串的存儲單元,并存入DB后的數(shù)據(jù)。注意:項(xiàng)或項(xiàng)表可以是一個(gè)字節(jié),用逗號隔開的字節(jié)串或括在 單引號中的ASCII字符串。4.2.3 偽指令第49頁,共54頁。 ORG 2000H DB 0A3HLIST:DB 26H,03HSTR: DB ABC 經(jīng)匯編后:(2000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H, (41H,42H,43H分別為A,B,C的

溫馨提示

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

評論

0/150

提交評論