




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五節(jié)BIOS和DOS中斷功能調用(教材舊P238、新P239)
一、概述
1.BIOS和DOS中斷子程層次特點2.中斷類型分類3.調用方法二、BIOS功能調用1.設置顯示方式(10H類型,00H功能)2.置光標位置(10H類型,02H功能)3.清屏、清窗口(10H類型,06H或07H功能)三、
DOS系統(tǒng)功能調用(21H類型中斷調用)1.顯示單字符(02H功能)2.顯示字符串(09H功能)3.單字符輸入(01H、07H、08H功能)4.字符串輸入(0AH功能)5.檢測鍵盤狀態(tài)(0BH功能)6.保存中斷向量(35H功能)(第六章介紹)7.設置中斷向量(25H功能)1第五節(jié)BIOS和DOS中斷功能調用1第五節(jié)BIOS和DOS中斷功能調用
一、概述
二、BIOS功能調用三、
DOS系統(tǒng)功能調用(21H類型中斷調用)2第五節(jié)BIOS和DOS中斷功能調用2一、概述1.BIOS和DOS中斷子程層次特點2.中斷類型分類3.調用方法3一、概述31.BIOS和DOS中斷子程層次特點用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令DOS系統(tǒng)層次結構41.BIOS和DOS中斷子程層次特點用戶程序磁盤管理模塊(D
層次特點:ROMBIOS中的中斷子程使用IN/OUT指令直接控制外設,實現(xiàn)與外設之間的輸入/輸出操作,以軟件形式向其上層提供服務。IO.SYS中的中斷子程(稱基本輸入/輸出BIOS模塊)
調用ROMBIOS的基本I/O功能,向MSDOS.SYS提供設備驅動服務。用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令5層次特點:用戶程序磁盤管理模塊(DOS內核)基本輸入
MSDOS.SYS中的中斷子程(稱DOS內核模塊)調用IO.SYS,實現(xiàn)對外設的控制。與標準外設有兩層隔離:IO.SYS和ROMBIOS。其中:21H類型的中斷子程提供了豐富的系統(tǒng)服務,稱21類型的中斷調用為DOS系統(tǒng)(功能)調用。用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令6MSDOS.SYS中的中斷子程用戶程序磁盤管理模塊(DO用戶編程原則①盡可能使用DOS的系統(tǒng)功能調用,提高程序可移植性。②在DOS功能不能實現(xiàn)情況下,考慮用BIOS功能調用。③在DOS和BIOS的中斷子程不能解決問題時,使用IN/OUT指令直接控制硬件。用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令7用戶編程原則用戶程序磁盤管理模塊(DOS內核)基本輸入/輸2.中斷類型分類向量表中的中斷類型分為七類:①處理CPU特殊操作(除0、溢出)的00H、04H類型。②
為DEBUG調試程序設置的單步(01H)、斷點(03H)類型。③
處理CPU的NMI引腳信號的02H類型。非屏蔽硬中斷子程④
處理CPU的INTR引腳信號的08~0FH類型。可屏蔽類型硬中斷子程⑤
用INT指令調用的中斷子程
BIOS功能調用(如10~1AH)DOS功能調用(如21H)NMIINTR808882.中斷類型分類NMIINTR8⑥
保留類型為DOS系統(tǒng)保留
(1)指現(xiàn)在未用到,以后系統(tǒng)可能會用到。
(2)已用到,但不向用戶公開。為用戶保留
(1)被系統(tǒng)子程嵌套調用了的類型(如1BH、1CH)。使用戶在系統(tǒng)功能基礎上擴充功能。
(2)系統(tǒng)未占用類型(如60H~67H)。⑦非中斷向量類型對應向量表中的4個單元存放的不是中斷向量。(如1DH、1EH、1FH、41H、46H、22H)通常是一些參數(shù)表的地址信息.9⑥保留類型9
中斷向量分配表10中斷向量分配表10中斷向量分配表(續(xù))11中斷向量分配表(續(xù))11中斷向量分配表(續(xù))12中斷向量分配表(續(xù))123.調用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令INTN分析、應用出口參數(shù)133.調用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令IN例1單字符顯示功能調用MOVDL,‘A’;設置入口參數(shù)MOVAH,02H;設置功能號INT21H;執(zhí)行中斷調用
例2單字符輸入功能調用MOVAH,01H;設置功能號
INT21H;執(zhí)行中斷調用CMPAL,0DH;分析、應用出口參數(shù)JZexit、、、14例1單字符顯示功能調用14二、BIOS功能調用基本輸入/輸出模塊BIOS:實現(xiàn)對輸入/輸出設備的控制,內含0–1CH等類型中斷子程,包括顯示器、磁盤、鍵盤、打印機等標準外設的驅動程序。(參看中斷類型分配表)
BIOS功能調用指對BIOS模塊中的中斷子程的調用。15二、BIOS功能調用15有關顯示器①顯示器通過顯卡(顯示適配器)連接到計算機上。②單色顯示器只能顯示黑白兩色。彩色顯示器能顯示多種顏色。16有關顯示器16③屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。640KBRAM基本內存0000:00000040:00000050:00000070:0000
A000:0000B000:0000
C800:0000F600:0000FE00:0000FE00:1FFF顯示緩存區(qū)(顯存)硬盤驅動器控制ROM32KBROMBASIC8KBROMBIOSIO.SYS模塊COMMAND.COM常駐模塊MSDOS.SYS模塊用戶程序空間COMMAND.COM暫駐模塊256KBROMDOS工作區(qū)ROMBIOS工作區(qū)128KBRAM保留區(qū)1KB中斷向量表17③屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。64④顯示器有兩種顯示方式:
圖形方式:將屏幕劃分為m×n的點陣,在每個點的位置顯示象素,一個點是一個象素。文本方式將屏幕劃分為若干行和列,在每個網(wǎng)格位置上顯示象素,一個字符是一個象素。18④顯示器有兩種顯示方式:圖形方式:文本方式18文本方式將屏幕劃分為m列和n行(m×n),在每個網(wǎng)格位置上顯示象素,一個字符是一個象素。80×25文本方式A~~~~~~~~~~~~~~~~0列0行79列24行BC19文本方式80×25文本方式A~~~~~~~~~~~~~~~~~~~640×480圖形方式640點480點圖形方式:將屏幕劃分為m×n的點陣,在每個點的位置顯示象素,一個點是一個象素。20~~~~640×480圖形方式640點480點圖形方式:在文本方式下,對應屏幕上的每個字符,在顯示緩沖區(qū)中占用兩個單元:一個存放ASCII碼,一個存放顯示屬性。41H07H42H07H61H70H62H70H、、、顯示緩沖區(qū)(顯存)字符A,黑底白字字符B,黑底白字字符a,白底黑字字符b,白底黑字21在文本方式下,41H07H42H07H61H70H62H70例10000111B或87H表示黑底白字,閃爍
01110000B或70H表示白底黑字,不閃爍16種0000黑1000灰
0010綠1010淺綠0100紅1100淺紅0111灰白1111白BLRGBIRGB閃爍背景前景765432108種000黑010綠
100紅111白0不閃爍1閃爍屬性字節(jié)的含義:2216種BLRGBIRGB閃爍背景前景76543210屬性字節(jié)
據(jù)顯存大小,可存儲若干頁的字符象素。
例16KB顯存能存儲:80×25方式,4頁(0~3),80×25×2×4=1600040×25方式,8頁(0~7),40×25×2×8=1600023據(jù)顯存大小,可存儲若干頁的字符象素。231.設置顯示方式入口參數(shù)AL=顯示方式值
0040×25黑白文本方式
0140×25彩色文本方式
0280×25黑白文本方式
0380×25彩色文本方式
04320×320彩色圖形方式功能號
AH=00H類型號
10H出口參數(shù)無實現(xiàn)功能將顯示方式設置為指定形式例將顯示方式設置為80×25彩色文本方式MOVAL,03HMOV
AH,00
INT10H241.設置顯示方式入口參數(shù)AL=顯示方式值例2.
清屏、清窗口功能入口參數(shù)AL=0CH=窗口左上角行號CL=窗口左上角列號DH=窗口右下角行號DL=窗口右下角列號BH=窗口屬性功能號
AH=06H或AH=07H類型號
10H出口參數(shù)無實現(xiàn)功能按給定屬性清除指定的窗口內容252.清屏、清窗口功能入口參數(shù)AL=025例清除屏幕顯示,將其屬性置為反白(白底黑字)顯示。MOVAL,0;清屏功能MOVBH,70H;白底黑字MOVCH,0;左上角行號MOVCL,0;左上角列號MOVDH,24;右下角行號MOVDL,79;右下角列號MOVAH,6;功能號INT10H;中斷調用26例清除屏幕顯示,將其屬性置為反白(白底黑字)顯示。23.置光標位置光標控制開始顯示的位置,計算機有專門的硬件控制光標的顯示大小、位置。
光標只在文本方式中出現(xiàn),在圖形方式下光標消失。~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行273.置光標位置~~~~~~~~~~~~~~~~0列0行79置光標位置入口參數(shù)DH=行號DL=列號BH=頁號
功能號
AH=02H
類型號
10H
出口參數(shù)無
實現(xiàn)功能將光標設置在指定的位置28置光標位置28例將光標設置在2行5列的位置MOVDH,2MOVDL,5MOVBH,0MOVAH,2INT10H~~~~~~~~~~~~~~~~0列0行79列24行5列1列1行2行29例將光標設置在2行5列的位置~~~~~~~~~~~~三、DOS系統(tǒng)功能調用(21H類型中斷調用)1.顯示單字符(02H功能)2.顯示字符串(09H功能)3.單字符輸入(01H、07H、08H功能)4.字符串輸入(0AH功能)5.檢測鍵盤狀態(tài)(0BH功能)6.保存中斷向量(35H功能)(第六章介紹)7.設置中斷向量(25H功能)30三、DOS系統(tǒng)功能調用(21H類型中斷調用)301.顯示單字符(02H功能)
入口參數(shù)DL=要顯示字符的ASCII碼功能號
AH=02H類型號
INT21H出口參數(shù)無實現(xiàn)功能顯示指定字符,光標隨動。例顯示字符AMOVDL,‘A’MOVAH,02HINT21H311.顯示單字符(02H功能)例例使光標回到下一行的行首。MOVDL,0DH
;顯示回車符MOVAH,02HINT21HMOVDL,0AH
;顯示換行符MOVAH,02HINT21H~~~~~~~~~~~~~~~~HelloWorld32例使光標回到下一行的行首。~~~~~~~~~~~~~2.顯示字符串(09H功能)入口參數(shù)①定義要顯示的字符串,
字符串尾應為’$’,作為結束顯示的標志。②DS:DX=字符串的首地址功能號
AH=09H類型號
21H出口參數(shù)無實現(xiàn)功能顯示字符串,遇’$’停止顯示,光標隨動。332.顯示字符串(09H功能)33例編程顯示字符串’TsinghuaUniversity’dataSEGMENT
;定義顯示的子符串striDB‘TsinghuaUniversity’,‘$’dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data
;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,stri
MOVAH,09H;調顯示功能
INT21HMOVAH,4CH;返回DOS
INT21HcodeENDS
ENDstart34例編程顯示字符串’TsinghuaUnive有關鍵盤①鍵盤通過鍵盤接口電路與計算機連接。②鍵盤上的鍵有三種類型:字符鍵A~Z,0~9等功能鍵F1~F12,PageUp等組合控制鍵Shift,Ctrl,Alt等③
鍵盤上的每個鍵都有一個掃描碼。◢◢據(jù)掃描碼可確定操作的是哪個鍵、是按下鍵還是釋放鍵;◢◢掃描碼用一個字節(jié)表示。低7位是掃描碼的數(shù)字編碼,與鍵盤上的鍵一一對應;最高位D7位表示鍵的操作狀態(tài):當按下鍵時,D7=0;當釋放鍵時,D7=135有關鍵盤③鍵盤上的每個鍵都有一個掃描碼。35⑤
鍵盤中斷子程功能(09H類型中斷子程)
◢從鍵盤接口讀取操作鍵的掃描碼;
◢將掃描碼轉換成字符碼;大部分鍵的字符碼為ASCII碼,無ASCII碼鍵(如組合鍵Shift、Ctrl等)的字符碼為0。◢將鍵的掃描碼、字符碼存放在鍵盤緩沖區(qū),供其它有關鍵盤的中斷子程應用。④鍵盤接口對按下鍵和釋放鍵均向計算機發(fā)出中斷申請,如果中斷響應條件滿足,CPU轉去執(zhí)行鍵盤中斷子程。
鍵盤中斷子程類型號為09H。36⑤鍵盤中斷子程功能(09H類型中斷子程)④鍵盤接口對按3.單字符輸入(01H、07H、08H功能)①入口參數(shù)無
功能號
AH=01H
類型號
21H
出口參數(shù)AL=鍵入字符的ASCII碼
實現(xiàn)功能
等待從鍵盤輸入一個字符,并在屏幕上回顯,光標移動,檢測Ctrl-Break鍵373.單字符輸入(01H、07H、08H功能)37例利用鍵盤輸入的字符產(chǎn)生分支:MOVAH,1;等待從鍵盤輸入INT21H
CMPAL,‘Y’
;是’Y’?JZyes
CMPAL,‘y’
;是’y’?
JZyesno:......JMPexityes:......exit:...38例利用鍵盤輸入的字符產(chǎn)生分支:38例在中斷向量表中查找從鍵盤輸入的字符,并將其個數(shù)用二進制形式顯示出來。(scanskey.asm)codeSEGMENT;代碼段開始ASSUMECS:codebegin:MOVAX,0000H;設置查找首地址MOVDS,AXMOVSI,0000HMOVCX,0400H;設置查找長度MOVBX,0;計算值初值
MOVAH,01H;從鍵盤輸入
INT21H;輸入關鍵字
MOVDL,AL;保存在DL中next:LODSB;從串取CMPAL,DL;與關鍵字比較JNZpoint
INCBX;計算值加1point:LOOPnext;查找結束?CALLdisplay;調用顯示子程MOVAH,4CH;調用4CH功能INT21H;返回DOS;用二進制顯示BX內容子程displayPROCMOVCX,16;顯示位數(shù)rotate:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,2HINT21HLOOProtateRET;子程返回displayENDPcodeENDS;代碼段結束ENDbegin39例在中斷向量表中查找從鍵盤輸入的字符,co②入口參數(shù)無功能號
AH=07H類型號
21H出口參數(shù)AL=鍵入字符的ASCII碼實現(xiàn)功能
等待從鍵盤輸入一個字符,不在屏幕上回顯,不檢測Ctrl-Break鍵40②入口參數(shù)無40例用不帶回顯功能輸入密碼時:input:MOVAH,07H
;等待從鍵盤輸入
INT21HMOV[DI],AL;存入緩沖區(qū)
CMPAL,0DH;是回車符?JNZinput;不是,繼續(xù)輸入check:、、、、、、41例用不帶回顯功能輸入密碼時:414.字符串輸入(0AH功能)
入口參數(shù)DS:DX=緩沖區(qū)的首地址(DS:DX)=限制最多輸入的字符數(shù)
功能號
AH=0AH
類型號
21H
出口參數(shù)(DS:DX+1)=實際鍵入的字符(不含回車符)從(DS:DX+2)開始順序存放鍵入的字符串,回車符0DH為串尾最后一字符。
實現(xiàn)功能等待從鍵盤輸入字符串,并存入設定的緩沖區(qū)內,同時回顯字符串,光標隨著移動,回車符使光標回到行首。
注意事項:應按要求先定義緩沖區(qū),再調用。424.字符串輸入(0AH功能)42例應用0AH功能輸入字符串。
dataSEGMENT;定義緩沖區(qū)maxDB11;定義限制最多輸入個數(shù)lenthDB?;用于存放實際輸入個數(shù)striDB11DUP(?);用于存放輸入的字符串dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,max
MOVAH,0AHINT21H;調0A輸入功能
MOXCH,0MOVCL,lenth;取字符串長度放CX中
LEABX,stri;取字符串首址于BX中MOVAL,[BX];應用輸入字符、、、、、codeENDS43例應用0AH功能輸入字符串。dataSdataSEGMENT;定義緩沖區(qū)maxDB11;定義限制最多輸入個數(shù)lenthDB?;用于存放實際輸入個數(shù)striDB11DUP(?);用于存放輸入的字符串dataENDS從鍵盤輸入‘ABCD’,回車,內存的存放結果:0B04414243440D00max07000000000000000080a0b0f12345690c0d0elenthstri地址內容DS:DX44dataSEGMENT;定義緩沖如下編程與上例相同:dataSEGMENT
maxDB11等價于:
DB?
maxDB11,?,11DUP(?)
DB11DUP(?)dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,max
MOVAH,0AH;調輸入功能
INT21H
MOXCH,0MOVCL,max+1;取字符串長度放CX中
LEABX,max+2;取字符串首址于BX中MOVAL,[BX];應用輸入字符、、、codeENDS45如下編程與上例相同:dataSEGMENTdataSEGMENTmaxDB11DB?DB11DUP(?)dataENDS從鍵盤輸入‘ABCD’,回車,內存的存放結果:等價于maxDB11,?,11DUP(?)0B04414243440D00max07000000000000000080a0b0f12345690c0d0e地址內容DS:DX46dataSEGMENT等價于0B044142434400AH功能執(zhí)行過程:①
若(DS:DX)字節(jié)單元的值為0,則不等待從鍵盤輸入,結束調用。②若(DS:DX)字節(jié)單元的內容大于0,則等待從鍵盤輸入,并把輸入鍵的ASCII碼順序存放在DS:DX+2開始的單元,按回車鍵表示結束輸入。當按下鍵的個數(shù)超過(DS:DX)中值,發(fā)出警告聲’嘟嘟’,不再接收輸入的數(shù)據(jù),直到輸入回車鍵。③將實際輸入的字符個數(shù)(不包括回車鍵)填入(DS:DX+1),結束調用。DS:DX00000000000000000000000000000000470AH功能執(zhí)行過程:DS:DX0000000000000000AH功能注意事項:◢輸入的字符均帶回顯,且光標隨字符移動。當輸入回車符結束時,也回顯回車符。表現(xiàn)為功能調用結束后,光標回到了行首。◢
回車符0DH作為一個輸入的字符存放在字符串尾,但計數(shù)輸入個數(shù)時,不包括回車鍵。
實際最多能輸入的字符數(shù)=限制的最多數(shù)-1(回車符占一個)◢
執(zhí)行完0AH功能后,DS和DX的值不變,
DS:DX仍指向緩沖區(qū)的首地址。◢
整個緩沖區(qū)的大小應為:限制的最多數(shù)+2maxDB11,?,11dup(?)480AH功能注意事項:48例利用DEBUG查看0A功能輸入結果。dataSEGMENTmaxDB11,?,11DUP(?)dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,max
MOVAH,0AH;調輸入功能
INT21H
MOVCH,0MOVCL,max+1;取輸入長度到CX中MOVAH,4CH;返回DOSINT21HcodeENDSENDstart49例利用DEBUG查看0A功能輸入結果。dataD:\MASM>DEBUGTEST0a.exe
;裝入執(zhí)行文件-U
;反匯編程序
129E:0000B89D12MOVAX,129D129E:00038ED8MOVDS,AX129E:00058D160000LEADX,[0000]129E:0009B40AMOVAH,0A129E:000BCD21INT21129E:000DB500MOVCH,00129E:000F8A0E0100MOVCL,[0001]129E:0013B44CMOVAH,4C129E:0015CD21INT21、、、-D129D:0L10
;查看程序執(zhí)行前緩沖區(qū)內容
129D:00000B00000000000000-0000000000000000-G
000D
;執(zhí)行程序
Hello
;從鍵盤輸入字符串
Programterminatednormally-D129D:0L10
;查看程序執(zhí)行后緩沖區(qū)內容
129D:00000B
05
48656C6C6F0D-0000000000000000..Hello-50D:\MASM>DEBUGTEST0a.exe思考:1.若將程序改為如下形式,設想程序執(zhí)行的結果。dataSEGMENTmaxDB100HDUP(?)
dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,max
MOVAH,0AH;調輸入功能INT21HMOVAH,4CH;返回DOSINT21HcodeENDSENDstart51思考:dataSEGMENT51結果是:不等待輸入,結束0AH功能調用。0000000000000000max07000000000000000080a0b0f12345690c0d0e地址內容DS:DX注意:由于DS:DX限制輸入最大字符數(shù)為0,
所以不等待輸入,結束0AH功能調用。原因是:52結果是:不等待輸入,結束0AH功能調用。00000000002.若將程序改為如下形式,設想程序執(zhí)行的結果。dataSEGMENTmaxDW100H,?,100HDUP(?)
;定義為字類型dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,max
MOVAH,0AH;調輸入功能INT21HMOVAH,4CH;返回DOSINT21HcodeENDSENDstart532.若將程序改為如下形式,設想程序執(zhí)行的結果。data結果是:不等待輸入,結束0AH功能調用。0001000000000000max07000000000000000080a0b0f12345690c0d0e地址內容DS:DX注意:0AH功能以字節(jié)類型應用DS:DX指向的緩沖區(qū)。并不隨緩沖區(qū)類型定義的變化而變化。原因是:54結果是:不等待輸入,結束0AH功能調用。0001000000例編程從鍵盤輸入字符串,給出顯示提示’Pleaseinput:’dataSEGMENTstriDB‘PleaseInput:’,’$’maxDB11,?,11DUP(?)dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,striMOVAH,09H;顯示提示INT21HLEADX,max;等待從鍵盤輸入MOVAH,0AHINT21HMOVAH,4CHINT21HcodeENDSENDstart利用DOS功能調用,編寫小程序55例編程從鍵盤輸入字符串,給出顯示提示’PleaseiD:\MASM>DEBUGe0a09.exe-U
;查看程序129F:0000B89D12MOVAX,129D129F:00038ED8MOVDS,AX129F:00058D160000LEADX,[0000]129F:0009B409MOVAH,09129F:000BCD21INT21129F:000D8D160F00LEADX,[000F]129F:0011B40AMOVAH,0A129F:0013CD21INT21129F:0015B44CMOVAH,4C129F:0017CD21INT21-D129D:0L20
;執(zhí)行程序前查看data段內容129D:0000506C656173652049-6E707574203A240B
PleaseInput:$.129D:00100000000000000000-0000000000000000
-G
;執(zhí)行程序
PleaseInput:Hello!Programterminatednormally-D129D:0L20
;執(zhí)行程序后查看data段內容
129D:0000506C656173652049-6E707574203A24
0BPleaseInput:$.129D:00100648656C6C6F210D-0000000000000000.Hello!-56D:\MASM>DEBUGe0a09.exe56data段內存情況:striPlease
Input:$0B06Hello!0D0000000000000000max57data段內存情況:striPleaseInput:$0B思考:程序中少了一個’$’符的后果。dataSEGMENTstriDB‘PleaseInput:’maxDB11,?,11DUP(?)dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;置緩沖區(qū)地址于DS:DXMOVDS,AXLEADX,striMOVAH,09H;顯示提示INT21HLEADX,max;等待從鍵盤輸入MOVAH,0AHINT21HMOVAH,4CHINT21HcodeENDSENDstart58思考:程序中少了一個’$’符的后果。datadataSEGMENTstriDB‘PleaseInput:’maxDB11,?,11DUP(?)dataENDSstriPlease
Input:0B0000000000000000000000000000000000maxB8A8128ED88D160000B409CD218D160Estart
注意:09H功能只在遇到’$’符才結束顯示。59dataSEGMENTstriPleas5.檢測鍵盤狀態(tài)(0BH功能)入口參數(shù)無功能號AH=0BH類型號21H出口參數(shù)AL=FFH,表示有鍵按下。AL=0,表示無鍵按下。實現(xiàn)功能
檢測鍵盤狀態(tài)(通過檢測鍵盤緩沖區(qū)實現(xiàn))605.檢測鍵盤狀態(tài)(0BH功能)60例利用0B功能實現(xiàn)按鍵退出循環(huán)。、、continue:、、、、、、
MOVAH,0BH;檢測鍵盤緩沖區(qū)是否有鍵按下
INT21HCMPAL,0FFH
JNZcontinue;無鍵按下繼續(xù)循環(huán)、、、、MOVAH,4CHINT21H61例利用0B功能實現(xiàn)按鍵退出循環(huán)。616.保存中斷向量(35H功能)入口參數(shù)AL=要保存向量的中斷類型號N功能號AH=35H類型號21H出口參數(shù)BX=(0:N×4)
ES=(0:N×4+2)實現(xiàn)功能將類型號N的中斷向量保存在ES、BX中626.保存中斷向量(35H功能)62方法一:用堆棧保存中斷向量MOVAL,
09H;取中斷向量
MOVAH,35HINT21HPUSHES;用堆棧保存PUSHBX、、、例
保存09H類型的中斷向量63方法一:用堆棧保存中斷向量例保存09H類型的中斷方法二:用變量保存中斷向量
save_09csDW?;定義變量save_09ipDW?、、、MOVAX,SEGsave_09csMOVDS,AXMOVAL,09H;取中斷向量MOVAH,35HINT21HMOVsave_09cs,ES;用變量保存MOVsave_09ip,BX64方法二:用變量保存中斷向量647.設置中斷向量(25H功能)
入口參數(shù)AL=要設置向量的中斷類型號NDS:DX=中斷子程的入口地址(中斷向量)
功能號AH=25H
類型號21H
出口參數(shù)無
實現(xiàn)功能將類型N的中斷向量設置在向量表中,即(0:N×4)=類型N中斷子程入口地址的偏移值(0:N×4+2)=類型N中斷子程入口地址的段值657.設置中斷向量(25H功能)入口參數(shù)例1
設置中斷子程Sound的中斷向量,類型號為60HcodeSEGMENTASSUMECS:codestart:、、
MOVAX,SEGsoundMOVDS,AXMOVDX,OffsetsoundMOVAL,60HMOVAH,25HINT21H、、
INT60H;調用60H中斷子程、、MOVAH,4CHINT21H
;中斷子程soundPROC、、、、、、、、、
IRETsoundENDP
codeENDSENDstart66例1設置中斷子程Sound的中斷向量,類型號為60Hco第五節(jié)BIOS和DOS中斷功能調用(教材舊P238、新P239)
一、概述
1.BIOS和DOS中斷子程層次特點2.中斷類型分類3.調用方法二、BIOS功能調用1.設置顯示方式(10H類型,00H功能)2.置光標位置(10H類型,02H功能)3.清屏、清窗口(10H類型,06H或07H功能)三、
DOS系統(tǒng)功能調用(21H類型中斷調用)1.顯示單字符(02H功能)2.顯示字符串(09H功能)3.單字符輸入(01H、07H、08H功能)4.字符串輸入(0AH功能)5.檢測鍵盤狀態(tài)(0BH功能)6.保存中斷向量(35H功能)(第六章介紹)7.設置中斷向量(25H功能)67第五節(jié)BIOS和DOS中斷功能調用1第五節(jié)BIOS和DOS中斷功能調用
一、概述
二、BIOS功能調用三、
DOS系統(tǒng)功能調用(21H類型中斷調用)68第五節(jié)BIOS和DOS中斷功能調用2一、概述1.BIOS和DOS中斷子程層次特點2.中斷類型分類3.調用方法69一、概述31.BIOS和DOS中斷子程層次特點用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令DOS系統(tǒng)層次結構701.BIOS和DOS中斷子程層次特點用戶程序磁盤管理模塊(D
層次特點:ROMBIOS中的中斷子程使用IN/OUT指令直接控制外設,實現(xiàn)與外設之間的輸入/輸出操作,以軟件形式向其上層提供服務。IO.SYS中的中斷子程(稱基本輸入/輸出BIOS模塊)
調用ROMBIOS的基本I/O功能,向MSDOS.SYS提供設備驅動服務。用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令71層次特點:用戶程序磁盤管理模塊(DOS內核)基本輸入
MSDOS.SYS中的中斷子程(稱DOS內核模塊)調用IO.SYS,實現(xiàn)對外設的控制。與標準外設有兩層隔離:IO.SYS和ROMBIOS。其中:21H類型的中斷子程提供了豐富的系統(tǒng)服務,稱21類型的中斷調用為DOS系統(tǒng)(功能)調用。用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令72MSDOS.SYS中的中斷子程用戶程序磁盤管理模塊(DO用戶編程原則①盡可能使用DOS的系統(tǒng)功能調用,提高程序可移植性。②在DOS功能不能實現(xiàn)情況下,考慮用BIOS功能調用。③在DOS和BIOS的中斷子程不能解決問題時,使用IN/OUT指令直接控制硬件。用戶程序磁盤管理模塊(DOS內核)MSDOS.SYS系統(tǒng)功能基本輸入/輸出BIOS模塊IO.SYS設備驅動ROMBIOS基本I/O系統(tǒng)硬件裝入命令處理模塊COMMAND.COM用戶命令73用戶編程原則用戶程序磁盤管理模塊(DOS內核)基本輸入/輸2.中斷類型分類向量表中的中斷類型分為七類:①處理CPU特殊操作(除0、溢出)的00H、04H類型。②
為DEBUG調試程序設置的單步(01H)、斷點(03H)類型。③
處理CPU的NMI引腳信號的02H類型。非屏蔽硬中斷子程④
處理CPU的INTR引腳信號的08~0FH類型??善帘晤愋陀仓袛嘧映挞?/p>
用INT指令調用的中斷子程
BIOS功能調用(如10~1AH)DOS功能調用(如21H)NMIINTR8088742.中斷類型分類NMIINTR8⑥
保留類型為DOS系統(tǒng)保留
(1)指現(xiàn)在未用到,以后系統(tǒng)可能會用到。
(2)已用到,但不向用戶公開。為用戶保留
(1)被系統(tǒng)子程嵌套調用了的類型(如1BH、1CH)。使用戶在系統(tǒng)功能基礎上擴充功能。
(2)系統(tǒng)未占用類型(如60H~67H)。⑦非中斷向量類型對應向量表中的4個單元存放的不是中斷向量。(如1DH、1EH、1FH、41H、46H、22H)通常是一些參數(shù)表的地址信息.75⑥保留類型9
中斷向量分配表76中斷向量分配表10中斷向量分配表(續(xù))77中斷向量分配表(續(xù))11中斷向量分配表(續(xù))78中斷向量分配表(續(xù))123.調用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令INTN分析、應用出口參數(shù)793.調用方法設置入口參數(shù)在AH設置功能號m執(zhí)行中斷指令IN例1單字符顯示功能調用MOVDL,‘A’;設置入口參數(shù)MOVAH,02H;設置功能號INT21H;執(zhí)行中斷調用
例2單字符輸入功能調用MOVAH,01H;設置功能號
INT21H;執(zhí)行中斷調用CMPAL,0DH;分析、應用出口參數(shù)JZexit、、、80例1單字符顯示功能調用14二、BIOS功能調用基本輸入/輸出模塊BIOS:實現(xiàn)對輸入/輸出設備的控制,內含0–1CH等類型中斷子程,包括顯示器、磁盤、鍵盤、打印機等標準外設的驅動程序。(參看中斷類型分配表)
BIOS功能調用指對BIOS模塊中的中斷子程的調用。81二、BIOS功能調用15有關顯示器①顯示器通過顯卡(顯示適配器)連接到計算機上。②單色顯示器只能顯示黑白兩色。彩色顯示器能顯示多種顏色。82有關顯示器16③屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。640KBRAM基本內存0000:00000040:00000050:00000070:0000
A000:0000B000:0000
C800:0000F600:0000FE00:0000FE00:1FFF顯示緩存區(qū)(顯存)硬盤驅動器控制ROM32KBROMBASIC8KBROMBIOSIO.SYS模塊COMMAND.COM常駐模塊MSDOS.SYS模塊用戶程序空間COMMAND.COM暫駐模塊256KBROMDOS工作區(qū)ROMBIOS工作區(qū)128KBRAM保留區(qū)1KB中斷向量表83③屏幕上各象素的顯示信息,存放在顯示緩沖區(qū)(顯存)中。64④顯示器有兩種顯示方式:
圖形方式:將屏幕劃分為m×n的點陣,在每個點的位置顯示象素,一個點是一個象素。文本方式將屏幕劃分為若干行和列,在每個網(wǎng)格位置上顯示象素,一個字符是一個象素。84④顯示器有兩種顯示方式:圖形方式:文本方式18文本方式將屏幕劃分為m列和n行(m×n),在每個網(wǎng)格位置上顯示象素,一個字符是一個象素。80×25文本方式A~~~~~~~~~~~~~~~~0列0行79列24行BC85文本方式80×25文本方式A~~~~~~~~~~~~~~~~~~~640×480圖形方式640點480點圖形方式:將屏幕劃分為m×n的點陣,在每個點的位置顯示象素,一個點是一個象素。86~~~~640×480圖形方式640點480點圖形方式:在文本方式下,對應屏幕上的每個字符,在顯示緩沖區(qū)中占用兩個單元:一個存放ASCII碼,一個存放顯示屬性。41H07H42H07H61H70H62H70H、、、顯示緩沖區(qū)(顯存)字符A,黑底白字字符B,黑底白字字符a,白底黑字字符b,白底黑字87在文本方式下,41H07H42H07H61H70H62H70例10000111B或87H表示黑底白字,閃爍
01110000B或70H表示白底黑字,不閃爍16種0000黑1000灰
0010綠1010淺綠0100紅1100淺紅0111灰白1111白BLRGBIRGB閃爍背景前景765432108種000黑010綠
100紅111白0不閃爍1閃爍屬性字節(jié)的含義:8816種BLRGBIRGB閃爍背景前景76543210屬性字節(jié)
據(jù)顯存大小,可存儲若干頁的字符象素。
例16KB顯存能存儲:80×25方式,4頁(0~3),80×25×2×4=1600040×25方式,8頁(0~7),40×25×2×8=1600089據(jù)顯存大小,可存儲若干頁的字符象素。231.設置顯示方式入口參數(shù)AL=顯示方式值
0040×25黑白文本方式
0140×25彩色文本方式
0280×25黑白文本方式
0380×25彩色文本方式
04320×320彩色圖形方式功能號
AH=00H類型號
1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中級經(jīng)濟師考試真題模擬練習
- 老年人防走失手環(huán)行業(yè)跨境出海項目商業(yè)計劃書
- 寵物智能追蹤項圈與手環(huán)創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 建筑工程安全管理實戰(zhàn)經(jīng)驗分享
- 中醫(yī)護理臨床操作規(guī)范總結
- 工業(yè)設計創(chuàng)新思維與方法導引
- 建筑安全員法人a證考試題庫及答案解析
- 中核集團安全生產(chǎn)標準化考試題庫及答案解析
- 交通安全主題的測試題及答案解析
- 智能制造車間流程再造方案
- DB54/T 0316-2024藏香生產(chǎn)技術規(guī)程
- 車間8s管理制度培訓
- 電力行業(yè)職業(yè)健康衛(wèi)生管理制度
- 新22J01 工程做法圖集
- 口腔診所醫(yī)患溝通與糾紛處理預案
- 奮斗青春勇?lián)鷼v史使命
- 《數(shù)據(jù)中心鉛酸蓄電池應用技術規(guī)程》
- 鉤針課件教學課件
- 起重機械吊具、索具檢查記錄表(鋼絲繩)
- 2024時事政治考試100題及參考答案
- 公司舉報獎勵制度
評論
0/150
提交評論