第4章-3-循環(huán)-子程序上機(jī)過(guò)程、DOS中斷調(diào)課件_第1頁(yè)
第4章-3-循環(huán)-子程序上機(jī)過(guò)程、DOS中斷調(diào)課件_第2頁(yè)
第4章-3-循環(huán)-子程序上機(jī)過(guò)程、DOS中斷調(diào)課件_第3頁(yè)
第4章-3-循環(huán)-子程序上機(jī)過(guò)程、DOS中斷調(diào)課件_第4頁(yè)
第4章-3-循環(huán)-子程序上機(jī)過(guò)程、DOS中斷調(diào)課件_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

4.3實(shí)地址方式下的匯編語(yǔ)言程序設(shè)計(jì)一般將公用性、重復(fù)性或有相對(duì)獨(dú)立性的程序應(yīng)設(shè)計(jì)成子程序子程序設(shè)計(jì)

結(jié)構(gòu): …… …… …… 程序部分 RETNAME ENDP必須RET結(jié)束NAME PROC NEAR (FAR)過(guò)程名過(guò)程類(lèi)型 PUSH AX PUSH BX主程序現(xiàn)場(chǎng)保護(hù) POP BX POP AX4.3實(shí)地址方式下的匯編語(yǔ)言程序設(shè)計(jì)子程序設(shè)計(jì)

調(diào)用與返回:

調(diào)用: CALL 過(guò)程名(子程序地址)功能: (1)下條指令的地址壓入堆棧。 主子同段(段內(nèi)調(diào)用): 只將IP的值壓入堆棧 段間調(diào)用: 先將CS的值壓入堆棧,再將IP的值壓入堆棧。 (2)轉(zhuǎn)入子程序運(yùn)行子程序的地址送入CS:IP4.3實(shí)地址方式下的匯編語(yǔ)言程序設(shè)計(jì)子程序設(shè)計(jì)

調(diào)用與返回:

返回指令 RET子程序的最后一條指令,用于返回CALL指令的下條指令繼續(xù)執(zhí)行。無(wú)論對(duì)那一種調(diào)用方式其返回指令都相同。功能: (1)段內(nèi)調(diào)用只將當(dāng)前[SP]彈進(jìn)IP,從而使程序正常返回。 (2)對(duì)于段間調(diào)用則先彈IP,再?gòu)桟S。4.3實(shí)地址方式下的匯編語(yǔ)言程序設(shè)計(jì)子程序設(shè)計(jì)

子程序的設(shè)計(jì)與應(yīng)用應(yīng)注意的問(wèn)題

(1)現(xiàn)場(chǎng)的保護(hù)

PUSH AX PUSH BX PUSH SI

…………

………… POP SI POP BX POP AX RET4.3實(shí)地址方式下的匯編語(yǔ)言程序設(shè)計(jì)子程序設(shè)計(jì)

子程序的設(shè)計(jì)與應(yīng)用應(yīng)注意的問(wèn)題

(2)參數(shù)的傳遞主程序調(diào)用子程序必須傳遞入口參數(shù),子程序返回必須傳遞出口參數(shù)。常用的方法有:寄存器:適用于參數(shù)少的情況。約定單元:適用于參數(shù)多的情況。要事先建立參數(shù)數(shù)據(jù)緩沖區(qū)。 堆棧:適用于參數(shù)較多,且子程序嵌套,遞歸調(diào)用的情況

;子程序的入口參數(shù):;SI=數(shù)據(jù)區(qū)的首地址,CX=數(shù)據(jù)個(gè)數(shù);出口參數(shù):AL為最大的數(shù);用到的寄存器:AX,CX,SI4.3實(shí)地址方式下的匯編語(yǔ)言程序設(shè)計(jì)2組8位無(wú)符號(hào)數(shù),每組中有N個(gè)無(wú)符號(hào)數(shù),分別找出每一組中的最大數(shù),并將最大數(shù)存放在每組數(shù)的開(kāi)紿地址。

CODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA SI,BUF1;入口參數(shù) INC SI ;指向數(shù)據(jù)開(kāi)始

MOV CX,N1 ;入口參數(shù)

CALL SUBROT MOV BUF1,AL LEA SI,BUF2 INC SI ;指向數(shù)據(jù)開(kāi)始 MOV CX,N2 CALL SUBROT MOV BUF2,AL

MOV AH,04CH INT 21HSUBROTPROC

PUSH CX ;子程序開(kāi)始

PUSH SI DEC CX ; MOV AL,[SI] ;LOOP1:INC SI ;

