版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第四章第四章 匯編語言程序設計匯編語言程序設計 在程序中重復執(zhí)行相同功能的一段代碼,可用循環(huán)程序?qū)崿F(xiàn)。循環(huán)程序在程序中重復執(zhí)行相同功能的一段代碼,可用循環(huán)程序?qū)崿F(xiàn)。循環(huán)程序通常由五部分組成:通常由五部分組成:初始化部分初始化部分為程序操作、地址指針、循環(huán)計數(shù)、結束條件等設為程序操作、地址指針、循環(huán)計數(shù)、結束條件等設置初始值。置初始值。循環(huán)工作部分循環(huán)工作部分循環(huán)程序主體,完成基本操作。循環(huán)程序主體,完成基本操作。循環(huán)修改部分循環(huán)修改部分修改循環(huán)工作部分的變量,為重復操作做準備。修改循環(huán)工作部分的變量,為重復操作做準備。循環(huán)控制部分循環(huán)控制部分修改計數(shù)器或判斷循環(huán)結束條件,決定是否終止循環(huán)。修改
2、計數(shù)器或判斷循環(huán)結束條件,決定是否終止循環(huán)。循循環(huán)環(huán)體體循環(huán)結束部分循環(huán)結束部分循環(huán)終止后,對循環(huán)結果的處理部分。循環(huán)終止后,對循環(huán)結果的處理部分。程序概述程序概述終終 止止起起 始始初始化初始化循環(huán)工作循環(huán)工作循環(huán)修改循環(huán)修改循環(huán)控制循環(huán)控制完完未完未完終終 止止起起 始始初始化初始化循環(huán)工作循環(huán)工作循環(huán)修改循環(huán)修改循環(huán)控制循環(huán)控制完完未完未完先執(zhí)行后判斷先執(zhí)行后判斷先判斷后執(zhí)行先判斷后執(zhí)行程序基本結構程序基本結構未完未完終終 止止起起 始始初始化初始化循環(huán)工作循環(huán)工作循環(huán)修改循環(huán)修改循環(huán)控循環(huán)控制制完完計數(shù)循環(huán)計數(shù)循環(huán)重復次數(shù)已知,用計數(shù)值控制循環(huán)的開始與終止。重復次數(shù)已知,用計數(shù)值控制循
3、環(huán)的開始與終止。條件控制循環(huán)條件控制循環(huán)重復次數(shù)未知或不確定,需找出循環(huán)控制的條件。重復次數(shù)未知或不確定,需找出循環(huán)控制的條件。解:解: 已知循環(huán)次數(shù),采用計數(shù)循環(huán)控制。程序段如下:已知循環(huán)次數(shù),采用計數(shù)循環(huán)控制。程序段如下:MOV CX,100;確定循環(huán)計數(shù)器值確定循環(huán)計數(shù)器值MOV BX,1;確定循環(huán)初值確定循環(huán)初值MOV AX,0;和的初值和的初值LOP: ADD AX,BX INC BXLOOP LOP;循環(huán)控制循環(huán)控制【例例】 編寫程序計算編寫程序計算C=1+2+3+4+100控制方式控制方式計數(shù)循環(huán)的常見方法:計數(shù)循環(huán)的常見方法: 減減1循環(huán)循環(huán)MOVCX,NL :DECCXJNZ
4、L 加加1循環(huán)循環(huán)MOVCX,NL: INCCXJNZL LOOP 短標號短標號MOVCX,NL: LOOP L 解:無法確定循環(huán)次數(shù),采用條件循環(huán)控制。程序段如下:解:無法確定循環(huán)次數(shù),采用條件循環(huán)控制。程序段如下:MOV SI,OFFSET ORGSTRIN;讀源串地址讀源串地址 MOV DI,OFFSET DESSTRIN;讀目的串地址讀目的串地址LOP: MOV AL,SI MOV DI,AL INC SI;循環(huán)修改循環(huán)修改 INC DI CMP AL,$ JNZ LOP;循環(huán)控制循環(huán)控制【例例】 將一個字符串拷貝到另一個存儲區(qū)中,直到拷貝到字符將一個字符串拷貝到另一個存儲區(qū)中,直到拷
5、貝到字符“$”$”結束。結束。 循環(huán)體中又有循環(huán)稱多重循環(huán)。在多重循環(huán)程序設計時,應分別考慮每循環(huán)體中又有循環(huán)稱多重循環(huán)。在多重循環(huán)程序設計時,應分別考慮每重循環(huán)的控制條件。通常內(nèi)層循環(huán)要受外層循環(huán)的控制。重循環(huán)的控制條件。通常內(nèi)層循環(huán)要受外層循環(huán)的控制。 解解:采用冒泡排序法,從第一個數(shù)開始依次對相鄰的兩個數(shù)進行比較,如:采用冒泡排序法,從第一個數(shù)開始依次對相鄰的兩個數(shù)進行比較,如果次序正確則不做任何操作,如果次序不正確則將此兩個數(shù)交換位置。果次序正確則不做任何操作,如果次序不正確則將此兩個數(shù)交換位置。 【例例】 在首地址為在首地址為Addr的存儲單元中有的存儲單元中有N個數(shù),編程序?qū)⒋藗€數(shù)
6、,編程序?qū)⒋薔個數(shù)按照從個數(shù)按照從小到大的次序排列。小到大的次序排列。開開 始始CX外循環(huán)次數(shù)外循環(huán)次數(shù)DI最后一個數(shù)的地址最后一個數(shù)的地址BX0取取BX位置上的數(shù)到位置上的數(shù)到AL與后一數(shù)比較與后一數(shù)比較大于大于小于小于交換兩數(shù)位置交換兩數(shù)位置BXBX1是否為最后的數(shù)是否為最后的數(shù)?NYCXCX1結結 束束CX=0?YNDATA SEGMENT Addr DB N DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,N DEC CXLOOPl: MOV DI,CX;設置外循環(huán)
7、次數(shù)設置外循環(huán)次數(shù) MOV BX,0;設置內(nèi)循環(huán)條件設置內(nèi)循環(huán)條件LOOP2:MOV AL,AddrBX CMP AL,AddrBX+1 JL CONT XCHG AL,AddrBX+1;讓大的數(shù)向地址高處移動讓大的數(shù)向地址高處移動 MOV AddrBX,ALCONT:INC BX CMP BX,DI;內(nèi)循環(huán)判斷內(nèi)循環(huán)判斷 JB LOOP2 LOOP LOOP1 ;外循環(huán)控制條件外循環(huán)控制條件 MOV AH,4CH INT 21HCODE ENDS END START MOVAX,3578HMOVCL,0L:ORAX,AX ;判斷判斷AX是否為是否為0JZEXIT ;AX=0結束結束SHLAX
8、,1 ;最高位進最高位進CFJNCLINCCLJMPLEXIT: INT20H 【例例】統(tǒng)計統(tǒng)計AX中中 1 的個數(shù)。的個數(shù)。起起 始始AX3578HCL0AX 1終終 止止AX=0?YNCF=1?NYCLCL+1【例例】BUF中有中有N個有符號數(shù),分離其中的正負數(shù),分別送入個有符號數(shù),分離其中的正負數(shù),分別送入BUF1和和BUF2中中 DATASEGMENTBUF DB 12H, 34H, -56H, -98H, 096H, 68H, 56H, 80HN=$BUFBUF1DB N DUP(0)BUF2DB N DUP(?) DATAENDSCODESEGMENTASSUME CS:CODE,
9、DS:DATASTART: MOVDX,DATAMOVDS,AXLEASI,BUFLEADI,BUF1LEABX,BUF2MOVCX,NAA:MOVAL,SIINCSICMPAL,0JGEBBMOVBX,ALINCBXJMPCCBB:MOVDI,ALINCDICC:LOOPAA;DEC CX ;JNZ AAMOVAH,4CHINT21HCODEENDSENDSTART 程序設計過程中常常把多次引用的相同程序段編成一個獨立的程序段,當程序設計過程中常常把多次引用的相同程序段編成一個獨立的程序段,當需要執(zhí)行這個程序段時,用調(diào)用指令(需要執(zhí)行這個程序段時,用調(diào)用指令(CALL)調(diào)用該程序段即可。具有
10、這)調(diào)用該程序段即可。具有這種獨立功能的程序段稱為過程或子程序。種獨立功能的程序段稱為過程或子程序。 適合編成子程序的程序有兩種:適合編成子程序的程序有兩種: 程序需要反復使用,這類程序編寫成子程序可避免重復編寫程序,并可程序需要反復使用,這類程序編寫成子程序可避免重復編寫程序,并可以節(jié)省存儲空間。以節(jié)省存儲空間。 程序具有通用性,這類程序大家都要用到,如鍵盤管理程序、磁盤讀寫程序具有通用性,這類程序大家都要用到,如鍵盤管理程序、磁盤讀寫程序、標準函數(shù)程序等,編成子程序后便于功能共享。程序、標準函數(shù)程序等,編成子程序后便于功能共享。 子程序必須有一個名稱,方便其他程序調(diào)用;子程序出口是一條返回
11、指令子程序必須有一個名稱,方便其他程序調(diào)用;子程序出口是一條返回指令RET。 NAME PROCNEAR (FAR)過程名過程名過程類型過程類型RETNAME ENDP必須用必須用RET結束結束PUSHAXPUSHBXPOPBXPOPAX現(xiàn)場保護現(xiàn)場保護程序部分程序部分現(xiàn)場恢復現(xiàn)場恢復 主程序調(diào)用子程序通過主程序調(diào)用子程序通過CALL指令來實現(xiàn),子程序執(zhí)行結束后,通過指令來實現(xiàn),子程序執(zhí)行結束后,通過RET指令返回主程序,轉到主程序中指令返回主程序,轉到主程序中CALL指令的下一條指令繼續(xù)執(zhí)行主程序。指令的下一條指令繼續(xù)執(zhí)行主程序。 一個子程序可以由主程序在不同時刻多次調(diào)用。如果在子程序中又調(diào)
12、用一個子程序可以由主程序在不同時刻多次調(diào)用。如果在子程序中又調(diào)用了其它的子程序,稱為了其它的子程序,稱為子程序嵌套子程序嵌套。特別當子程序又調(diào)用子程序本身時,。特別當子程序又調(diào)用子程序本身時,這種調(diào)用稱為這種調(diào)用稱為遞歸調(diào)用遞歸調(diào)用。 子程序通常應以獨立的文件形式編寫,形成模塊。子程序文件由子程序通常應以獨立的文件形式編寫,形成模塊。子程序文件由子程序子程序說明說明和和子程序體子程序體構成。構成。(1)子程序說明)子程序說明 功能描述,如子程序名、功能,性能指標等;功能描述,如子程序名、功能,性能指標等; 所用寄存器和存儲單元;所用寄存器和存儲單元; 子程序入口、出口參數(shù);子程序入口、出口參數(shù)
13、; 子程序中調(diào)用的其它子程序;子程序中調(diào)用的其它子程序; 調(diào)用實例(可無)。調(diào)用實例(可無)。(2)子程序體)子程序體 子程序本身常以子程序本身常以“過程過程”形式存放在代碼段中,以過程名開始,以形式存放在代碼段中,以過程名開始,以RET指令結束。指令結束。 (1)現(xiàn)場保護)現(xiàn)場保護 如果子程序中要臨時修改某些寄存器或存儲單元時,為了不破壞原有的如果子程序中要臨時修改某些寄存器或存儲單元時,為了不破壞原有的信息,要將寄存器或存儲單元的原有內(nèi)容壓棧保護或存入子程序不用的寄信息,要將寄存器或存儲單元的原有內(nèi)容壓棧保護或存入子程序不用的寄存器或存儲單元中。存器或存儲單元中。PUSHAXPUSHBXP
14、USH SIPOPSIPOPBXPOPAXRET注意:現(xiàn)場保護的入棧和出棧順注意:現(xiàn)場保護的入棧和出棧順序正好相反序正好相反 (2)參數(shù)傳遞)參數(shù)傳遞 主程序在調(diào)用子程序時一般需要傳遞參數(shù)給子程序,這些參數(shù)是子程序主程序在調(diào)用子程序時一般需要傳遞參數(shù)給子程序,這些參數(shù)是子程序運行時所需要的原始數(shù)據(jù)。常用的方法有:運行時所需要的原始數(shù)據(jù)。常用的方法有:u 寄寄 存存 器器 適用于參數(shù)少的情況,其特點是參數(shù)傳遞速度快適用于參數(shù)少的情況,其特點是參數(shù)傳遞速度快 。u 約定單元約定單元 適用于參數(shù)多的情況,要事先建立參數(shù)緩沖區(qū)。適用于參數(shù)多的情況,要事先建立參數(shù)緩沖區(qū)。u 堆堆 棧棧 適用于參數(shù)較多、
15、子程序嵌套或遞歸調(diào)用的情況。適用于參數(shù)較多、子程序嵌套或遞歸調(diào)用的情況。 MOV BX,OFFSET M1MOV AX,BX;AH,AL作子程序的入口參數(shù)作子程序的入口參數(shù)CALL ADDROC;調(diào)用子程序調(diào)用子程序MOV BX+2,AL;AL作為子程序的返回參數(shù)作為子程序的返回參數(shù)MOV BX,OFFSET M2MOV AX,BX ;讀第二組待處理數(shù)據(jù)讀第二組待處理數(shù)據(jù)CALL ADDROC;再次調(diào)用子程序處理第二個數(shù)據(jù)再次調(diào)用子程序處理第二個數(shù)據(jù)ADDROC PROC NEAR;子程序定義子程序定義 ADD AL,AH;將將AL,AH中的參數(shù)相加,結果存中的參數(shù)相加,結果存AL DAA R
16、ET;子程序返回子程序返回ADDROC ENDP【例例4.13】利用寄存器傳遞參數(shù)。利用寄存器傳遞參數(shù)。MOVBX,OFFSET M1;待處理數(shù)據(jù)的地址用待處理數(shù)據(jù)的地址用BX傳遞傳遞CALL ADDROC2;調(diào)用子程序調(diào)用子程序MOV BX,OFFSET M2;將第二組數(shù)據(jù)地址放到將第二組數(shù)據(jù)地址放到BX中中CALL ADDROC2ADDROC2 PROC NEAR PUSHAXMOV AL,BX;BX中存放待處理數(shù)據(jù)的地址中存放待處理數(shù)據(jù)的地址 ADD AL,BX+1;直接對該地址中的數(shù)據(jù)做運算直接對該地址中的數(shù)據(jù)做運算 DAA MOV BX+2,AL;結果存回到內(nèi)存中結果存回到內(nèi)存中PO
17、PAX RETADDPROC2 ENDP【例例4.14】利用存儲器傳遞參數(shù)。利用存儲器傳遞參數(shù)。MOVAX,0MOV AH,BIN1PUSH AX;將待轉換二進制數(shù)壓入堆棧將待轉換二進制數(shù)壓入堆棧LEA DI,ASCBUFPUSH DI;將將ASCII碼存放地址壓入堆棧碼存放地址壓入堆棧MOV AX,8HPUSH AX;將二進制數(shù)的位數(shù)壓入堆棧將二進制數(shù)的位數(shù)壓入堆棧CALL BINTOASC;調(diào)用轉換子程序調(diào)用轉換子程序MOV AH,BIN2;開始對第二個數(shù)處理開始對第二個數(shù)處理PUSH AXADD DI,10HPUSH DIMOV AX,10HPUSH AXCALL BINTOASC【例例
18、4.15】利用堆棧傳遞參數(shù)到子程序,由子程序?qū)?shù)進行處理。利用堆棧傳遞參數(shù)到子程序,由子程序?qū)?shù)進行處理。將兩個給定的二進制數(shù)將兩個給定的二進制數(shù)BIN1、BIN2轉換為對應的二進制數(shù)的轉換為對應的二進制數(shù)的ASC碼串。碼串。BINTOASCPROC NEAR;轉換子程序轉換子程序 PUSH DI;保護現(xiàn)場保護現(xiàn)場 PUSH CX PUSH DX MOV BP,SP;獲取堆棧地址獲取堆棧地址 MOV DX,BP+12;取出堆棧中的數(shù)據(jù)取出堆棧中的數(shù)據(jù) MOV DI,BP+10 MOV CX,BP+8 LOP: ROL DX,1;二進制數(shù)最高位放到二進制數(shù)最高位放到DL中中MOV AL,DL
19、AND AL,1ADD AL,0;轉換為轉換為ASC碼碼MOV DI,AL;存入相應內(nèi)存存入相應內(nèi)存INC DILOOP LOP POP DX POP CX POP DI RET 6BINTOASC ENDP MS-DOS操作系統(tǒng)內(nèi)置了幾十個子程序(操作系統(tǒng)內(nèi)置了幾十個子程序(API),這些子程序能夠完成大),這些子程序能夠完成大量底層功能,用戶程序可以通過軟中斷調(diào)用方式使用這些子程序(稱為量底層功能,用戶程序可以通過軟中斷調(diào)用方式使用這些子程序(稱為DOS系統(tǒng)功能調(diào)用),軟中斷號為系統(tǒng)功能調(diào)用),軟中斷號為21H。 指令為:指令為:INT 21H DOS系統(tǒng)功能調(diào)用的基本過程如下:系統(tǒng)功能調(diào)
20、用的基本過程如下: (1)傳送入口參數(shù)到指定寄存器中;)傳送入口參數(shù)到指定寄存器中; (2)調(diào)用子功能的功能編號放在)調(diào)用子功能的功能編號放在AH寄存器中;寄存器中; (3)執(zhí)行)執(zhí)行INT 21H指令。指令。 調(diào)用結束后返回相應結果,并由調(diào)用結束后返回相應結果,并由CF標志表示調(diào)用是否成功,當出現(xiàn)調(diào)用標志表示調(diào)用是否成功,當出現(xiàn)調(diào)用錯誤時錯誤時CF=1,AX返回出錯編號。返回出錯編號。(1)MOVREG,XX;傳送入口參數(shù)到指定寄存器中傳送入口參數(shù)到指定寄存器中;(部分無入口參數(shù))(部分無入口參數(shù)) (2)MOV AH,功能號,功能號;功能號送入功能號送入AH寄存器中寄存器中(3)INT 2
21、1H;DOS功能調(diào)用功能調(diào)用(4)返回信息)返回信息CF= 1 表示有錯誤發(fā)生,表示有錯誤發(fā)生, AX=返回錯誤代碼返回錯誤代碼CF=表示調(diào)用成功,表示調(diào)用成功,AX返回參數(shù)返回參數(shù)1、鍵盤單字符輸入(、鍵盤單字符輸入(1號)號)MOVAH,1INT21H功能功能:等待從鍵盤輸入一個字符。:等待從鍵盤輸入一個字符。返回返回:(:(AL)=ASCII碼,并回顯在顯示器上。碼,并回顯在顯示器上。 DEBUG演示演示常用常用DOS功能調(diào)用介紹功能調(diào)用介紹2、鍵盤輸入字符串(、鍵盤輸入字符串(0AH號)號)MOV DX,OFFSET BUF;DS:DX為鍵盤緩沖區(qū)為鍵盤緩沖區(qū)MOVAH,0AHINT2
22、1H功能功能:等待從鍵盤輸入一串字符,回車結束。字符串存入鍵盤緩沖區(qū)。:等待從鍵盤輸入一串字符,回車結束。字符串存入鍵盤緩沖區(qū)。鍵盤緩沖區(qū)定義(示例):鍵盤緩沖區(qū)定義(示例):BUFDB 81;緩沖區(qū)的大小緩沖區(qū)的大小DB ?;實際輸入的字符個數(shù),不含實際輸入的字符個數(shù),不含0DHDB 80 DUP (?)(?) ;字符串存放區(qū)字符串存放區(qū)3、輸出單字符(、輸出單字符(2號)號)MOV DL,AMOVAH,02INT21H功能功能:將:將DL中字符從屏幕上輸出。中字符從屏幕上輸出。返回返回:無。:無。 DEBUG演示演示4、輸出字符串(、輸出字符串(09號)號)MOV DX,OFFSET BUFMOVAH,09INT21H功能功能:BUF中以中以“$”為結束標志的字符串顯示在屏幕上。為結束標志的字符串顯示在屏幕上。 DATASEGMENTBUFDB“80X86 CPU $”DATAENDS DEBUG演示演示5、控制臺輸入、控制臺輸入/輸出單字符(輸出單字符(06)MO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)自我評價15篇
- 個人保證書集錦15篇
- 戰(zhàn)友聚會致辭(15篇)
- 學生畢業(yè)晚會策劃書12篇
- 四年級下冊語文說課稿錦集六篇
- 客服辭職報告15篇
- 秋季幼兒園中班工作計劃
- 出納的實習報告范文錦集10篇
- 晶狀體病-教學課件
- 健康檢測設備代理銷售合同(2篇)
- GB/T 42449-2023系統(tǒng)與軟件工程功能規(guī)模測量IFPUG方法
- 酒店裝修工程預算表EXCEL模板(推薦)
- NY 5052-2001無公害食品海水養(yǎng)殖用水水質(zhì)
- 【講座】2020年福建省高職分類考試招生指導講座
- 性格決定命運課件
- 學習會計基礎工作規(guī)范課件
- 雙面埋弧焊螺旋鋼管公稱外公壁厚和每米理論重量
- 富士施樂VC2265打印機使用說明SPO
- 服務態(tài)度決定客戶滿意度試題含答案
- 教科版四年級科學上冊全冊復習教學設計及知識點整理
- 重慶萬科渠道制度管理辦法2022
評論
0/150
提交評論