版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、本章學(xué)習(xí)要點(diǎn):本章學(xué)習(xí)要點(diǎn):(1)子程序的編寫格式)子程序的編寫格式(2)子程序調(diào)用時(shí)的參數(shù)傳遞方法)子程序調(diào)用時(shí)的參數(shù)傳遞方法(3)嵌套及遞歸子程序)嵌套及遞歸子程序一、過程定義語句一、過程定義語句(process)利用過程定義偽指令語句,可把程序片段說明為具有利用過程定義偽指令語句,可把程序片段說明為具有近類型或遠(yuǎn)類型的過程,并且能給過程取一個(gè)名字。近類型或遠(yuǎn)類型的過程,并且能給過程取一個(gè)名字。過程定于語句的格式如下:過程定于語句的格式如下:過程名過程名 PROC NEAR | FAR過程名過程名 ENDP過程的類型在過程定義開始語句過程的類型在過程定義開始語句PROC中指定;中指定;過程
2、可以被指定位近過程可以被指定位近(NEAR)類型,也可以被指定為類型,也可以被指定為遠(yuǎn)類型。如果不指定,則通常默認(rèn)為近類型;遠(yuǎn)類型。如果不指定,則通常默認(rèn)為近類型;定義一個(gè)過程的開始語句定義一個(gè)過程的開始語句PROC和結(jié)束語句和結(jié)束語句ENDP前前使用的過程名稱必須一致,從而保持配對。使用的過程名稱必須一致,從而保持配對。像普通標(biāo)號一樣,像普通標(biāo)號一樣,過程名具有段值、偏移和類型這三個(gè)屬性過程名具有段值、偏移和類型這三個(gè)屬性。過程名的段值和偏移是對應(yīng)過程入口過程名的段值和偏移是對應(yīng)過程入口(過程定義開始偽指令語(過程定義開始偽指令語句后的指令語句)句后的指令語句)的段值和偏移的段值和偏移。例:
3、下面程序片段運(yùn)行后,例:下面程序片段運(yùn)行后,AL=?,BL=?。XOR AL , ALCALL SUBSMOV BL , ALCALL SUBSRCR AL , 1HLT;停機(jī),停機(jī),haltSUBS PROC NEARNOT ALJS NEXTSTC;CF=1, SeT Cf = 1NEXT : RETSUBS ENDP例:用程序調(diào)用的方法,完成一個(gè)把例:用程序調(diào)用的方法,完成一個(gè)把16位二進(jìn)制數(shù)轉(zhuǎn)換為位二進(jìn)制數(shù)轉(zhuǎn)換為4位位十六進(jìn)制十六進(jìn)制ASCII碼的轉(zhuǎn)換程序。碼的轉(zhuǎn)換程序。子程序說明:入口參數(shù):子程序說明:入口參數(shù):DX=欲轉(zhuǎn)換的二進(jìn)制數(shù);欲轉(zhuǎn)換的二進(jìn)制數(shù);DS:BX=存放轉(zhuǎn)換所得存放轉(zhuǎn)
4、換所得ASCII碼串的緩沖區(qū)首地址,轉(zhuǎn)換后的碼串的緩沖區(qū)首地址,轉(zhuǎn)換后的ASCII碼串按照高位到低位的次序存放在指定的緩沖區(qū)中。碼串按照高位到低位的次序存放在指定的緩沖區(qū)中。HTASCS PROCRETMOV CX , 4HTASCS ENDPHTASCS1: ROL DX , 1HTOASC PROC NEAR ROL DX , 1AND AL , 0FH ROL DX , 1ADD AL , 30H ROL DX , 1CMP AL , 39HMOV AL , DLJBE HTOASC1CALL HTOASCADD AL , 7MOV BX , ALHTOASC1: RETINC BXHT
5、OASC ENDPLOOP HTASCS1二、主程序與子程序間的參數(shù)傳遞二、主程序與子程序間的參數(shù)傳遞主程序在調(diào)用子程序時(shí),往往要向子程序傳遞一些參數(shù);同樣主程序在調(diào)用子程序時(shí),往往要向子程序傳遞一些參數(shù);同樣地,子程序運(yùn)行后夜經(jīng)常要把一些結(jié)果傳會(huì)給主程序。主程序地,子程序運(yùn)行后夜經(jīng)常要把一些結(jié)果傳會(huì)給主程序。主程序和子程序之間的這種信息傳遞稱為參數(shù)傳遞。和子程序之間的這種信息傳遞稱為參數(shù)傳遞。有多種參數(shù)傳遞的方法:有多種參數(shù)傳遞的方法:(1)寄存器傳遞法)寄存器傳遞法(2)約定內(nèi)存單元傳遞法)約定內(nèi)存單元傳遞法(3)堆棧傳遞法)堆棧傳遞法(4)其它方法)其它方法1.利用寄存器傳遞參數(shù)利用寄存
6、器傳遞參數(shù)利用寄存器傳遞參數(shù)就是把參數(shù)放在約定的寄存器中。這種方利用寄存器傳遞參數(shù)就是把參數(shù)放在約定的寄存器中。這種方法適用于傳遞參數(shù)較少的情況。法適用于傳遞參數(shù)較少的情況。例:寫一個(gè)大寫字母轉(zhuǎn)換為小寫字母的子程序例:寫一個(gè)大寫字母轉(zhuǎn)換為小寫字母的子程序;子程序名:子程序名:UPTOLW;功能:大寫字母轉(zhuǎn)換為小寫字母功能:大寫字母轉(zhuǎn)換為小寫字母;入口參數(shù):入口參數(shù):AL=字符的字符的ASCII碼碼;出口參數(shù):出口參數(shù):AL=字符的字符的ASCII碼碼;說明:如字符為大寫字母,則轉(zhuǎn)換為小寫,其它字符不變。說明:如字符為大寫字母,則轉(zhuǎn)換為小寫,其它字符不變。UPTOLW PROCPUSHF;保護(hù)各
7、標(biāo)志保護(hù)各標(biāo)志CMP AL , AJB UPTOLW1CMP AL , ZJA UPTOLW1ADD AL , 20HUPTOLW1:POPF;恢復(fù)各標(biāo)志恢復(fù)各標(biāo)志RETUPTOLW ENDP2.利用約定存儲(chǔ)單元傳遞參數(shù)利用約定存儲(chǔ)單元傳遞參數(shù)在傳遞參數(shù)較多的情況下,可利用約定的內(nèi)存變量來傳遞參數(shù)。在傳遞參數(shù)較多的情況下,可利用約定的內(nèi)存變量來傳遞參數(shù)。例:寫一個(gè)實(shí)現(xiàn)例:寫一個(gè)實(shí)現(xiàn)32位數(shù)相加的子程序位數(shù)相加的子程序;子程序名:子程序名:MADD;功能:功能:32位數(shù)相加位數(shù)相加;入口參數(shù):入口參數(shù):DATA1和和DATA2緩沖區(qū)中分別存放要相加的數(shù)緩沖區(qū)中分別存放要相加的數(shù);出口參數(shù):出口參
8、數(shù):DATA3緩沖區(qū)存放結(jié)果緩沖區(qū)存放結(jié)果;說明:說明:;(1)32位數(shù)據(jù)的存放次序采用位數(shù)據(jù)的存放次序采用“高高低低高高低低”原則原則;(2)可能產(chǎn)生的進(jìn)位放在)可能產(chǎn)生的進(jìn)位放在DATA3開始的第開始的第5字節(jié)中字節(jié)中MADD PROCPUSH AX;為什么會(huì)把為什么會(huì)把AX,CX,SI壓入棧?壓入棧?PUSH CXPUSH SIMOV CX , 2XOR SI , SI;CF也會(huì)被清也會(huì)被清0MADD1:MOV AX , WORD PTR DATA1SI ADC AX , WORD PTR DATA2SI MOV WORD PTR DATA3SI , AX INC SI INC SIPO
9、P SILOOP MADD1POP CXMOV AL , 0POP AXADC AL , 0RETMOV BYTE PTR DATA3 + 4 , AL MADD ENDP3.利用堆棧傳遞參數(shù)利用堆棧傳遞參數(shù)(1)如果利用堆棧傳遞入口參數(shù),)如果利用堆棧傳遞入口參數(shù),那么主程序在調(diào)用子程序那么主程序在調(diào)用子程序之前,把需要傳遞的參數(shù)依次壓入堆棧,子程序從堆棧中取入之前,把需要傳遞的參數(shù)依次壓入堆棧,子程序從堆棧中取入口參數(shù)口參數(shù);(2)如果使用堆棧傳遞出口參數(shù),那么)如果使用堆棧傳遞出口參數(shù),那么子程序返回前,把需子程序返回前,把需要返回的參數(shù)存入堆棧,主程序在堆棧中取出口參數(shù)要返回的參數(shù)存入
10、堆棧,主程序在堆棧中取出口參數(shù)。例:寫一個(gè)測量字符串長度的子程序,設(shè)字符串以例:寫一個(gè)測量字符串長度的子程序,設(shè)字符串以0為結(jié)束標(biāo)為結(jié)束標(biāo)志。志。;子程序名:子程序名:STRLEN;功能:測量字符串長度功能:測量字符串長度;入口參數(shù):字符串起始地址的段值和偏移放在堆棧中入口參數(shù):字符串起始地址的段值和偏移放在堆棧中;出口參數(shù):出口參數(shù):AX=字符串長度。字符串長度。STRLEN PROCPUSH BPMOV BP , SPPUSH DSPUSH SIMOV DS , BP + 6MOV SI , BP + 4MOV AL , 0 STRLEN1 : CMP AL , SIJZ STRLEN2I
11、NC SIJMP STRLEN1POP DS STRLEN2: MOV AX , SIPOP BPSUB AX , BP + 4RETPOP SI STRLEN ENDP主程序調(diào)用這個(gè)子程序的代碼片段如下:主程序調(diào)用這個(gè)子程序的代碼片段如下:MOV AX , SEG STRPUSH AXMOV AX , OFFSET STRPUSH AXCALL STRLENMOV LEN , AX當(dāng)然,除了上面提及的當(dāng)然,除了上面提及的3種方式外,種方式外,如果過程和調(diào)用程序在同一文件(同如果過程和調(diào)用程序在同一文件(同一程序塊中,則過程可直接訪問模塊一程序塊中,則過程可直接訪問模塊中的變量。中的變量。隨著
12、指令的豐富、子程序的引入,匯編語言的表達(dá)也越來越靈隨著指令的豐富、子程序的引入,匯編語言的表達(dá)也越來越靈活。為了方便地組織數(shù)據(jù),引入了活。為了方便地組織數(shù)據(jù),引入了結(jié)構(gòu)偽操作結(jié)構(gòu)偽操作STRUC。STRUC可以把不同類型的數(shù)據(jù)放在同一個(gè)結(jié)構(gòu)里,方便處理??梢园巡煌愋偷臄?shù)據(jù)放在同一個(gè)結(jié)構(gòu)里,方便處理。a). 結(jié)構(gòu)類型說明格式為:結(jié)構(gòu)類型說明格式為:structure_name STRUC;DB、DW、DD等偽操作等偽操作structure_name ENDS注意:注意:ENDS之前為結(jié)構(gòu)名,注意與段結(jié)束相區(qū)別之前為結(jié)構(gòu)名,注意與段結(jié)束相區(qū)別。例如:下列語句說明了一個(gè)名例如:下列語句說明了一個(gè)名
13、STUDENT的結(jié)構(gòu)類型:的結(jié)構(gòu)類型: STUDENT STRUCID DW ?SCORE DB 0NAME DB ABCDEFGHSTUDENT ENDS但是,定義一個(gè)結(jié)構(gòu)類型的時(shí)候不進(jìn)行任何存儲(chǔ)器分配,只有但是,定義一個(gè)結(jié)構(gòu)類型的時(shí)候不進(jìn)行任何存儲(chǔ)器分配,只有在定義結(jié)構(gòu)變量時(shí)才進(jìn)行存儲(chǔ)分配。在定義結(jié)構(gòu)變量時(shí)才進(jìn)行存儲(chǔ)分配。b). 結(jié)構(gòu)變量的定義結(jié)構(gòu)變量的定義格式是:格式是: 變量名變量名 結(jié)構(gòu)名結(jié)構(gòu)名 例:例:Lisi STUDENT ;三個(gè)字段重新賦值三個(gè)字段重新賦值Wangwu STUDENT ;字段字段SCORE仍用缺省仍用缺省值值Zhangsan STUDENT ;三個(gè)字段均用缺省
14、初值三個(gè)字段均用缺省初值Team STUDENT 50 DUP () ;定義定義50個(gè)結(jié)構(gòu)變量,初值不變個(gè)結(jié)構(gòu)變量,初值不變在定義結(jié)構(gòu)變量時(shí),如果某個(gè)字段有多值,就不能給該字段重在定義結(jié)構(gòu)變量時(shí),如果某個(gè)字段有多值,就不能給該字段重新賦初值(定義時(shí)存在新賦初值(定義時(shí)存在“DUP”, “ , , , ”等)。等)。c). 訪問方式訪問方式訪問方式:結(jié)構(gòu)變量名訪問方式:結(jié)構(gòu)變量名.結(jié)構(gòu)字段名結(jié)構(gòu)字段名該變量的地址實(shí)質(zhì)少年宮是結(jié)構(gòu)變量地址的偏移與相應(yīng)字段偏該變量的地址實(shí)質(zhì)少年宮是結(jié)構(gòu)變量地址的偏移與相應(yīng)字段偏移值之和。移值之和。例:例:Zhangsan.ID;訪問張三的學(xué)號,實(shí)際上是訪問張三的學(xué)號
15、,實(shí)際上是直接尋址直接尋址還可以把結(jié)構(gòu)變量地址的偏移先存入某個(gè)基址或變址寄存器,還可以把結(jié)構(gòu)變量地址的偏移先存入某個(gè)基址或變址寄存器,然后利用然后利用“寄存器名寄存器名”來代替結(jié)構(gòu)變量名。來代替結(jié)構(gòu)變量名。例如:例如:MOV BX , OFFSET ZhangsanMOV AL , BX.SCORE例:通過結(jié)構(gòu)類型,在主程序和子程序中傳輸信息。例:通過結(jié)構(gòu)類型,在主程序和子程序中傳輸信息。三、嵌套與遞歸子程序三、嵌套與遞歸子程序一個(gè)子程序可以作為調(diào)用程序去調(diào)用另外一個(gè)子程序,這種情一個(gè)子程序可以作為調(diào)用程序去調(diào)用另外一個(gè)子程序,這種情況稱為況稱為子程序的嵌套子程序的嵌套。嵌套的層數(shù)稱為嵌套的層
16、數(shù)稱為嵌套深度嵌套深度。深度為深度為2的嵌套的嵌套如果一個(gè)子程序直接調(diào)用它自身,這種調(diào)用稱為如果一個(gè)子程序直接調(diào)用它自身,這種調(diào)用稱為(直接)遞歸(直接)遞歸調(diào)用調(diào)用。具有遞歸調(diào)用的子程序就稱為遞歸子程序。具有遞歸調(diào)用的子程序就稱為遞歸子程序。遞歸是嵌套的特殊情況。遞歸是嵌套的特殊情況。遞歸子程序的設(shè)計(jì)要點(diǎn):遞歸子程序的設(shè)計(jì)要點(diǎn):(1)遞推性:逐級調(diào)用;)遞推性:逐級調(diào)用;(2)回歸性:逐層回歸;)回歸性:逐層回歸;(3)有窮性:終止條件;)有窮性:終止條件;這這3點(diǎn)為所有語言遞歸程序設(shè)計(jì)具有的共性。點(diǎn)為所有語言遞歸程序設(shè)計(jì)具有的共性。匯編語言設(shè)計(jì)遞歸程序時(shí)的個(gè)性在于:匯編語言設(shè)計(jì)遞歸程序時(shí)的
17、個(gè)性在于:(1)參數(shù)和中間結(jié)果一般存于堆棧中,但有時(shí)也可以存于寄)參數(shù)和中間結(jié)果一般存于堆棧中,但有時(shí)也可以存于寄存器中;存器中;(2)遞歸的深度受堆??臻g的限制。)遞歸的深度受堆??臻g的限制。例:子程序例:子程序FACT采用遞歸算法實(shí)現(xiàn)階乘。采用遞歸算法實(shí)現(xiàn)階乘。;子程序名:子程序名:FACT;功能:計(jì)算功能:計(jì)算n!;入口參數(shù)入口參數(shù): (AX)= n;出口參數(shù):出口參數(shù): (AX)= n!;說明:說明: (1)采用遞歸算法實(shí)現(xiàn)階乘;)采用遞歸算法實(shí)現(xiàn)階乘;;(2)n 不能超過不能超過8FACT(n) = n * FACT(n - 1) = n * (n - 1) * FACT(n- 2)
18、當(dāng)當(dāng)n=0時(shí),時(shí),F(xiàn)ACT(0) = 1.要點(diǎn)要點(diǎn):(1)遞推:只要遞推:只要n不為不為0,即推進(jìn)到,即推進(jìn)到FACT(n-1);(2)有窮:有窮:n=0時(shí)有確切解,即時(shí)有確切解,即FACT(0)=1(3)回歸:逐層返回回歸:逐層返回FACT(n-1)的解和的解和n(保存的中間參數(shù))(保存的中間參數(shù))FACT PROCPUSH DX;保存中間參數(shù)(最外層為原有參數(shù))保存中間參數(shù)(最外層為原有參數(shù))MOV DX , AXCMP AX , 0 ;判斷判斷n是否為是否為0?JZ DONE;如是,則終止推進(jìn)。(有窮)如是,則終止推進(jìn)。(有窮)DEC AX;否則,繼續(xù)推進(jìn)否則,繼續(xù)推進(jìn)CALL FACT
19、;推進(jìn)推進(jìn)MUL DX;中間結(jié)果后逐層返回中間結(jié)果后逐層返回: n * FACT(n-1)POP DX;得到中間參數(shù)(最外層為原有參數(shù))得到中間參數(shù)(最外層為原有參數(shù))RETDONE: MOV AX , 1 ;給出確定結(jié)果給出確定結(jié)果 0! = 1POP DX;得到中間參數(shù)得到中間參數(shù)RETFACT ENDP四、綜合示例四、綜合示例有有10個(gè)學(xué)生的成績分別為個(gè)學(xué)生的成績分別為76、6980。編制一個(gè)子程序分。編制一個(gè)子程序分別統(tǒng)計(jì)別統(tǒng)計(jì)6069分,分,7079分,分,8089分,分,9099分及分及100分的人分的人數(shù),分別存放到數(shù),分別存放到S6,S7,S8,S9,S10單元中。單元中。DSEG SEGMENTREC DW 76, 69,63,83,92,73,65,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國際文化交流項(xiàng)目志愿者聘用合同
- 2025版民宿民宿餐飲服務(wù)合同示范4篇
- 2025年度房地產(chǎn)公司股權(quán)轉(zhuǎn)讓與市場推廣合同
- 2025年度個(gè)人車位租賃服務(wù)合同范本2篇
- 2025年度沐足行業(yè)員工勞動(dòng)合同模板(含保密協(xié)議)4篇
- 林綿綿《韓娛離婚協(xié)議》2025年度網(wǎng)絡(luò)劇改編權(quán)轉(zhuǎn)讓合同8篇
- 二零二五年度個(gè)人現(xiàn)金借款合同標(biāo)準(zhǔn)版2篇
- 二零二五年度農(nóng)產(chǎn)品品牌授權(quán)使用合同8篇
- 二零二五年度農(nóng)家樂鄉(xiāng)村旅游扶貧項(xiàng)目合作合同4篇
- 二零二五年度文化旅游產(chǎn)業(yè)投資借款合同大全4篇
- 2022年中國電信維護(hù)崗位認(rèn)證動(dòng)力專業(yè)考試題庫大全-上(單選、多選題)
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 初中英語-Unit2 My dream job(writing)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 【公司利潤質(zhì)量研究國內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國地區(qū)碼
- 新疆2022年中考物理試卷及答案
- 地暖工程監(jiān)理實(shí)施細(xì)則
- 頂部板式吊耳計(jì)算HGT-20574-2018
評論
0/150
提交評論