第4章-3-循環-子程序上機過程、DOS中斷調課件_第1頁
第4章-3-循環-子程序上機過程、DOS中斷調課件_第2頁
第4章-3-循環-子程序上機過程、DOS中斷調課件_第3頁
第4章-3-循環-子程序上機過程、DOS中斷調課件_第4頁
第4章-3-循環-子程序上機過程、DOS中斷調課件_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

4.3實地址方式下的匯編語言程序設計一般將公用性、重復性或有相對獨立性的程序應設計成子程序子程序設計

結構: …… …… …… 程序部分 RETNAME ENDP必須RET結束NAME PROC NEAR (FAR)過程名過程類型 PUSH AX PUSH BX主程序現場保護 POP BX POP AX4.3實地址方式下的匯編語言程序設計子程序設計

調用與返回:

調用: CALL 過程名(子程序地址)功能: (1)下條指令的地址壓入堆棧。 主子同段(段內調用): 只將IP的值壓入堆棧 段間調用: 先將CS的值壓入堆棧,再將IP的值壓入堆棧。 (2)轉入子程序運行子程序的地址送入CS:IP4.3實地址方式下的匯編語言程序設計子程序設計

調用與返回:

返回指令 RET子程序的最后一條指令,用于返回CALL指令的下條指令繼續執行。無論對那一種調用方式其返回指令都相同。功能: (1)段內調用只將當前[SP]彈進IP,從而使程序正常返回。 (2)對于段間調用則先彈IP,再彈CS。4.3實地址方式下的匯編語言程序設計子程序設計

子程序的設計與應用應注意的問題

(1)現場的保護

PUSH AX PUSH BX PUSH SI

…………

………… POP SI POP BX POP AX RET4.3實地址方式下的匯編語言程序設計子程序設計

子程序的設計與應用應注意的問題

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

;子程序的入口參數:;SI=數據區的首地址,CX=數據個數;出口參數:AL為最大的數;用到的寄存器:AX,CX,SI4.3實地址方式下的匯編語言程序設計2組8位無符號數,每組中有N個無符號數,分別找出每一組中的最大數,并將最大數存放在每組數的開紿地址。

CODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA SI,BUF1;入口參數 INC SI ;指向數據開始

MOV CX,N1 ;入口參數

CALL SUBROT MOV BUF1,AL LEA SI,BUF2 INC SI ;指向數據開始 MOV CX,N2 CALL SUBROT MOV BUF2,AL

MOV AH,04CH INT 21HSUBROTPROC

PUSH CX ;子程序開始

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匯編程序及上機過程匯編程序要建立的文件:EDIT.EXEMASM.EXELIKE.EXEDEBUG.COMEDIT是編輯程序,MASM為匯編程序,LINK為連接程序,EXE2BIN為轉換成COM文件所需要的程序4.4匯編程序及上機過程1、建立ASM文件用記事本或EDIT編輯源程序文件,文件的擴展名一般應為.ASM。如X.ASM2、用MASM對源文件進行匯編,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(警告錯誤) 1SevereErrors(嚴重錯誤)提示有錯誤,修改源程序后重新匯編,直至通過并產生.OBJ文件為止。4.4匯編程序及上機過程3、用LINK將.OBJ文件連接成可執行的.EXE文件。4、程序的執行 狀態下運行X.EXE文件。5、若不能達到預期結果。用DEBUG檢查程序。找到邏輯錯誤,再用文字編輯工具修改、匯編、連接,直到達到預期目的。4.5DOS及BIOS功能調用DOS系統功能調用和BIOS中斷調用

BIOS:最底層,硬件系統管理,中斷類型號8~1FH。BIOSDOS應用程序軟件結構: DOS:BIOS之上的系統管理,硬件和軟件更完整管理,特別是磁盤文件的管理。中斷類型號20H~2FH

DOS和BIOS由幾十個獨立的中斷服務程序組成,為匯編語言程序設計提供了方便,可以完成I/O設備管理,內存管理,文件管理等功能,在匯編語言中可用軟中斷指令調用它們。

4.5DOS及BIOS功能調用DOS系統功能調用和BIOS中斷調用

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

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

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

1、鍵盤單字符輸入(1號) MOV AH,1 INT 21H

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

功能:等待從鍵盤輸入一串字符,回車結束。字符串存入鍵盤緩沖區。 鍵盤緩沖區定義:

BUF DB 81 ;緩沖區的大小

DB ? ;實際輸入的字符個數不含0DH DB 80 DUP(?) ;字符串存放區

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

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

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

功能:BUF中以’$’為結束標志的字符串顯示在屏幕上。當無結束標志時會出現亂碼。

DATA SEGMENT ASCS DB ’808X86CPU$‘ DATA ENDS

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

這一功能調用給輸入輸出有更方便應用。

常用DOS功能調用: 6、無回顯控制臺輸入單字符(08) MOV AH,08 INT 21H 功能:鍵盤讀入一個字符不在顯示器上顯示,常用于口令的和控制鍵的輸入。 7、1、返回操作系統(4CH) MOV AH,4CH INT 21H ;將控制權交給操作系統。

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

屏幕顯示模式中斷調用INT10H例如:功能:讀取當前顯示模式號 MOV AX,0FH INT 10H ;中斷調用功能:設置屏幕顯示模式

MOV AX,0006H ;功能號送AH,AL中為模式號

INT 10H ;中斷調用

P222有關部分自閱。

4.5DOS及BIOS功能調用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 ;字串結束地址 MOV AL,[SI+1] MOV AH,0 ADD SI,AX MOV [SI],‘$’ ;9號功能標志

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

INT 21HCODE ENDS END START ;程序匯編結束例1,從鍵盤輸入字符串“PENTIUMCPU”并顯顯在屏上。4.5DOS及BIOS功能調用程序設計舉例例2:將16位二進制數轉換成用ASCII碼表示的5位十進制數。CX-1=0?終止起始AL=ASCII碼AX=DX:AX/[SI]DX=余數DX:AX=被除數YNADDSI,2INCDI[DI]=AL顯示結果初如化DI=ASDECSI=PWTABCX=5算法1:用除法指令完成,被除數送DX:AX與PWTAB的數10000、1000、100、10、1相除,利用循環程序分別可得到對應位的十進制數的ASCII碼。調用DOS的9號功能顯示這個十進制數。流程圖如圖所示。DATA SEGMENT BINDW358CH ASDECDB5DUP(?),’$’PWTABDW10000,1000,100,10,1DATAENDS顯示調用專用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=余數DX:AX=被除數YNADDSI,2INCDI[DI]=AL顯示結果初如化DI=ASDECSI=PWTABCX=5匯編連接EXE13

例3:編制完成兩個4字節的BCD碼(8位十進制數)的加法運算程序。算法:將4字節的BCD碼分為4個單字節數相加,從低字節開始,進行4次循環操作,注意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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論