第4章匯編語言程序設(shè)計PPT課件_第1頁
第4章匯編語言程序設(shè)計PPT課件_第2頁
第4章匯編語言程序設(shè)計PPT課件_第3頁
第4章匯編語言程序設(shè)計PPT課件_第4頁
第4章匯編語言程序設(shè)計PPT課件_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、用的圖形和符號。第3頁/共50頁橢圓框或桶形框:表示程序的開始或結(jié)束。:表示程序的開始或結(jié)束。矩形框:表示要進行的工作。:表示要進行的工作。菱形框:表示要判斷的事情,菱形框內(nèi)的:表示要判斷的事情,菱形框內(nèi)的 表達式表示要判斷的內(nèi)容。表達式表示要判斷的內(nèi)容。圓圈:表示連接點:表示連接點指向線:表示程序的流向:表示程序的流向第4頁/共50頁開始開始將學(xué)生成績存入將學(xué)生成績存入累加器累加器A中中比較比較(A)與與#60的大小的大小(A)=#60?增加增加R1的值的值打印學(xué)生成績打印學(xué)生成績(A)#60?增加增加R2的值的值結(jié)束結(jié)束YESYESNONO第5頁/共50頁4、編寫程序n用89C51匯編語言

3、編寫的源程序行(一條語句)包括四個部分,也叫四個字段: 標(biāo)號:操作碼操作數(shù);注釋n每個字段之間要用分隔符分隔,而每個字段內(nèi)部不能使用分隔符。可以用作分隔符的符號:空格“ ”、冒號“:”、逗號“,”、分號“;”等。 例:LOOP:MOV A,#00H ;立即數(shù)00HA第6頁/共50頁4、編寫程序標(biāo)號:操作碼操作數(shù);注釋n出現(xiàn)在助記符之前的,是由用戶定義的一個字符串。n一條指令的標(biāo)號是該條指令的符號名字,標(biāo)號的值是匯編這條指令時指令的地址,代表16位長的ROM地址編碼。n標(biāo)號可以由賦值偽指令賦值,如果沒有賦值,匯編程序把存放該指令目標(biāo)碼第一字節(jié)的存儲單元的地址賦給該標(biāo)號,所以,標(biāo)號又叫指令標(biāo)號。n

4、并不是每一條語句都需要標(biāo)號,只有那些欲被引用的語句才需要。(1 1)標(biāo)號)標(biāo)號第7頁/共50頁4、編寫程序標(biāo)號:操作碼操作數(shù);注釋n對于標(biāo)號的限定: 最多可由最多可由31個字符構(gòu)成,字符可以是個字符構(gòu)成,字符可以是英文字母英文字母(一般不區(qū)一般不區(qū) 分大小寫分大小寫)、阿拉伯?dāng)?shù)字阿拉伯?dāng)?shù)字和其他字符和其他字符(“?”和和“_”);); 第一字符必須是第一字符必須是非數(shù)字非數(shù)字; 后面跟冒號后面跟冒號“:”; 一個標(biāo)號在程序中只能定義一次;一個標(biāo)號在程序中只能定義一次; 標(biāo)號不能為指令助記符、偽指令、標(biāo)號不能為指令助記符、偽指令、SFR名稱等系統(tǒng)保留字。名稱等系統(tǒng)保留字。(1 1)標(biāo)號)標(biāo)號第8

5、頁/共50頁4、編寫程序標(biāo)號:操作碼操作數(shù);注釋(2 2)操作碼)操作碼n操作碼是必不可少的。n它用一組字母符號表示指令的操作碼。在89C51中,由指令助記符組成。n一般留出標(biāo)號字段的空位,以便與標(biāo)號相區(qū)別。第9頁/共50頁4、編寫程序標(biāo)號:操作碼操作數(shù);注釋(3 3)操作數(shù))操作數(shù)n匯編語言指令可能要求或不要求操作數(shù),所以這一字段可能有也可能沒有。n若有兩個操作數(shù),操作數(shù)之間用逗號“,”分開。n操作數(shù)字段的內(nèi)容復(fù)雜多樣,可能包括:第10頁/共50頁 由RS0和RS1規(guī)定的當(dāng)前工作寄存器區(qū)中的R0R7。 21個特殊功能寄存器SFR的名字。 賦值標(biāo)號 由匯編指令EQU等賦值的標(biāo)號; 指令標(biāo)號 指

