《單片機原理及應用ppt課件匯編語言程序設計基礎.pptx》由會員分享,可在線閱讀,更多相關《單片機原理及應用ppt課件匯編語言程序設計基礎.pptx(31頁珍藏版)》請在匯文網(wǎng)上搜索。
1、第4章 MCS-51匯編語言程序設計基礎q程序設計的步驟和偽指令。q源程序、目標代碼、編輯和匯編的基本概念。q順序程序、分支程序、循環(huán)程序、子程序的設計。q算術運算和數(shù)碼轉(zhuǎn)制程序設計。本章主要內(nèi)容本章主要內(nèi)容 4.1 匯編語言程序設計基礎匯編語言程序設計基礎 4.2 順序程序設計順序程序設計 4.3 分支程序設計分支程序設計 4.4 循環(huán)程序設計循環(huán)程序設計 4.5 子程序設計子程序設計 4.6 算術運算和數(shù)碼轉(zhuǎn)制程序設計算術運算和數(shù)碼轉(zhuǎn)制程序設計4.1 匯編語言程序設計基礎匯編語言程序設計基礎 1.機器語言機器語言4.1.1 程序設計語言簡介程序設計語言簡介2.匯編語言匯編語言n用二進制編碼
2、表示每條指令用二進制編碼表示每條指令。計算機能夠直接執(zhí)。計算機能夠直接執(zhí)行用機器語言編出的機器碼程序。不同種類的計行用機器語言編出的機器碼程序。不同種類的計算機,由于其內(nèi)部結(jié)構(gòu)不完全相同,它的機器碼算機,由于其內(nèi)部結(jié)構(gòu)不完全相同,它的機器碼指令也不一定相同。指令也不一定相同。n符號化的機器語言符號化的機器語言。它用一些容易理解和記憶的。它用一些容易理解和記憶的符號符號代替機器碼指令,又稱為代替機器碼指令,又稱為助記符語言助記符語言,助記,助記符指令與機器碼指令一一對應。不同結(jié)構(gòu)的計算符指令與機器碼指令一一對應。不同結(jié)構(gòu)的計算機,匯編指令不相同。機,匯編指令不相同。4.1.1 程序設計語言簡介程
3、序設計語言簡介n匯編語言和特點:匯編語言和特點:對比機器碼,匯編語言克服了對比機器碼,匯編語言克服了機器語言的缺點,方便了用戶機器語言的缺點,方便了用戶記憶指令記憶指令和和編寫程編寫程序序,但用匯編語言編寫的源程序需用匯編程序,但用匯編語言編寫的源程序需用匯編程序“翻譯翻譯”成機器碼后方可執(zhí)行。采用匯編語言編寫成機器碼后方可執(zhí)行。采用匯編語言編寫程序,可以直接訪問和操作單片機中的寄存器及程序,可以直接訪問和操作單片機中的寄存器及存儲器單元,對數(shù)據(jù)的處理表述的非常具體。因存儲器單元,對數(shù)據(jù)的處理表述的非常具體。因此,在計算機實時測試和控制領域中得到了廣泛此,在計算機實時測試和控制領域中得到了廣泛
4、應用。應用。n接近自然語言和數(shù)學語言的算法語言,具有直觀、接近自然語言和數(shù)學語言的算法語言,具有直觀、通用等特點。不象機器語言和匯編語言編寫程序通用等特點。不象機器語言和匯編語言編寫程序需要完全了解需要完全了解CPU硬件結(jié)構(gòu),且程序不能移植。硬件結(jié)構(gòu),且程序不能移植。3.高級語言高級語言4.1.2 匯編語言程序設計步驟匯編語言程序設計步驟1分析問題,確定算法分析問題,確定算法程序設計中最重要的一步。設計人員必須認真、仔細地考慮系統(tǒng)需要解決的各種問題解決的各種問題以及將來系將來系統(tǒng)功能的進一步擴展統(tǒng)功能的進一步擴展,明確知道程序要解決的問題和接收、處理、發(fā)送的數(shù)據(jù)范圍以及使用什么樣的算法。2畫流
5、程圖畫流程圖流程圖是用各種圖形、符號、有向線段來直觀地表示程序執(zhí)行的步驟和順序。它可使人們通過流程圖的基本線索,對全局有完整的了解。4.1.2 匯編語言程序設計步驟匯編語言程序設計步驟4調(diào)試、測試程序調(diào)試、測試程序調(diào)試是利用仿真器等開發(fā)工具,采用單步、設斷單步、設斷點、連續(xù)運行點、連續(xù)運行等方法排除程序中的錯誤排除程序中的錯誤,完善程序的功能。3編寫匯編語言源程序編寫匯編語言源程序根據(jù)流程圖用匯編語言指令實現(xiàn)流程圖的每一個步驟,從而編寫出匯編語言的源程序。4.1.3 偽指令偽指令 1.匯編起始偽指令匯編起始偽指令ORGn格式:格式:ORG 16位地址位地址n功能:規(guī)定該指令后面的源程序匯編后所
6、產(chǎn)生的功能:規(guī)定該指令后面的源程序匯編后所產(chǎn)生的目標程序存放的起始地址。目標程序存放的起始地址。例例4.1 ORG 2000HMAIN:MOV A,#50H2.匯編結(jié)束偽指令匯編結(jié)束偽指令ENDn格式:格式:ENDn 功能:通知匯編程序功能:通知匯編程序結(jié)束匯編結(jié)束匯編。匯編時遇到。匯編時遇到END指令,則結(jié)束所有匯編工作,而指令,則結(jié)束所有匯編工作,而END之后的之后的所有指令將不予處理。所有指令將不予處理。4.1.3 偽指令偽指令 3.賦值偽指令賦值偽指令EQUn格式:格式:字符名稱字符名稱 EQU 賦值項賦值項 n功能:功能:把該偽指令右邊的值賦項給左邊用戶定義把該偽指令右邊的值賦項給左
7、邊用戶定義的符號。的符號。例例4-3 COUNT EQU 64H MOV A,COUNT ;A(64H)n注意注意:使用:使用EQU偽指令時,必須先賦值,后使用,偽指令時,必須先賦值,后使用,故故該指令通常放在程序開頭該指令通常放在程序開頭。而賦值后的。而賦值后的“字符字符”,其值在整個程序中不改變,并可多次使用。,其值在整個程序中不改變,并可多次使用。4.1.3 偽指令偽指令 4.定義數(shù)據(jù)字節(jié)偽指令定義數(shù)據(jù)字節(jié)偽指令DB n格式:格式:標號:標號:DB 字節(jié)數(shù)據(jù)表字節(jié)數(shù)據(jù)表 n功能:從指定的地址單元開始,定義若干個字節(jié)功能:從指定的地址單元開始,定義若干個字節(jié)的數(shù)據(jù)或的數(shù)據(jù)或ASCII碼字符
8、碼字符。例例4-4 ORG 2000HTAB:DB 99H,00H,01H,02H,03H,04HSTR:DB ABC n以上偽指令經(jīng)匯編后在程序儲存器中的以上偽指令經(jīng)匯編后在程序儲存器中的2000H2008H單元的內(nèi)容為:單元的內(nèi)容為:99H、00H、01H、02H、03H、04H、41H、42H、43H。4.1.3 偽指令偽指令 5.定義數(shù)據(jù)字節(jié)偽指令定義數(shù)據(jù)字節(jié)偽指令DW n格式:格式:標號:標號:DW 16 位數(shù)據(jù)表位數(shù)據(jù)表 n功能:從指定的地址單元開始,定義若干個字數(shù)功能:從指定的地址單元開始,定義若干個字數(shù)據(jù)(據(jù)(16位)。位)。例例4-5 ORG 2000H TAB:DW 123
9、4H,50H,CDn以上偽指令經(jīng)匯編后,程序存儲器中的以上偽指令經(jīng)匯編后,程序存儲器中的2000H2005H單元的內(nèi)容為:單元的內(nèi)容為:12H、34H、00H、50H、43H、44H。4.1.3 偽指令偽指令 6.數(shù)據(jù)地址賦值偽指令數(shù)據(jù)地址賦值偽指令DATAn格式:格式:標號標號 DATA 表達式表達式n功能:把由表達式指定的數(shù)據(jù)地址或代碼地址功能:把由表達式指定的數(shù)據(jù)地址或代碼地址賦予規(guī)定的標號。賦予規(guī)定的標號。nDATA偽指令的功能和偽指令的功能和EQU偽指令相似,但偽指令相似,但DATA偽指令所定義的符號可偽指令所定義的符號可先使用后定義先使用后定義。在。在程序中它常用來定義數(shù)據(jù)地址。該
10、語句一般放在程序中它常用來定義數(shù)據(jù)地址。該語句一般放在程序的開頭和末尾。程序的開頭和末尾。4.1.3 偽指令偽指令 7.定義存儲區(qū)偽指令定義存儲區(qū)偽指令DS n格式:格式:標號:標號:DS 表達式表達式n功能:從指定的地址單元開始,保留由表達式功能:從指定的地址單元開始,保留由表達式指定的若干字節(jié)空間,以備程序使用。指定的若干字節(jié)空間,以備程序使用。例例4-6 ORG 2000H DS 05 DB 11H,22H,33Hn以上偽指令經(jīng)匯編后從以上偽指令經(jīng)匯編后從2000H單元開始,單元開始,保留保留5個字節(jié)的存儲單元個字節(jié)的存儲單元,從,從2005H單元開始連續(xù)存放單元開始連續(xù)存放11H,22
11、H,33H代碼。代碼。4.1.3 偽指令偽指令 8.位地址賦值偽指令位地址賦值偽指令BITn格式:格式:字符名稱字符名稱 BIT 位地址位地址n功能:把位地址賦予規(guī)定的字符名稱,常用于功能:把位地址賦予規(guī)定的字符名稱,常用于定義位符號地址定義位符號地址。例例4-7 AA BIT P1.7 BB BIT P1.6n匯編后匯編后P1.7和和P1.6(位地址)賦給變量(位地址)賦給變量AA和和BB,在程序中就可以把在程序中就可以把AA和和BB作為位地址使用。作為位地址使用。n上面介紹了上面介紹了MCS-51單片機匯編語言中常用的偽指單片機匯編語言中常用的偽指令。在編寫匯編語言源程序時,必須嚴格按照匯
12、編令。在編寫匯編語言源程序時,必須嚴格按照匯編語言的規(guī)范書寫。語言的規(guī)范書寫。4.2 順序程序設計順序程序設計u順序程序(又稱簡單程序)是一種最簡單、最順序程序(又稱簡單程序)是一種最簡單、最基本的程序。基本的程序。u程序按編寫的順序從第一條指令開始執(zhí)行,直程序按編寫的順序從第一條指令開始執(zhí)行,直到最后一條指令為止。計算機是按到最后一條指令為止。計算機是按指令在存儲器指令在存儲器中存放的先后次序來順序執(zhí)行程序中存放的先后次序來順序執(zhí)行程序的。它會在的。它會在PC控制下順序執(zhí)行。這種程序雖然簡單,但它是構(gòu)控制下順序執(zhí)行。這種程序雖然簡單,但它是構(gòu)成復雜程序的基礎。成復雜程序的基礎。例例4-9 將
13、將兩個兩個半字節(jié)半字節(jié)數(shù)合并成數(shù)合并成一個一個一字節(jié)一字節(jié)數(shù)。數(shù)。n設內(nèi)部設內(nèi)部RAM的的40H、41H單元中分別存放著單元中分別存放著8位位二進制數(shù)。要求取出兩個單元中的低半字節(jié)、合二進制數(shù)。要求取出兩個單元中的低半字節(jié)、合并成一個字節(jié)后,存并成一個字節(jié)后,存42H單元。單元。ORG 0000HSTART:MOV R1,#40H MOV A,R1 ANL A,#0FH SWAP A INC R1 XCH A,R1 ANL A,#0FH ORL A,R1 INC R1 MOV R1,A RET END4.2 順序程序設計順序程序設計例例4-10 拆字程序拆字程序:將:將40H單元中的內(nèi)容拆開后
14、分別送單元中的內(nèi)容拆開后分別送41H、42H單元中。單元中。ORG 0000HSTART:MOV R1,#40H MOV A,R1 MOV B,A ;暫存;暫存B中中 ANL A,#0FH ;取第一個半字節(jié);取第一個半字節(jié) INC R1 MOV R1,A ;存放第一個半字節(jié);存放第一個半字節(jié) MOV A,B SWAP A ANL A,#0FH ;取第二個半字節(jié);取第二個半字節(jié) INC R1 MOV R1,A ;存放第二個半字節(jié);存放第二個半字節(jié) END4.2 順序程序設計順序程序設計4.3 分支程序設計分支程序設計分支程序條件分支無條件分支LJMP、AJMP單分支多分支JZJZ、JNZJNZC
15、JNZCJNZ、DJNZDJNZ等等JNCJNC、JBJB、JNBJNB、JBCJBC等等4.3 分支程序設計分支程序設計例例4-11 兩個無符號數(shù)比較大小兩個無符號數(shù)比較大小設兩個連續(xù)外部設兩個連續(xù)外部RAM單元單元ST1和和ST2中存放無符號的二進制數(shù),找中存放無符號的二進制數(shù),找出其中的大數(shù)存入出其中的大數(shù)存入ST3單元中。單元中。n用減法指令用減法指令SUBB來比較兩數(shù)的大來比較兩數(shù)的大小。執(zhí)行該指令前,先把進位位清小。執(zhí)行該指令前,先把進位位清零。通過借位(零。通過借位(CY)的狀態(tài)判斷兩)的狀態(tài)判斷兩數(shù)的大小。設兩個數(shù)數(shù)的大小。設兩個數(shù)X和和Y,當,當XY時,(時,(CY)0;XY
16、,(,(CYCY)1 1。用減法指令比較大小,會破。用減法指令比較大小,會破壞累加器中的內(nèi)容,故作減法前先壞累加器中的內(nèi)容,故作減法前先保存累加器中的內(nèi)容。保存累加器中的內(nèi)容。n執(zhí)行執(zhí)行JNC指令后,形成了分支。執(zhí)指令后,形成了分支。執(zhí)行行SJMP指令后,實現(xiàn)程序的轉(zhuǎn)移。指令后,實現(xiàn)程序的轉(zhuǎn)移。ORG 8000H ST1 EQU 8040H START1:CLR C MOV DPTR,#ST1 MOV XA,DPTR MOV R2,A INC DPTR MOV XA,DTPR SUBB A,R2 JNC BIG1 XCH A,R2BIG0:INC DPTR MOVX DPTR,A4.3 分支程
17、序設計分支程序設計 SJMP$BIG1:MOV XA,DPTR SJMP BIG0 END例4-12 將ASCII碼表的ASCII碼轉(zhuǎn)換為十六進制數(shù)碼轉(zhuǎn)換為十六進制數(shù),如果ASCII碼不能轉(zhuǎn)換不能轉(zhuǎn)換成十六進制數(shù),用戶標志位置戶標志位置1。由ASCII碼表可知,30H39H為09的ASCII碼,41H46H為AF的ASCII碼。在這一范圍內(nèi)的ASCII碼減30H或37H就可以獲得對應的十六進制數(shù)。設ASCII碼放在累加器A中,轉(zhuǎn)換結(jié)果放回A中。流程圖如右圖所示。4.3 分支程序設計分支程序設計4.3 分支程序設計分支程序設計 ORG 0000HSTART:CLR C SUBB A,#30H J
18、C NASC CJNE A,#0AH,MMMM:JC ASC SUBB A,#07H CJNE A,#0AH,NNNN:JC NASC CJNE A,#10H,LLLL:JC ASCNASC:SETB F0ASC:RET END4.4 循環(huán)程序設計循環(huán)程序設計u在在程程序序設設計計中中,只只有有簡簡單單程程序序和和分分支支程程序序是是不不夠夠的的。因因為為簡簡單單程程序序,每每條條指指令令只只執(zhí)執(zhí)行行一一次次,而而分分支支程程序序則則根根據(jù)據(jù)條條件件的的不不同同,會會跳跳過過一一些些指指令令,執(zhí)執(zhí)行行另另一一些些指指令令。它它們們的的特特點點是是,每每一一條條指指令令至至多多執(zhí)執(zhí)行行一一次次。
19、在在處處理理實實際際事事務務時時,有有時時會會遇遇到到多多次次重重復復處處理理的的問問題題,用用循循環(huán)環(huán)程程序序的的方方法法來來解解決決就就比比較較合合適適。循循環(huán)環(huán)程程序序中中的的某某些些指指令令可可以以反反復復執(zhí)執(zhí)行行多多次次。采采用用循循環(huán)環(huán)程程序序,使使程程序序縮縮短短,節(jié)節(jié)省省存存儲儲單單元元。重重復復次次數(shù)數(shù)越越多多,循循環(huán)環(huán)程程序序的的優(yōu)優(yōu)越越性性就就越越明明顯顯。但但是是并并不不節(jié)節(jié)省省程程序序的的執(zhí)執(zhí)行行時時間間。由由于于要要有有循循環(huán)環(huán)準準備備、結(jié)結(jié)束束判判斷斷等等指指令令,循循環(huán)環(huán)程程序序執(zhí)執(zhí)行行速速度度要要比比簡簡單程序稍慢些。單程序稍慢些。4.4.1 循環(huán)程序結(jié)構(gòu)循環(huán)
20、程序結(jié)構(gòu)1.循環(huán)程序的組成循環(huán)程序的組成 n初始化部分初始化部分:為循環(huán)程序做準備。如設置循環(huán)次數(shù)計數(shù):為循環(huán)程序做準備。如設置循環(huán)次數(shù)計數(shù)器的初值,地址指針置初值,為循環(huán)變量賦初值等。器的初值,地址指針置初值,為循環(huán)變量賦初值等。n處理部分處理部分:為反復執(zhí)行的程序段,是循環(huán)程序的實體。:為反復執(zhí)行的程序段,是循環(huán)程序的實體。n修改部分修改部分:每執(zhí)行一次循環(huán)體后,對指針做一次修改,:每執(zhí)行一次循環(huán)體后,對指針做一次修改,使指針指向下一數(shù)據(jù)所在位置,為進入下一輪處理做準使指針指向下一數(shù)據(jù)所在位置,為進入下一輪處理做準備。備。n控制部分控制部分:根據(jù)循環(huán)次數(shù)計數(shù)器的狀態(tài)或循環(huán)條件,檢:根據(jù)循環(huán)
21、次數(shù)計數(shù)器的狀態(tài)或循環(huán)條件,檢查循環(huán)能否繼續(xù)執(zhí)行,若循環(huán)次數(shù)已達到或循環(huán)條件不查循環(huán)能否繼續(xù)執(zhí)行,若循環(huán)次數(shù)已達到或循環(huán)條件不滿足,應控制退出循環(huán),否則繼續(xù)循環(huán)。滿足,應控制退出循環(huán),否則繼續(xù)循環(huán)。通常通常處理、修改、控制部分處理、修改、控制部分又稱為循環(huán)體。又稱為循環(huán)體。n結(jié)束部分結(jié)束部分:分析及存放執(zhí)行結(jié)果。:分析及存放執(zhí)行結(jié)果。4.4.1 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu)2.循環(huán)程序的結(jié)構(gòu)循環(huán)程序的結(jié)構(gòu) 先進入先進入處理部處理部分,再分,再控制循控制循環(huán)。即環(huán)。即至少執(zhí)至少執(zhí)行一次行一次循環(huán)體。循環(huán)體。先控制循環(huán),先控制循環(huán),后進入處理后進入處理部分。即先部分。即先根據(jù)判斷結(jié)根據(jù)判斷結(jié)果,控制循
22、果,控制循環(huán)的執(zhí)行與環(huán)的執(zhí)行與否,有時可否,有時可以不進入循以不進入循環(huán)體就退出環(huán)體就退出循環(huán)程序。循環(huán)程序。4.4.2 循環(huán)程序設計循環(huán)程序設計1.單循環(huán)程序單循環(huán)程序 n循環(huán)次數(shù)已知的循環(huán)程循環(huán)次數(shù)已知的循環(huán)程序序例例4-14 工作單元清零。工作單元清零。將將40H為起點的為起點的8個單元個單元清清0。注:注:此程序的前24句為設定循環(huán)初值,57句為循環(huán)體。ORG 0000HCLEAR:CLR A MOV R0,#40H MOV R7,#08 LOOP:MOV R0,A INC R0 DJNZ R7,LOOP END4.4.2 循環(huán)程序設計循環(huán)程序設計1.單循環(huán)程序單循環(huán)程序 n循環(huán)次數(shù)已
23、知的循環(huán)循環(huán)次數(shù)已知的循環(huán)程序程序例例4-14 工作單元清零。工作單元清零。將外部將外部2000H開始的開始的50個個RAM單元清零。單元清零。注:注:本例中循環(huán)次數(shù)已知,用用R2作循環(huán)次作循環(huán)次數(shù)計數(shù)器數(shù)計數(shù)器,用DJNZ指指令修改計數(shù)器值令修改計數(shù)器值,并控制循環(huán)的結(jié)束與否。ORG 0000H MOV DPTR,#2000H CLEAR:CLR A MOV R2,#32H LOOP:MOVX DPTR,A INC DPTR DJNZ R2,LOOP END4.4.2 循環(huán)程序設計循環(huán)程序設計n循環(huán)次數(shù)未知的循環(huán)循環(huán)次數(shù)未知的循環(huán)程序程序例例4-17 測試字符串長度測試字符串長度設有一串字符
24、依次存設有一串字符依次存放在從放在從50H單元開始的單元開始的連續(xù)單元中,該字符串連續(xù)單元中,該字符串以以回車符回車符為結(jié)束標志,為結(jié)束標志,測得的字符串長度存入測得的字符串長度存入R2中。中。ORG 0000HCONT:MOV R2,#00H MOV R0,#50HNT:CJNE R0,#0DH,LP RETLP:INC R0 INC R2 SJMP NT END待測字符以待測字符以ASCII碼形式存放在碼形式存放在RAM中,回車符的中,回車符的ASCII碼為碼為0DH,程序中用一條,程序中用一條“CJNE R0,#0DH,LP”指令實現(xiàn)指令實現(xiàn)字符比較字符比較及控制循環(huán)任務的結(jié)束。及控制循
25、環(huán)任務的結(jié)束。4.4.2 循環(huán)程序設計循環(huán)程序設計2.多循環(huán)程序多循環(huán)程序 例例4-18 試編寫延時程序。試編寫延時程序。延時程序與延時程序與MCS-51執(zhí)行指令的時間有關,如果使用執(zhí)行指令的時間有關,如果使用6 MHz晶振,一個機器周期為晶振,一個機器周期為2s,計算出執(zhí)行一條,計算出執(zhí)行一條指令以至一個循環(huán)所需要的時間,給出相應的循環(huán)指令以至一個循環(huán)所需要的時間,給出相應的循環(huán)次數(shù),便能達到延時的目的。次數(shù),便能達到延時的目的。DEL:MOV R5,#100DEL0:MOV R6,#200DEL1:MOV R7,#248 NOPDEL2:DJNZ R7,DEL2 ;DJNZ R6,DEL1
26、 ;DJNZ R5,DEL0 ;RET4.4.2 循環(huán)程序設計循環(huán)程序設計n它是一個三重循環(huán)程序,它是一個三重循環(huán)程序,利用程序嵌套的方法對利用程序嵌套的方法對時間進行延遲是程序設計中常用的方法時間進行延遲是程序設計中常用的方法。n使用多重循環(huán)程序時,必須注意以下幾點:使用多重循環(huán)程序時,必須注意以下幾點:(1)循環(huán)嵌套,必須層次分明,不允許產(chǎn)生內(nèi)外)循環(huán)嵌套,必須層次分明,不允許產(chǎn)生內(nèi)外層循環(huán)交叉。層循環(huán)交叉。(2)外循環(huán)可以一層層向內(nèi)循環(huán)進入,結(jié)束時由)外循環(huán)可以一層層向內(nèi)循環(huán)進入,結(jié)束時由里往外一層層退出。里往外一層層退出。(3)內(nèi)循環(huán)體可以直接轉(zhuǎn)入外循環(huán)體,實現(xiàn)一個)內(nèi)循環(huán)體可以直接轉(zhuǎn)
27、入外循環(huán)體,實現(xiàn)一個循環(huán)由多個條件控制的循環(huán)結(jié)構(gòu)方式。循環(huán)由多個條件控制的循環(huán)結(jié)構(gòu)方式。4.5 子程序設計子程序設計u在實際程序中,常常會多次進行一些相同的計算和操作。在實際程序中,常常會多次進行一些相同的計算和操作。如數(shù)制轉(zhuǎn)換、函數(shù)式計算等。如果每次都從頭開始編制一如數(shù)制轉(zhuǎn)換、函數(shù)式計算等。如果每次都從頭開始編制一段程序,不僅麻煩,而且浪費存儲空間。因此對一些常用段程序,不僅麻煩,而且浪費存儲空間。因此對一些常用的程序段,以子程序的形式,事先存放在存儲器的某一區(qū)的程序段,以子程序的形式,事先存放在存儲器的某一區(qū)域,當主程序在運行過程中,需要用子程序時,只要執(zhí)行域,當主程序在運行過程中,需要用
28、子程序時,只要執(zhí)行調(diào)用子程序的指令,使程序轉(zhuǎn)至子程序。子程序處理完畢,調(diào)用子程序的指令,使程序轉(zhuǎn)至子程序。子程序處理完畢,返回主程序,繼續(xù)進行以后的操作。返回主程序,繼續(xù)進行以后的操作。u調(diào)用子程序有幾個優(yōu)點:調(diào)用子程序有幾個優(yōu)點:(1)避免對相同程序段的重復編制。)避免對相同程序段的重復編制。(2)簡化程序的邏輯結(jié)構(gòu),同時也便于程序調(diào)試。)簡化程序的邏輯結(jié)構(gòu),同時也便于程序調(diào)試。(3)節(jié)省存儲器空間。)節(jié)省存儲器空間。MCS-51指令系統(tǒng)中,提供了兩條調(diào)用子程序指令指令系統(tǒng)中,提供了兩條調(diào)用子程序指令ACALL、LCALL和一條返回主程序的指令和一條返回主程序的指令RET。本課小結(jié)本課小結(jié)v匯編語言的源程序結(jié)構(gòu)緊湊、靈活,編譯后的目標程序效率高,具有占存儲空間少、運行速度快、實時性強等優(yōu)點,應用相當廣泛。但是由于它是面向機器的語言,所以它缺乏通用性,而且編程復雜繁瑣。v在進行程序設計時,首先需要對單片機應用系統(tǒng)預完成的任務進行深入地分析,明確系統(tǒng)的設設計任務、功能要求、技術指標計任務、功能要求、技術指標。然后,要對系統(tǒng)的硬件資源和工作環(huán)境進行分析和熟悉。經(jīng)過分析、研究和明確規(guī)定后,利用數(shù)學方法或數(shù)學模型來對其進行描述,從而把一個實際問題轉(zhuǎn)化成由計算機進行處理的問題。最后,對各種算法進行分析比較,并進行合理的優(yōu)化。