CMP AL,[SI] JA NEXT MOV AL,[SI]NEXT:LOOP LOOP1 POP SI POP CX RETSUBROT ENDPDATA SEGMENT BUF1 DB?,12H,45H……… N1=$-BUF1 BUF2 DB?,65H,ACH…… N2=$-BUF2DATA ENDSCODE ENDS END START4.4匯編程序及上機(jī)過(guò)程匯編程序要建立的文件:EDIT.EXEMASM.EXELIKE.EXEDEBUG.COMEDIT是編輯程序,MASM為匯編程序,LINK為連接程序,EXE2BIN為轉(zhuǎn)換成COM文件所需要的程序4.4匯編程序及上機(jī)過(guò)程1、建立ASM文件用記事本或EDIT編輯源程序文件,文件的擴(kuò)展名一般應(yīng)為.ASM。如X.ASM2、用MASM對(duì)源文件進(jìn)行匯編,C:\a>masmxMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilename[x.OBJ]:Sourcelisting[NUL.LST]:Cross-reference[NUL.CRF]:x.ASM(9):errorA2042:Constantexpected 0WarningErrors(警告錯(cuò)誤) 1SevereErrors(嚴(yán)重錯(cuò)誤)提示有錯(cuò)誤,修改源程序后重新匯編,直至通過(guò)并產(chǎn)生.OBJ文件為止。4.4匯編程序及上機(jī)過(guò)程3、用LINK將.OBJ文件連接成可執(zhí)行的.EXE文件。4、程序的執(zhí)行 狀態(tài)下運(yùn)行X.EXE文件。5、若不能達(dá)到預(yù)期結(jié)果。用DEBUG檢查程序。找到邏輯錯(cuò)誤,再用文字編輯工具修改、匯編、連接,直到達(dá)到預(yù)期目的。4.5DOS及BIOS功能調(diào)用DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用

BIOS:最底層,硬件系統(tǒng)管理,中斷類(lèi)型號(hào)8~1FH。BIOSDOS應(yīng)用程序軟件結(jié)構(gòu): DOS:BIOS之上的系統(tǒng)管理,硬件和軟件更完整管理,特別是磁盤(pán)文件的管理。中斷類(lèi)型號(hào)20H~2FH

。

DOS和BIOS由幾十個(gè)獨(dú)立的中斷服務(wù)程序組成,為匯編語(yǔ)言程序設(shè)計(jì)提供了方便,可以完成I/O設(shè)備管理,內(nèi)存管理,文件管理等功能,在匯編語(yǔ)言中可用軟中斷指令調(diào)用它們。

4.5DOS及BIOS功能調(diào)用DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用

(1)MOV REG,XX ;傳送入口參數(shù)到指定寄存器中 ;(部分無(wú) 入口參數(shù))

(2)MOV AH,功能號(hào) ;功能號(hào)送入AH寄存器中(3)INT 21H ;調(diào)用

DOS調(diào)用方法:(4)返回信息:CF=1表示有錯(cuò)誤發(fā)生,AX=返回錯(cuò)誤代碼CF=0表示調(diào)用成功,AX=返回參數(shù)4.5DOS及BIOS功能調(diào)用

1、鍵盤(pán)單字符輸入(1號(hào)) MOV AH,1 INT 21H

功能:等待從鍵盤(pán)輸入一個(gè)字符。 返回:(AL)=ASCII碼,并回顯在顯示器上。常用DOS功能調(diào)用: 2、鍵盤(pán)輸入字符串(0AH號(hào)) MOV DX,OFFSETBUF ;DS:DX為鍵盤(pán)緩沖區(qū) MOV AH,0AH INT 21H

功能:等待從鍵盤(pán)輸入一串字符,回車(chē)結(jié)束。字符串存入鍵盤(pán)緩沖區(qū)。 鍵盤(pán)緩沖區(qū)定義:

BUF DB 81 ;緩沖區(qū)的大小

DB ? ;實(shí)際輸入的字符個(gè)數(shù)不含0DH DB 80 DUP(?) ;字符串存放區(qū)

DEBUG演示4.5DOS及BIOS功能調(diào)用 3、輸出單字符(2號(hào)) MOV DL,‘A’ MOV AH,02 INT 21H

功能:將DL中字符從屏幕上輸出。 返回:無(wú)返回

DEBUG演示常用DOS功能調(diào)用: 4、輸出字符串(09號(hào)) MOV DX,OFFSET BUF MOV AH,09 INT 21H

功能:BUF中以’$’為結(jié)束標(biāo)志的字符串顯示在屏幕上。當(dāng)無(wú)結(jié)束標(biāo)志時(shí)會(huì)出現(xiàn)亂碼。

DATA SEGMENT ASCS DB ’808X86CPU$‘ DATA ENDS

DEBUG演示4.5DOS及BIOS功能調(diào)用 5、控制臺(tái)輸入/輸出單字符(06) MOV AH,06 MOV DL,0FFH ;當(dāng)為0FFH時(shí)從鍵盤(pán)讀一字符到AL INT 21H ;否則將DL中的字符送顯示器