6、令標(biāo)號指示的指令的第一字節(jié)地址是該標(biāo)號的值。 用來表示程序計數(shù)器的當(dāng)前值。(3 3)操作數(shù))操作數(shù) 符號符號第11頁/共50頁 可為二進制(B)、八進制(O)、十進制(D)、十六進制(H) 或字符串。(3 3)操作數(shù))操作數(shù) 數(shù)值數(shù)值 匯編時,計算出表達式的值填入目標(biāo)碼。 一般缺省情況下,匯編器默認(rèn)的數(shù)值是十進制數(shù)值;一般缺省情況下,匯編器默認(rèn)的數(shù)值是十進制數(shù)值; 若常數(shù)以字符若常數(shù)以字符AF開頭,必須在其前面加開頭,必須在其前面加“0”作為引導(dǎo),以便作為引導(dǎo),以便 與標(biāo)號或符號名相區(qū)別。與標(biāo)號或符號名相區(qū)別。 表達式表達式第12頁/共50頁4、編寫程序標(biāo)號:操作碼操作數(shù);注釋(4 4)注釋)

7、注釋n注釋部分不是匯編語言的功能部分,只是用語增加程序的可讀性。n良好的注釋是匯編語言程序編寫中的重要組成部分。n由“;”或“/*/”表示。5、上機調(diào)試第13頁/共50頁 偽指令不是真正的指令,它主要是為匯編程序服務(wù)的,在匯編過程中起控制作用的指示性語句。無地址、無對應(yīng)的機器碼,在匯編時不產(chǎn)生目標(biāo)程序。 ORG 匯編起始地址命令匯編起始地址命令 END 匯編語言程序結(jié)束偽指令匯編語言程序結(jié)束偽指令 EQU 賦值偽指令賦值偽指令 DB 定義字節(jié)偽指令定義字節(jié)偽指令 DW 定義字偽指令定義字偽指令 BIT 位地址符號偽指令位地址符號偽指令 DATA 定義標(biāo)號數(shù)值偽指令定義標(biāo)號數(shù)值偽指令第14頁/共

8、50頁1、ORG 匯編起始地址命令匯編起始地址命令 ORG 16位地址規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目 標(biāo)程序存放的起始地址。ORG 2000H START:MOV A,#64H n規(guī)定了START的地址是2000H,又規(guī)定了匯編后的第一條指令碼從2000H開始存放。注意:在一個源程序中,可以多次使用注意:在一個源程序中,可以多次使用ORG指令,來規(guī)定不同的程指令,來規(guī)定不同的程序段的起始地址。但是,地址必須由小到大排列,不能交叉、重疊。序段的起始地址。但是,地址必須由小到大排列,不能交叉、重疊。第15頁/共50頁2、END 匯編結(jié)束命令匯編結(jié)束命令 END通知匯編程序結(jié)束匯編。

9、在END之后所有的匯編指令均 不予以處理。第16頁/共50頁3、EQU 賦值命令賦值命令 字符名稱 EQU 項(數(shù)或匯編符號)把“項”賦給“字符名稱”。字符名稱不等于標(biāo)號(其后沒有冒號);其中的項,可以是數(shù),也可以是匯編符號。EQU賦值過的符號名可以用作數(shù)據(jù)、代碼地址、位地址或一個立即數(shù)。可以是8位的,也可以是16位的。為程序的閱讀、修改為程序的閱讀、修改和調(diào)試帶來方便和調(diào)試帶來方便第17頁/共50頁3、EQU 賦值命令賦值命令 例2: A10 EQU 10 DELY EQU 07EBH MOV A,A10 ;A10作為片內(nèi)的一個直接地址作為片內(nèi)的一個直接地址 LCALL DELY ;DELY

10、作為一個作為一個16位子程序的入口地址位子程序的入口地址第18頁/共50頁4、DATA 數(shù)據(jù)地址賦值命令數(shù)據(jù)地址賦值命令 字符名稱 DATA 表達式與EQU類似,但有以下差別: EQU定義的字符名必須先定義后使用,而DATA定義的字 符名可以后定義先使用。 用EQU指令可以把一個匯編符號賦給一個名字,而DATA 只能把數(shù)據(jù)賦給字符名。 DATA語句可以把一個表達式的值賦給字符名稱,其中的表 達式應(yīng)是可求值的。 DATA偽指令在程序中用來定義數(shù)據(jù)地址。第19頁/共50頁5、DB 定義字節(jié)命令定義字節(jié)命令 DB 項或項表通知匯編程序從當(dāng)前ROM地址開始,保留一個字或字節(jié) 串的存儲單元,并存入DB后

11、的數(shù)據(jù)。項或項表可以是一個字節(jié),用逗號隔開的字節(jié)串或括在 單引號中的ASCII字符串。第20頁/共50頁 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的的ASCII碼)碼)5、DB 定義字節(jié)命定義字節(jié)命令令 2000H2000H2001H2001H2002H2002H2003H2003H2004H2004H2005H2005HA3H26H03

12、H41H42H43H第21頁/共50頁6、DW 定義字命令定義字命令 DW 16位數(shù)據(jù)項或項表把DW后的16位數(shù)據(jù)項或項表從當(dāng)前地址連續(xù)存放。 每項數(shù)值為16位二進制數(shù),高8位先放,低8位后存 放。DW用于定義一個地址表。 ORG 1500HTABLE:DW 7234H,8AH,10H,H (1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH,(1504H)=00H, (1505H)=10H。(1506H)=00H,(1507H)=48H (H的ASCII值)經(jīng)匯編后:雙字節(jié)雙字節(jié)第22頁/共50頁7、DS 定義存儲空間命定義存儲空間命令令 OR

13、G 1000HDS 08HDB 30H,8AHDS 表達式在匯編時,從指定地址開始保留DS之后表達式的值所 規(guī)定的存儲單元以備后用。匯編后,從1000H保留8個單元,然后從1008H按DB命令給內(nèi)存賦值,即(1008H)=30H, (1009H)=8AH第23頁/共50頁8、BIT 定義存儲空間命令定義存儲空間命令 A1 BIT P1.0A2 BIT 02H匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。字符名 BIT 位地址把BIT后的位地址值賦給字符名。其中字符名不是標(biāo)號, 其后沒有冒號,但字符名是必須的。第24頁/共50頁 源程序:(XCH.ASM) ORG 000

14、0H LJMPMAINORG 0030H MAIN: MOV30H, #12H MOV31H, #34H MOVA, 30H MOV30H, 31H MOV31H, A SJMP$ END第25頁/共50頁1 1、模塊化的程序設(shè)計方法2 2、編程技巧第26頁/共50頁1 1、模塊化的程序設(shè)計方法、模塊化的程序設(shè)計方法n單個模塊結(jié)構(gòu)的程序功能單一,易于編寫、調(diào)試和修改。n便于分工,從而可使多個程序員同時進行程序的編寫和調(diào)試工作,加快軟件研制進度。n程序可讀性好,便于功能擴充和版本升級。n對程序的修改可局部進行,其它部分可以保持不變。n對于使用頻繁的子程序可建立子程序庫,便于多個模塊調(diào)用。(1 1

15、)程序功能模塊化的優(yōu)點)程序功能模塊化的優(yōu)點第27頁/共50頁1 1、模塊化的程序設(shè)計方法、模塊化的程序設(shè)計方法n每個模塊應(yīng)具有獨立的功能,能產(chǎn)生一個明確的結(jié)果,即單模塊的功能高內(nèi)聚性。n模塊之間的控制耦合應(yīng)盡量簡單,數(shù)據(jù)耦合應(yīng)盡量少,即模塊間的低耦合性??刂岂詈鲜侵改K進入和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息交換方式、交換量的多少及交換頻繁程度。n模塊長度適中。20條100條的范圍較合適。(2 2)劃分模塊的原則)劃分模塊的原則第28頁/共50頁2 2、編程技巧、編程技巧n盡量采用循環(huán)結(jié)構(gòu)和子程序。n盡量少用無條件轉(zhuǎn)移指令。n對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參

16、數(shù)的寄存器外,子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧(返回前再彈出),即保護現(xiàn)場。n在中斷處理程序中,除了要保護處理程序中用到的寄存器外,還要保護標(biāo)志寄存器。n用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程序中,一般不必把累加器內(nèi)容壓入堆棧。第29頁/共50頁1 1、順序程序2 2、分支程序3 3、循環(huán)程序第30頁/共50頁1 1、順序程序、順序程序n順序程序是最簡單的程序結(jié)構(gòu),也稱直線程序。n程序按順序一條一條地執(zhí)行指令。這類程序是所有復(fù)雜程序的基礎(chǔ)。n要寫出高質(zhì)量的程序還是需要掌握一定的技巧,需要熟悉指令系統(tǒng),正確地選擇指令,最大限度地優(yōu)化程序。第31頁/共50頁2 2、分支程序、分支程

17、序n程序分支是通過條件轉(zhuǎn)移指令實現(xiàn)的,即根據(jù)條件對程序的執(zhí)行進行判斷、滿足條件則進行程序轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序。n分支程序又分為單分支和多分支結(jié)構(gòu)。n多分支程序是首先把分支程序按序號排列,然后按序號值進行轉(zhuǎn)移。第32頁/共50頁 在MCS-51指令系統(tǒng)中,通過條件判斷實現(xiàn)單分支程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態(tài)作為條件進行程序分支的指令,如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=n第33頁/共

18、50頁JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTRJMPTAB:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F 128種分支轉(zhuǎn)移程序。根據(jù)入口條件轉(zhuǎn)移到128個目的地址。(R3)=轉(zhuǎn)移目的地址的序號00H7FH。轉(zhuǎn)移到相應(yīng)子程序入口。128個子程序首址個子程序首址;A循環(huán)左移一位,相當(dāng)于循環(huán)左移一位,相當(dāng)于2第34頁/共50頁 此程序要求128個轉(zhuǎn)移目的地址(ROUT00 ROUT7FH)必須駐留在與絕對轉(zhuǎn)移指令A(yù)JMP相同的一個2KB存儲區(qū)內(nèi)。 RL指令對變址部分乘以2,因為每條AJMP指令占兩個字節(jié)。第35頁/共

19、50頁3 3、循環(huán)程序、循環(huán)程序n在程序運行時,有時需要連續(xù)重復(fù)執(zhí)行某段程序,可以使用循環(huán)程序。其結(jié)構(gòu)包括四部分: 置循環(huán)初值 循環(huán)體(循環(huán)工作部分) 修改控制變量 循環(huán)控制部分n其組織方式如圖4-2所示。第36頁/共50頁置初值循環(huán)體循環(huán)修改循環(huán)控制?退出循環(huán)NY(a)組織方式)組織方式1置初值循環(huán)體循環(huán)修改循環(huán)控制?退出循環(huán)NY(b)組織方式)組織方式2圖圖4-2 4-2 循環(huán)組織方式流程圖循環(huán)組織方式流程圖第37頁/共50頁(1 1)置循環(huán)初值)置循環(huán)初值3 3、循環(huán)程序、循環(huán)程序 對于循環(huán)程序中所使用的工作單元,在循環(huán)開始時應(yīng)置初值。n 例如,工作寄存器設(shè)置計數(shù)初值,累加器 A清0,以

20、及設(shè)置地址指針、長度等。第38頁/共50頁(2 2)循環(huán)體(循環(huán)工作部分)循環(huán)體(循環(huán)工作部分)3 3、循環(huán)程序、循環(huán)程序n重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和循環(huán)控制部分。n 循環(huán)控制部分每循環(huán)一次,檢查結(jié)束條件, 當(dāng)滿足條件時,就停止循環(huán),往下繼續(xù)執(zhí)行 其他程序。第39頁/共50頁(3 3)修改控制變量)修改控制變量3 3、循環(huán)程序、循環(huán)程序 在循環(huán)程序中,必須給出循環(huán)結(jié)束條件。 常見的是計數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就停止循環(huán)。 在單片機中,一般用一個工作寄存器Rn作為計數(shù)器,對該計數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一次,計數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計數(shù)器的置件為0時,就停止

21、循環(huán)。第40頁/共50頁(4 4)循環(huán)控制部分)循環(huán)控制部分3 3、循環(huán)程序、循環(huán)程序n根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。n 89C51可采用DJNZ指令來自動修改控制變 量并能結(jié)束循環(huán)。第41頁/共50頁n若循環(huán)程序的循環(huán)體中不再包含循環(huán)程序,即為單重循環(huán)程序。如果在循環(huán)體中還包含循環(huán)程序,那么這種現(xiàn)象稱為循環(huán)嵌套。n 注意:多重循環(huán)程序中,只允許外重循環(huán)嵌套內(nèi)重循環(huán)程序,不允許循環(huán)互相相交,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部。 3 3、循環(huán)程序、循環(huán)程序第42頁/共50頁 從22H單元開始有一無符號數(shù)據(jù)塊,其長度為20H單元, 求出數(shù)據(jù)塊中最大值,并存入21H單元。 ORG 2000H CLR C MOV R2,20H MOV R1,#22H CLR A LP: CLR C SUBB A,R1 ;比較;比較A與與(R1) JNC NEXT MOV A,R1 ;大數(shù)放;大數(shù)放A SJMP NEXT1 NEXT: ADD A,R1 ;恢復(fù);恢復(fù)A中數(shù)中數(shù)第43頁/共50頁思考:思考:如何在該例的基礎(chǔ)上改為求最小值? NEXT1: INC R1 DJNZ R2,LP MOV 21H,A LP1: SJMP LP1 END 第44頁/共50頁比較大小 比較片內(nèi)數(shù)據(jù)存儲器30H和31H單元的兩個無符號數(shù)的大小,將較大者存入32H單元。n源程序:(MAX_

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論