




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章 匯編語言程序設(shè)計 5.5.3 循環(huán)程序設(shè)計循環(huán)程序結(jié)構(gòu)就是重復(fù)執(zhí)行某一段程序,直到某個條件出現(xiàn)為止。 先判斷,后執(zhí)行 先執(zhí)行,后判斷循環(huán)初始狀態(tài)循環(huán)控制條件循環(huán)體循環(huán)初始狀態(tài)循環(huán)體循環(huán)控制條件YNNY第5章 匯編語言程序設(shè)計 1.1.循環(huán)程序的組成循環(huán)程序的組成一個循環(huán)程序通常由四部分構(gòu)成:一個循環(huán)程序通常由四部分構(gòu)成: 初始化部分初始化部分建立循環(huán)初始值。如初始化地址指針,計數(shù)器,建立循環(huán)初始值。如初始化地址指針,計數(shù)器,其他循環(huán)參數(shù)的起始值等。其他循環(huán)參數(shù)的起始值等。 工作部分工作部分它是循環(huán)程序的這主要部分它是循環(huán)程序的這主要部分, ,是為完成某種特定功是為完成某種特定功能而設(shè)計
2、的程序段。能而設(shè)計的程序段。 修改部分修改部分為保證正確的循環(huán)而修改某些參數(shù)。如修改計數(shù)為保證正確的循環(huán)而修改某些參數(shù)。如修改計數(shù)器的值、操作數(shù)地址等。器的值、操作數(shù)地址等。 控制部分控制部分第5章 匯編語言程序設(shè)計 判斷循環(huán)結(jié)束條件是否成立。這是循環(huán)程序設(shè)計判斷循環(huán)結(jié)束條件是否成立。這是循環(huán)程序設(shè)計的關(guān)鍵。通常判斷循環(huán)是否結(jié)束的辦法有兩種:的關(guān)鍵。通常判斷循環(huán)是否結(jié)束的辦法有兩種: 用計數(shù)控制循環(huán):循環(huán)是否已進行預(yù)定次數(shù),用計數(shù)控制循環(huán):循環(huán)是否已進行預(yù)定次數(shù),它適用于已知循環(huán)次數(shù)的循環(huán)程序設(shè)計;它適用于已知循環(huán)次數(shù)的循環(huán)程序設(shè)計; 用條件控制循環(huán):循環(huán)終止條件是否已成立,用條件控制循環(huán):循
3、環(huán)終止條件是否已成立,它適用于未知循環(huán)次數(shù)的循環(huán)程序設(shè)計。它適用于未知循環(huán)次數(shù)的循環(huán)程序設(shè)計。2.循環(huán)控制方法循環(huán)控制方法 用計數(shù)控制循環(huán)用計數(shù)控制循環(huán)第5章 匯編語言程序設(shè)計 例例5.12 在在xx單元開始的連續(xù)單元中存放有單元開始的連續(xù)單元中存放有10個無個無符號數(shù),從中找出中最大者送符號數(shù),從中找出中最大者送yy單元。單元。根據(jù)題意,我們把第一個數(shù)先送入根據(jù)題意,我們把第一個數(shù)先送入AL寄存器中,寄存器中,然后將然后將AL中的數(shù)與后面的中的數(shù)與后面的9個數(shù)逐個進行比較。如果個數(shù)逐個進行比較。如果AL中的數(shù)較小,則兩數(shù)交換;如果中的數(shù)較小,則兩數(shù)交換;如果AL中的數(shù)大,則不交換。中的數(shù)大,
4、則不交換。在比較過程中,在比較過程中,AL中始終保持較大的數(shù),這樣,比較中始終保持較大的數(shù),這樣,比較9次后,則最大的數(shù)在次后,則最大的數(shù)在AL中,最后把中,最后把AL中的數(shù)(最大者)中的數(shù)(最大者)存入存入yy單元。單元。由此可畫出程序的流程圖由此可畫出程序的流程圖:第5章 匯編語言程序設(shè)計 從一批數(shù)中求最大者流程圖 開始 ALxx,BXxx的有效地址,CX9 BXBX+1 AL BX? AL,BX中的數(shù)交換 CXCX-1 CX=0? yyAL 結(jié)束 YYNN第5章 匯編語言程序設(shè)計 程序編寫如下程序編寫如下:DATA SEGMENTxxDB 49,38,65,12,97,13,55,27,
5、28,85yyDB ?DATA ENDSCODESEGMENTASSUME CS:CODE, DS:DATASTART:MOV AX, DATAMOV DS, AXLEA BX, xxMOV AL, BXMOV CX, 9第5章 匯編語言程序設(shè)計 LOOP1:INC BX CMP AL, BXJAE LOOP2XCHG AL, BXLOOP2:DEC CXJNZ LOOP1MOV yy, ALMOV AH, 4CHINT 21HCODEENDSEND STARTLi512.asm第5章 匯編語言程序設(shè)計 (2)用條件控制循環(huán)用條件控制循環(huán)有些情況無法確定循環(huán)次數(shù),但是循環(huán)何時結(jié)束,有些情況無法
6、確定循環(huán)次數(shù),但是循環(huán)何時結(jié)束,可用某種條件來確定。這時,編制程序主要是尋找控制可用某種條件來確定。這時,編制程序主要是尋找控制條件及對控制條件的檢測。條件及對控制條件的檢測。例例5.13 從自然數(shù)從自然數(shù)1開始累加,直到累加和大于開始累加,直到累加和大于1000為止,統(tǒng)計被累加的自然數(shù)的個數(shù),并把統(tǒng)計的個為止,統(tǒng)計被累加的自然數(shù)的個數(shù),并把統(tǒng)計的個數(shù)送入數(shù)送入n單元,把累加和送入單元,把累加和送入sum單元。單元。根據(jù)題意,被累加的自然數(shù)的個數(shù)事先是未知的,根據(jù)題意,被累加的自然數(shù)的個數(shù)事先是未知的,也就是說,循環(huán)的次數(shù)是未知的,因此不能用計數(shù)器方也就是說,循環(huán)的次數(shù)是未知的,因此不能用計數(shù)
7、器方法控制循環(huán)。但題目中給定一個重要條件,即累加和大法控制循環(huán)。但題目中給定一個重要條件,即累加和大于于1000則停止累加,因此,可以根據(jù)這一條件控制循環(huán)。則停止累加,因此,可以根據(jù)這一條件控制循環(huán)。我們用我們用CX寄存器統(tǒng)計自然數(shù)的個數(shù),用寄存器統(tǒng)計自然數(shù)的個數(shù),用AX寄存器存放寄存器存放累加和,用累加和,用BX寄存器存放每次取得的自然數(shù)。寄存器存放每次取得的自然數(shù)。第5章 匯編語言程序設(shè)計 程序的流程圖如下所示。程序的流程圖如下所示。 開始 初始化 AX0, CX0, BX0 BXBX+1 AXAX+BX, CXCX+1 AX1000? nCX, sumAX 結(jié)束 YN第5章 匯編語言程序
8、設(shè)計 程序編寫如下:程序編寫如下: DATAS SEGMENT n DW ? sum DW ? DATAS ENDS STACK SEGMENT PARA STACK stack DW DUP(?) STACK ENDS CODES SEGMENT MAIN PROC FAR ASSUME CX:CODES, DS:DATAS, SS:STACK START:PUSH DS MOV AX, 0 PUSH AX MOV AX, DATASMOV DS, AX第5章 匯編語言程序設(shè)計 MOV CX, 0 MOV AX, 0 MOV BX, 0 LOOPT:INC BX ADD AX, BX INC
9、 CX CMP AX, 1000 JLE LOOPT MOV n, CX MOV sum, AX RET MAIN ENDP CODES ENDS END STARTLi513.asm第5章 匯編語言程序設(shè)計 3.多重循環(huán)程序設(shè)計多重循環(huán)程序設(shè)計 多重循環(huán)又稱循環(huán)嵌套多重循環(huán)又稱循環(huán)嵌套,即循環(huán)套循環(huán)。有些問題即循環(huán)套循環(huán)。有些問題比較復(fù)雜比較復(fù)雜,單重循環(huán)難以解決單重循環(huán)難以解決,必須使用多重循環(huán)。在使必須使用多重循環(huán)。在使用多重循環(huán)時用多重循環(huán)時,必須注意以下幾點:必須注意以下幾點: 內(nèi)循環(huán)必須完整地包含在外循環(huán)內(nèi)內(nèi)循環(huán)必須完整地包含在外循環(huán)內(nèi),內(nèi)外循環(huán)不內(nèi)外循環(huán)不能相互交叉。能相互交叉。
10、 內(nèi)循環(huán)既可以嵌套在外循環(huán)中內(nèi)循環(huán)既可以嵌套在外循環(huán)中,也可以幾個內(nèi)循也可以幾個內(nèi)循環(huán)并列存在??梢詮膬?nèi)循環(huán)中直接跳到外循環(huán),但不能環(huán)并列存在。可以從內(nèi)循環(huán)中直接跳到外循環(huán),但不能從外循環(huán)直接跳進內(nèi)循環(huán)中。從外循環(huán)直接跳進內(nèi)循環(huán)中。 防止出現(xiàn)防止出現(xiàn)“死循環(huán)死循環(huán)”。無論是外循環(huán)。無論是外循環(huán),還是內(nèi)循還是內(nèi)循環(huán),千萬不要使循環(huán)返回到初始部分環(huán),千萬不要使循環(huán)返回到初始部分, 這一點應(yīng)當(dāng)特別這一點應(yīng)當(dāng)特別注意。注意。 第5章 匯編語言程序設(shè)計 每次通過外循環(huán)再次進入內(nèi)循環(huán)時,初始條件每次通過外循環(huán)再次進入內(nèi)循環(huán)時,初始條件必須重新設(shè)置。必須重新設(shè)置。例例6利用逐次求大數(shù)的方法對內(nèi)存單元利用逐次
11、求大數(shù)的方法對內(nèi)存單元ARRAY開始的一字節(jié)為單位的無符號數(shù)進行從大到小排序。開始的一字節(jié)為單位的無符號數(shù)進行從大到小排序。根據(jù)題意,排序方法為:根據(jù)題意,排序方法為:編制程序如下:編制程序如下:49 38 65 12 97 13 55 27 78 8549496565979738384949656578788585 78 65 55 49 38 27 13 1212ARRAYAL第5章 匯編語言程序設(shè)計 DATASEGMENTARRAYDB 49,38,65,12,97,13,55,27,28,85 DATAENDS CODESEGMENTASSUME CS:CODE, DS:DATA ST
12、ART:MOV AX, DATAMOV DS, AXMOV DX, 9 LEA BX, ARRAY LOOPO: MOV AL, BXMOV SI, BX+1MOV CX, DX第5章 匯編語言程序設(shè)計 LOOPI:CMP AL, SIJAE NEXTXCHG AL, SI NEXT:INC SILOOP LOOPIMOV BX, ALINC BXDEC DXJNZ LOOPOMOV AH, 4CHINT 21H CODEENDSEND START第5章 匯編語言程序設(shè)計 5.5.4 子程序設(shè)計子程序又稱為過程,它相當(dāng)于高級語言的過程或函子程序又稱為過程,它相當(dāng)于高級語言的過程或函數(shù),是一個獨
13、立的程序段,能完成某些確定的功能,并數(shù),是一個獨立的程序段,能完成某些確定的功能,并能別其它程序調(diào)用。當(dāng)一個子程序不被調(diào)用能別其它程序調(diào)用。當(dāng)一個子程序不被調(diào)用,且該子程序且該子程序完成確定的功能后完成確定的功能后,便返回調(diào)用程序處。便返回調(diào)用程序處。1.過程的定義和調(diào)用過程的定義和調(diào)用過程的定義采用過程定義偽指令,其格式為:過程的定義采用過程定義偽指令,其格式為:過程名過程名 PROC 類型類型RET 過程名過程名ENDP第5章 匯編語言程序設(shè)計 過程的調(diào)用采用指令語句過程的調(diào)用采用指令語句CALL,其格式為其格式為:CALL 過程名過程名 段內(nèi)調(diào)用段內(nèi)調(diào)用CSEG SEGMENTCALL
14、SUBTMOV AH,4CHINT 21H SUBT PROC NEARRET SUBT ENDPCSEG ENDS第5章 匯編語言程序設(shè)計 段間調(diào)用段間調(diào)用XSEG SEGMENT YSEG SEGMENTCALL SUBT1 CALL SUBT1MOV AH,4CH YSEG ENDSINT 21H SUBT1 PROC FARRET SUBT1 ENDPXSEG SEGMENT第5章 匯編語言程序設(shè)計 2.寄存器內(nèi)容的保護和恢復(fù)(保護現(xiàn)場與恢復(fù)現(xiàn)場)通常主程序和過程的設(shè)計是分開的,因而他們所使用的寄存器往往會發(fā)生沖突。為避免沖突,應(yīng)在進入過程時,將該過程所用到的寄存器內(nèi)容保護起來,稱為保
15、護現(xiàn)場。而從過程返回主程序前,再將這些寄存器的內(nèi)容恢復(fù),稱為恢復(fù)現(xiàn)場。保護現(xiàn)場和恢復(fù)現(xiàn)場通常分別用堆棧壓入指令和彈出指令來實現(xiàn)。例如:第5章 匯編語言程序設(shè)計 SUBPRPROC FARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DXPUSH CXPUSH BXPUSH AXRETSUBPRENDP第5章 匯編語言程序設(shè)計 3.主程序和過程間的參數(shù)傳遞主程序和過程間的參數(shù)傳遞主程序調(diào)用過程時,必須先將過程所需要的初始主程序調(diào)用過程時,必須先將過程所需要的初始數(shù)據(jù)設(shè)置好,這些初始數(shù)據(jù)稱為過程的入口參數(shù)。過數(shù)據(jù)設(shè)置好,這些初始數(shù)據(jù)稱為過程的入口參數(shù)。過程執(zhí)行完畢返回主程序時也
16、必須將過程運行所得的結(jié)程執(zhí)行完畢返回主程序時也必須將過程運行所得的結(jié)果送給主程序,這些回送的結(jié)果稱為過程的出口參數(shù)。果送給主程序,這些回送的結(jié)果稱為過程的出口參數(shù)。過程入口參數(shù)的送入和出口參數(shù)的送出城為主程序和過程入口參數(shù)的送入和出口參數(shù)的送出城為主程序和過程間的參數(shù)傳遞,也稱過程通信。過程通信通常有過程間的參數(shù)傳遞,也稱過程通信。過程通信通常有四種方法。四種方法。 通過寄存器傳遞參數(shù)通過寄存器傳遞參數(shù) 通過變量傳遞參數(shù)通過變量傳遞參數(shù) 通過地址表傳遞參數(shù)通過地址表傳遞參數(shù) 通過堆棧傳遞參數(shù)通過堆棧傳遞參數(shù)第5章 匯編語言程序設(shè)計 4.子程序的嵌套與遞歸調(diào)用一個子程序調(diào)用另一個子程序叫子程序嵌
17、套,如下圖所示:CALLCALLCALLRETRETRET主程序子程序1子程序2子程序n第5章 匯編語言程序設(shè)計 由于調(diào)用子程序時,斷點地址保存在堆棧中,因此只由于調(diào)用子程序時,斷點地址保存在堆棧中,因此只要有足夠的堆??臻g,嵌套的層次(也稱深度)是不要有足夠的堆??臻g,嵌套的層次(也稱深度)是不受限制的。受限制的。若一個子程序調(diào)用該子程序自身,則稱為遞歸若一個子程序調(diào)用該子程序自身,則稱為遞歸調(diào)用。遞歸調(diào)用是子程序嵌套的特例。調(diào)用。遞歸調(diào)用是子程序嵌套的特例。5. 子程序調(diào)用和偽指令使用的例子子程序調(diào)用和偽指令使用的例子例例5.16 AX寄存器中存放著寄存器中存放著4位十六進制數(shù),是位十六進
18、制數(shù),是編寫程序?qū)⑦@編寫程序?qū)⑦@4位十六進制數(shù)分別轉(zhuǎn)換為相應(yīng)的位十六進制數(shù)分別轉(zhuǎn)換為相應(yīng)的ASCII碼,并依次存放到碼,并依次存放到RESULT數(shù)組的數(shù)組的4個字節(jié)中去,要求個字節(jié)中去,要求分別用子程序和偽指令的方法實現(xiàn)將一位分別用子程序和偽指令的方法實現(xiàn)將一位16進制數(shù)轉(zhuǎn)進制數(shù)轉(zhuǎn)化成一位化成一位ASCII碼。碼。第5章 匯編語言程序設(shè)計 用子程序方法編程:DATA SEGMENT HEXDATA DW 4D7EH RESULT DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE;DS:DATA START:MOV AX, DATAMOV DS, AXMOV CX, 4LEA SI, HEXDATALEA DI, RESULTMOV BX, SINEXT:MOV AX, BXAND AL, 0FHCALL HEXASCMOV DI, ALINC DIPUSH CXMOV CX, 4SHR BX, CLPOP CXLOOP NEXT第5章 匯編語言程序設(shè)計 LEA SI, RESULT+3MOV CX, 4STDLOOP1:LODSBMOV DL, ALMOV AH, 02HINT 21HLOOP LOOP1MOV DL, HMOV AH, 02HINT 21HMOV AH, 4CHINT 21H;十六進制轉(zhuǎn)換成十六進制轉(zhuǎn)換成ASC
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度能源管理文件傳輸與監(jiān)控合同
- 二零二五年度房地產(chǎn)項目股權(quán)回購轉(zhuǎn)讓協(xié)議書
- 二零二五年度人工智能助手免責(zé)任協(xié)議書
- 二零二五年度學(xué)生宿舍租賃管理服務(wù)合同
- 二零二五年度教育機構(gòu)貸款擔(dān)保合同
- 2025年度蔬菜大棚溫室租賃與農(nóng)產(chǎn)品質(zhì)量安全追溯系統(tǒng)建設(shè)合同
- 2024房屋租賃合同
- 企業(yè)第三方居間協(xié)議合同
- 跨行業(yè)合作市場拓展計劃
- 求職者信息收集與分析表
- 不經(jīng)歷風(fēng)雨怎么見彩虹》教學(xué)設(shè)計
- (綜合治理)修復(fù)工程指南(試行) - 貴州省重金屬污染防治與土壤修復(fù)網(wǎng)
- 公安筆錄模板之詢問嫌疑人(書面?zhèn)鲉局伟舶讣?
- 員工就餐簽到表
- A-level項目介紹(課堂PPT)
- 故障診斷技術(shù)的國內(nèi)外發(fā)展現(xiàn)狀(共3頁)
- 航海計算軟件---ETA計算器
- 光伏電站運維手冊
- 半導(dǎo)體及集成電路領(lǐng)域的撰寫及常見問題
- 年產(chǎn)64萬件衛(wèi)生瓷原料車間
評論
0/150
提交評論