這一功能調(diào)用給輸入輸出有更方便應(yīng)用。

常用DOS功能調(diào)用: 6、無(wú)回顯控制臺(tái)輸入單字符(08) MOV AH,08 INT 21H 功能:鍵盤(pán)讀入一個(gè)字符不在顯示器上顯示,常用于口令的和控制鍵的輸入。 7、1、返回操作系統(tǒng)(4CH) MOV AH,4CH INT 21H ;將控制權(quán)交給操作系統(tǒng)。

4.5DOS及BIOS功能調(diào)用常用BIOS功能調(diào)用:(1)MOV AH,功能號(hào) ;功能號(hào)送入AH寄存器中(2)INT XH ;中斷調(diào)用

屏幕顯示模式中斷調(diào)用INT10H例如:功能:讀取當(dāng)前顯示模式號(hào) MOV AX,0FH INT 10H ;中斷調(diào)用功能:設(shè)置屏幕顯示模式

MOV AX,0006H ;功能號(hào)送AH,AL中為模式號(hào)

INT 10H ;中斷調(diào)用

P222有關(guān)部分自閱。

4.5DOS及BIOS功能調(diào)用DATA SEGMENT KEYBUFDB12,?,11DUP(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA DX,KEYBUF MOV AH,0AH INT 21H ;輸入一串字符

LEA SI,KEYBUF ;字串結(jié)束地址 MOV AL,[SI+1] MOV AH,0 ADD SI,AX MOV [SI],‘$’ ;9號(hào)功能標(biāo)志

LEA DX,KEYBUF+2 MOV AH,09 INT 21H ;輸出一串字符EXIT:MOV AH,4CH ;返回DOS

INT 21HCODE ENDS END START ;程序匯編結(jié)束例1,從鍵盤(pán)輸入字符串“PENTIUMCPU”并顯顯在屏上。4.5DOS及BIOS功能調(diào)用程序設(shè)計(jì)舉例例2:將16位二進(jìn)制數(shù)轉(zhuǎn)換成用ASCII碼表示的5位十進(jìn)制數(shù)。CX-1=0?終止起始AL=ASCII碼AX=DX:AX/[SI]DX=余數(shù)DX:AX=被除數(shù)YNADDSI,2INCDI[DI]=AL顯示結(jié)果初如化DI=ASDECSI=PWTABCX=5算法1:用除法指令完成,被除數(shù)送DX:AX與PWTAB的數(shù)10000、1000、100、10、1相除,利用循環(huán)程序分別可得到對(duì)應(yīng)位的十進(jìn)制數(shù)的ASCII碼。調(diào)用DOS的9號(hào)功能顯示這個(gè)十進(jìn)制數(shù)。流程圖如圖所示。DATA SEGMENT BINDW358CH ASDECDB5DUP(?),’$’PWTABDW10000,1000,100,10,1DATAENDS顯示調(diào)用專(zhuān)用DATA SEGMENT BINDW358CH ASDECDB5DUP(?),’$’PWTAB DW10000,1000,100,10,1DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATA MOVDS,AX MOVDI,OFFSETASDEC MOVSI,OFFSETPWTAB MOVCX,5 MOVDX,BINLOP1: MOVAX,DX MOVDX,0 DIVWORDPTR[SI] ADDAL,30H MOV[DI],AL INCSI INCSI INCDI LOOPLOP1 MOVAH,09 LEADX,ASDEC INT21H MOVAH,4CH INT21HCODE ENDS ENDSTARTCX-1=0?終止起始AL=ASCII碼AX=DX:AX/[SI]DX=余數(shù)DX:AX=被除數(shù)YNADDSI,2INCDI[DI]=AL顯示結(jié)果初如化DI=ASDECSI=PWTABCX=5匯編連接EXE13

例3:編制完成兩個(gè)4字節(jié)的BCD碼(8位十進(jìn)制數(shù))的加法運(yùn)算程序。算法:將4字節(jié)的BCD碼分為4個(gè)單字節(jié)數(shù)相加,從低字節(jié)開(kāi)始,進(jìn)行4次循環(huán)操作,注意BCD修正。程序:CODE SEGMENT ASSUMECS:CODE,DS:DATAMULADD:MOVAX,DATA MOVDS,AX LEASI,BCD1 LEABX,BCD2 LEADI,SUM MOVCL,4 CLCAGAIN:MOVAL,[SI] ADCAL,[BX] DAA MOV[DI],AL INCSI INCBX INCDI DECCL JNZAGAIN MOVAH,4CH INT21HCODEENDS ENDMULADD

DATA SEGMENT B

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論