匯編入門與精通3課件_第1頁
匯編入門與精通3課件_第2頁
匯編入門與精通3課件_第3頁
匯編入門與精通3課件_第4頁
匯編入門與精通3課件_第5頁
已閱讀5頁,還剩149頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章BIOS和DOS中斷1BIOS與DOS中斷調(diào)用概述2鍵盤I/O程序設(shè)計3顯示器I/O程序設(shè)計4BIOS及DOS的時間功能調(diào)用第九章BIOS和DOS中斷1BIOS與DOS中斷調(diào)BIOS與DOS中斷調(diào)用概述在實際應(yīng)用中,PC機與外部設(shè)備的傳送數(shù)據(jù)大部分采用中斷方式來實現(xiàn),在主機系統(tǒng)主板上較高地址的ROM中,駐留著基本輸入/輸出系統(tǒng)(basicinput/outputsystem

BIOS)的程序,它提供了系統(tǒng)加電自檢、引導(dǎo)并裝入操作系統(tǒng)、主要的I/O設(shè)備的處理程序等功能。用戶可在不必了解中斷服務(wù)程序的內(nèi)部結(jié)構(gòu)的基礎(chǔ)上來使用中斷服務(wù)程序。DOS是磁盤操作系統(tǒng),是由BIOS在開機后自動裝入內(nèi)存的,DOS中斷是建立在BIOS之上的中斷,它借用了BIOS軟中斷的功能來調(diào)用系統(tǒng)的中斷服務(wù)程序。BIOS與DOS中斷調(diào)用概述在實際應(yīng)用中,PC機與外部設(shè)備的鍵盤I/O程序設(shè)計1.基礎(chǔ)知識

鍵盤是計算機最基本的輸入設(shè)備,鍵盤上的鍵主要分成三種基本類型鍵:字符鍵、功能鍵、組合控制鍵。

(1)字符碼與掃描碼

鍵盤上的每一個鍵都有一個按位置進行的編碼:掃描碼,用戶每按下一個鍵,都會產(chǎn)生一個鍵盤中斷,BIOS中的鍵盤中斷處理程序根據(jù)讀到的掃描碼就能唯一確定按下了哪個鍵。如果按下的是字符鍵,鍵盤處理程序求出對應(yīng)的ASCII碼,把掃描碼和ASCII碼一起存入一個BIOS定義的鍵盤緩沖區(qū)中;如果按下的不是字符鍵,就把掃描碼和一個全0字節(jié)一起存入鍵盤緩沖區(qū)。鍵盤I/O程序設(shè)計1.基礎(chǔ)知識(2)鍵盤緩沖區(qū)

由于所按鍵并不會馬上被用戶讀取,所以在BIOS的參數(shù)區(qū)中,定義了一個鍵盤輸入緩沖區(qū),它的位置在內(nèi)存0040:001AH處,結(jié)構(gòu)如下:

0040:001ABUFF_HEADDW?;首指針

0040:001CBUFF_TAILDW?;尾指針

0040:001KB_BUFFERDW16DUP(?);16個字的緩沖區(qū)

0040:001KB_BUFFER_ENDLABELWORD;尾地址

(2)鍵盤緩沖區(qū)2.BIOS鍵盤功能調(diào)用

BIOS提供的鍵盤中斷類型號為16H,它的中斷處理程序又分為3個功能,通過AH中的功能號來選擇。

(1)0號功能——從鍵盤讀入字符輸入?yún)?shù):AH=0

返回結(jié)果:AH=鍵入字符的掃描碼

AL=鍵入字符的ASCII碼(如按下的是字符鍵)或AL=0(如按下的是其它鍵)

0號功能讀鍵盤是強制讀。

2.BIOS鍵盤功能調(diào)用例:從鍵盤讀一字符,把掃描碼存到KEY1單元,ASCII碼存到KEY2單元。

MOVAH,0INT16HMOVKEY1,AHMOVKEY2,AL例:從鍵盤讀一字符,把掃描碼存到KEY1單元,ASCII碼存(2)1號功能——讀鍵盤緩沖區(qū)的字符輸入?yún)?shù):AH=1

返回結(jié)果:ZF=0時,AH=掃描碼,AL=字符的ASCII碼或0ZF=1時表示無鍵按下,鍵盤緩沖區(qū)為空,1號功能讀鍵盤是探測讀。例如:在一程序中,加入一段指令序列,檢測是否按下了ESC鍵,如果按下,則退出程序,否則,繼續(xù)執(zhí)行程序。加入的指令序列如下:

MOVAH,1;1號功能

INT16H;BIOS的讀鍵盤緩沖區(qū)的字符

JZCONT;ZF=1,無鍵按下繼續(xù)執(zhí)行程序

CMPAH,01H;ZF=0,有鍵按下,判是ESC鍵的掃描碼?

JZEXIT;是ESC鍵的掃描碼退出程序

CONT:……

;繼續(xù)執(zhí)行程序

EXIT:……

;退出程序(2)1號功能——讀鍵盤緩沖區(qū)的字符(3)2號功能——讀鍵盤狀態(tài)字節(jié)輸入?yún)?shù):AH=2

返回結(jié)果:AL=鍵盤狀態(tài)字節(jié)鍵盤上有一些控制鍵和狀態(tài)鍵,如Shift、Ctrl、Alt、NumLock、Scroll、Ins和CapsLock等,當按下這些鍵時,鍵盤處理程序并不返回掃描碼,而是設(shè)置鍵盤狀態(tài)字節(jié)的相應(yīng)位。鍵盤狀態(tài)字節(jié)如下圖所示:

位76543210

1=Insert狀態(tài)已改變1=按下右Shift鍵

1=CapsLock狀態(tài)已改變1=按下左Shift鍵

1=NumLock狀態(tài)已改變1=按下Ctrl鍵

1=ScrollLock狀態(tài)已改變1=按下Alt鍵(3)2號功能——讀鍵盤狀態(tài)字節(jié)【例1】編寫程序,當無鍵按下時,循環(huán)等待,當有鍵按下時,從鍵盤讀10個按鍵,并將其掃描碼和字符碼保存到內(nèi)存單元中。(1)分析

1)利用INT16H的1號功能為探測讀鍵盤,當無鍵按下時循環(huán)等待,當有鍵按下時讀鍵。

2)利用INT

16H的0號功能讀取10個鍵的掃描碼和字符碼并保存到內(nèi)存單元中。

【例1】編寫程序,當無鍵按下時,循環(huán)等待,當有鍵按下時,從鍵DATASEGMENTSTRINGDB20DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARMOVAX,DATA;初始化DSMOVDS,AXL1:MOVAH,1;利用INT16H的功能1探測讀鍵盤

INT16HJZL1;無鍵按下則循環(huán)

LEASI,STRINGMOVCX,10DATASEGMENTL2:MOVAH,0;用INT16H的功能0讀鍵盤

INT16HMOV[SI],AL;保存字符碼

MOV[SI+1],AH;保存掃描碼

ADDSI,2LOOPL2;循環(huán)10次MOVAX,4C00HINT21HMAINENDPCODEENDSENDMAINL2:MOVAH,0;用INT16H的3.DOS鍵盤功能調(diào)用上面介紹了BIOS鍵盤功能調(diào)用(16H),而在實際應(yīng)用中,對于一般的鍵盤操作,最好使用對硬件依賴更少、更為方便的DOS鍵盤功能調(diào)用。下表中列出了DOS功能調(diào)用INT21H中與鍵盤輸入有關(guān)的功能調(diào)用。3.DOS鍵盤功能調(diào)用【例2】編寫一程序,從鍵盤輸入一字符,若為“Y”,則從鍵盤接收一個字符串;若為“N”,則結(jié)束程序;若都不是則循環(huán)讀鍵盤。(1)分析:

1)調(diào)用INT21H的1號功能從鍵盤讀入一個字符。

2)若鍵入的字符為Y,則調(diào)用INT21H的0AH號功能從鍵盤輸入一個字符串。(2)程序流程圖如下:從鍵盤輸入字符串開始從鍵盤讀一字符返回是字符Y?NY是字符N?YN【例2】編寫一程序,從鍵盤輸入一字符,若為“Y”,則從鍵DATASEGMENTSTRINGDB20,?,20DUP(?);定義存放字符串的緩沖區(qū)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXLOP1:MOVAH,1;從鍵盤讀入一個字符

INT21HCMPAL,'Y';若為“Y”,轉(zhuǎn)輸入字符串程序段

JZIN_STRINGCMPAL,'N';若為“N”,結(jié)束程序

JZEXITJMPLOP1;若都不是,循環(huán)讀鍵盤字符IN_STRING:LEADX,STRING;從鍵盤輸入一字符串

MOVAH,0AHINT21HEXIT:MOVAX,4C00HINT21HMAINENDPCODEENDSENDSTARTDATASEGMENT顯示器I/O程序設(shè)計顯示器通過顯示適配器(顯示卡)與PC機相連,顯示卡是計算機和顯示器的接口,現(xiàn)在常用的顯示卡都支持字符顯示和圖形顯示兩種方式,每種顯示方式還有多種顯示模式。

字符方式也稱為文本方式,在這種顯示方式下,屏幕上只能顯示字符及其屬性。字符通常是指字母、數(shù)字、符號和一些簡單的圖形(如菱形、笑臉符等)。在字符方式下,屏幕被劃分為若干行和列,較典型的是80列×25行。顯示字符有兩種方法,一種是用BIOS和DOS功能調(diào)用,另一種是直接組織顯示緩沖區(qū)。顯示器I/O程序設(shè)計顯示器通過顯示適配器(顯示卡)與PC機相顯示的基礎(chǔ)知識(1)顯示模式在字符方式下包括幾種顯示模式,每種模式具有不同的分辨率和顏色,如下表所示。其中用得最普遍的是顯示模式3,在這種模式下,顯示器的屏幕被劃分成80列(0-79)25行(0-24),可以用列號和行號組成的坐標來表示屏幕上的每個可顯示位置,如左上角的坐標為(0,0),右下角的坐標為(79,24)。

顯示的基礎(chǔ)知識(1)顯示模式匯編入門與精通3課件匯編入門與精通3課件BIOS顯示功能調(diào)用BIOS中提供的顯示調(diào)用INT10H功能如下:AH=0:設(shè)置顯示模式輸入?yún)?shù):AL=顯示模式號(表8-10常見的字符顯示模式)返回結(jié)果:無返回參數(shù),只是屏幕設(shè)置為指定的模式AH=1:設(shè)置光標類型輸入?yún)?shù):(CH)4=0,光標顯示,(CH)0-3=光標起始線(CL)0-3=光標結(jié)束線,(CH)4=1,光標不顯示(關(guān)閉)返回結(jié)果:無BIOS顯示功能調(diào)用BIOS中提供的顯示調(diào)用INT10H功AH=2:設(shè)置光標位置輸入?yún)?shù):BH=頁號(一般為0)

DH=新光標的行號

DL=新光標的列號返回結(jié)果:無AH=3:讀光標位置輸入?yún)?shù):BH=頁號(要顯示的當前頁號)返回結(jié)果:CH=光標開始線,CL=光標結(jié)束線

DH=光標當前行號,DL=光標當前列號AH=2:設(shè)置光標位置AH=5:選擇當前顯示頁輸入?yún)?shù):AL=選擇的頁號返回結(jié)果:無AH=6:屏幕初始化或向上滾動輸入?yún)?shù):AL=要滾動的行數(shù),AL=0,全屏滾動(清屏)

CH=滾動窗口左上角行號,CL=滾動窗口左上角列號

DH=滾動窗口右下角行號,DL=滾動窗口右下角列號

BH=滾入行屬性返回結(jié)果:無AH=5:選擇當前顯示頁AH=7:屏幕初始化或向下滾動輸入?yún)?shù):AL=要滾動的行數(shù),AL=0,全屏滾動(清屏)

CH=滾動窗口左上角行號,CL=滾動窗口左上角列號

DH=滾動窗口右下角行號,DL=滾動窗口右下角列號

BH=滾入行屬性返回結(jié)果:無AH=8:讀光標位置的屬性和字符輸入?yún)?shù):BH=顯示頁返回結(jié)果:AH=光標位置的屬性

AL=光標位置的字符AH=7:屏幕初始化或向下滾動AH=9:在光標位置顯示字符及屬性輸入?yún)?shù):BH=顯示頁

BL=字符的屬性

AL=待顯示字符的ASCII碼

CX=字符重復(fù)次數(shù)(只顯示一個字符時,CX=1)返回結(jié)果:無AH=0AH:在光標位置只顯示字符,不改變屬性輸入?yún)?shù):BH=顯示頁

AL=待顯示的字符

CX=字符重復(fù)次數(shù)(只顯示一個字符時,CX=1)返回結(jié)果:無AH=9:在光標位置顯示字符及屬性AH=0EH:顯示字符且光標自動前移輸入?yún)?shù):AL=要顯示的字符

BL=前景色返回結(jié)果:無AH=0FH:獲取當前的顯示模式輸入?yún)?shù):無返回結(jié)果:AL=當前顯示模式號

AH=當前顯示模式每行的列數(shù)

BH=當前顯示頁號AH=0EH:顯示字符且光標自動前移AH=13H:顯示字符串輸入?yún)?shù):ES:BP=字符串首地址CX=串長度DH,DL=起始行、列號BH=顯示頁號AL=0,BL=屬性,光標保持在原處,串由字符組成,僅顯示字符

AL=1,BL=屬性,光標到串尾,串由字符組成,僅顯示字符AL=2,光標保持在原位不動,串由字符及屬性組成AL=3,光標到串尾,串由字符及彩色字符屬性和背景屬性(兩個屬性由一個字節(jié)決定)組成返回結(jié)果:無AH=13H:顯示字符串【例3】在屏幕中間建立一個34列×11行反相顯示的小窗口,在窗口最上面一行以青底淡紅字顯示一個菜單欄:FileEditSearchViewOptionsHelp,在屏幕最下面一行再顯示該菜單欄,但每一項屬性不同?!纠?】在屏幕中間建立一個34列×11行反相顯示的小窗口,在(1)分析1)在屏幕中間建立一個34列×11行反相顯示的小窗口,應(yīng)調(diào)用INT10H的6號功能,定義左上角坐標為(7,23),右小角坐標為(17,56),即屏幕中間大小為34列×11行的小窗口,把小窗口清為白底黑字的屬性即為反相顯示,指令序列如下:MOVAH,6;調(diào)用INT10H的6號功能MOVAL,0;AL=0,全屏滾動(清屏)MOVCH,7;CH=滾動窗口左上角行號7MOVCL,23;CL=滾動窗口左上角列號23MOVDH,17;DH=滾動窗口右下角行號17MOVDL,56;DL=滾動窗口右下角列號56MOVBH,70H;白底黑字,反向顯示INT10H(1)分析2)在窗口最上面一行顯示一個菜單欄,應(yīng)調(diào)用INT10H的功能13HMOVAH,13H;INT10H的功能13H,在窗口最上面一行顯示菜單欄LEABP,STRING1;BP=字符串SRING1的首地址MOVCX,ST1_LEN;CX=串長度ST1_LENMOVDH,7;DH=起始行號7MOVDL,23;DL=起始列號23MOVBH,0;BH=顯示頁號,一般為0MOVAL,1;光標到串尾,串由字符組成,僅顯示字符MOVBL,3CH;字符屬性為青底淡紅色INT10H2)在窗口最上面一行顯示一個菜單欄,應(yīng)調(diào)用INT10H的功DATASEGMENTSTRING1DB‘FileEditSearchViewOptionsHelp’

;窗口上面待顯示的字符串ST1_LENEQU$-STRING1;顯示串1的長度STRING2DB'F',1ch,'i',1ch,'l',1ch,'e',1ch,20h,1ch;窗口下面待顯示的字符串

DB'E',4ah,'d',4ah,'i',4ah,'t',4ah,20h,4ahDB'S',2dh,'e',2dh,'a',2dh,'r',2dh,'c',2dh,'h',2dh,20h,2dhDB'V',5ah,'i',5ah,'e',5ah,'w',5ah,20h,5ahDB'O',3eh,'p',3eh,'t',3eh,'i',3eh,'o',3eh,'n',3eh,'s',3eh,20h,3ehDB'H',6bh,'e',6bh,'l',6bh,'p',6bhST2_LENEQU($-STRING2)/2;顯示串2的長度DATAENDSDATASEGMENTCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARMOVAX,DATA;設(shè)置DS=ESMOVDS,AXMOVES,AXMOVAH,0;設(shè)置顯示模式3MOVAL,3INT10HCODESEGMENTMOVAH,6;清屏MOVAL,0MOVCH,0;屏幕左上角坐標MOVCL,0MOVDH,24;屏幕右下角坐標MOVDL,79MOVBH,07;屬性INT10HMOVAH,1;暫停,等待鍵盤輸入單個字符INT21HMOVAH,6;建立小窗口MOVAL,0;全屏滾動MOVCH,7;左上角坐標MOVCL,23MOVDH,17;右下角坐標MOVDL,56MOVAH,6;清屏MOVBH,70H;白底黑字,反向顯示INT10HMOVAH,13H;在窗口最上面一行顯示菜單欄LEABP,STRING1;ES:BP=字符串首地址MOVCX,ST1_LEN;CX=串長度MOVDH,7;DH,DL=起始行,列位置MOVDL,23MOVBH,0MOVAL,1MOVBL,3CH;屬性為青底淡紅色INT10HMOVAH,1;暫停INT21H;在窗口最下面一行以多種屬性顯示菜單欄MOVBH,70H;白底黑字,反向顯示MOVAH,13H

;INT10H的功能13HLEABP,STRING2

;串首地址MOVCX,ST2_LEN

;顯示串的長度MOVDH,17

;起始位置行號MOVDL,23

;起始位置列號MOVBH,0

MOVAL,3

;光標到串尾,串由字符及屬性組成INT10HMOVAH,4CH;返回DOSINT21HMAINENDPCODEENDSENDMAINMOVAH,13H;INT10H的功能1(4)程序說明:

INT10H的13H號功能有四種顯示字符串的方式,前兩種方式(AL=0,1),整個字符串只能以一種屬性顯示,后兩種方式(AL=2,3)每個字符都可以不同屬性顯示。本程序中,顯示窗口上面的菜單欄用AL=1的方式,顯示字符的屬性相同;顯示窗口下面的菜單欄用AL=3的方式,每個字符以不同的屬性顯示。(5)執(zhí)行結(jié)果如下圖:(4)程序說明:3.DOS顯示功能調(diào)用DOS的INT21H提供的顯示功能調(diào)用如下:AH=2,顯示一個字符,光標跟隨字符移動,檢測Ctrl_Break

輸入?yún)?shù):DL=待顯示字符的ASCII碼返回結(jié)果:無AH=6,顯示一個字符,光標跟隨字符移動,不檢測Ctrl_Break

輸入?yún)?shù):DL=待顯示字符的ASCII碼返回結(jié)果:無AH=9,顯示字符串,光標跟隨字符串移動輸入?yún)?shù):DS:DX=待顯示字符串的首地址,字符串必須以‘$’結(jié)尾。返回結(jié)果:無3.DOS顯示功能調(diào)用用INT21H的9號功能顯示一個字符串,首先要在數(shù)據(jù)段中定義一個待顯示的字符串,這個字符串必須以‘$’結(jié)尾。例如,定義一個字符串如下:

STRINGDB‘HOWAREYOU’,0DH,0AH,‘$’

然后,在代碼段中,顯示該字符串的指令為:

LEADX,STRINGMOVAH,9INT21H用INT21H的9號功能顯示一個字符串,首先要在數(shù)據(jù)段中定匯編入門與精通3課件【例4】用DOS時間功能調(diào)用獲取當前時間,并在屏幕上顯示出來。(1)分析1)本程序首先調(diào)用DOS時間功能調(diào)用(INT21H的2CH功能),讀取系統(tǒng)當前時間:MOVAH,2CHINT21H執(zhí)行后的返回結(jié)果:CH=小時(0-23)CL=分鐘(0-59)DH=秒(0-59)2)然后按照一定的格式顯示出來,其中需要多次把返回的二進制數(shù)結(jié)果轉(zhuǎn)換成十進制并顯示出來,所以用子程序來實現(xiàn)這一功能。【例4】用DOS時間功能調(diào)用獲取當前時間,并在屏幕上顯示出來(2)編寫程序如下:

DATASEGMENTTIMEDB‘CURRETNTIMEIS$’

;定義一個提示串

DATAENDS

CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFAR(2)編寫程序如下:

LEADX,TIME;顯示提示串

MOVAH,9INT21HMOVAH,2CH;獲取當前時間

INT21HMOVAL,CH;顯示小時數(shù)

CALLP1MOVDL,3AH;顯示一分隔符“:”

MOVAH,2INT21HMOVAL,CL;顯示分鐘數(shù)

CALLP1MOVDL,3AH;顯示分隔符“:”

MOVAL,2INT21HMOVAL,DH;顯示秒數(shù)

CALLP1MOVAX,4C00H;返回DOSINT21HMAINENDPLEADX,TIME;顯示提示串;把寄存器中的內(nèi)容轉(zhuǎn)換成十進制顯示出來P1PROC;入口參數(shù):AL為待顯示的寄存器

PUSHBX;

PUSHDXXORAH,AH;(1)做除法

MOVBL,10;把二進制轉(zhuǎn)換成十進制

DIVBLMOVBL,AH;保存余數(shù)

MOVDL,ALORDL,30H;把十位數(shù)轉(zhuǎn)換成ASCII碼

MOVAH,2;顯示十位數(shù)

INT21HMOVDL,BLORDL,30H;把個位數(shù)轉(zhuǎn)換成ASCII碼

MOVAH,2;顯示個位數(shù)

INT21HPOPDXPOPBXRETP1ENDPCODEENDSENDSTART;把寄存器中的內(nèi)容轉(zhuǎn)換成十進制顯示出來(3)程序說明:1)因為當前時間的小時數(shù)、分鐘數(shù)和秒數(shù)都不會超過兩位十進制數(shù),所以這里把二進制數(shù)轉(zhuǎn)換成十進制時,只需做一次除法(除以10)即可,所得商和余數(shù)分別為十進制的十位數(shù)和個位數(shù)。

(3)程序說明:【例5】用BIOS時間功能調(diào)用獲取當前日期,并在屏幕上顯示出來。(1)分析:本程序與上例類似,調(diào)用BIOS時間功能調(diào)用(INT1AH的功能4)獲取當前日期并顯示。不同之處在于,INT1AH的功能4的返回結(jié)果是用壓縮BCD碼的形式表示的,因此轉(zhuǎn)換成十進制并顯示的程序段不同。1)首先調(diào)用BIOS時間功能調(diào)用(INT1AH的功能4)獲取當前日期:

MOVAH,04HINT1AH

執(zhí)行后的返回結(jié)果:CF=1表示失敗

CF=0表示成功

CX=年(1980-2099)

DH=月(1-12)

DL=日(1-31)2)INT1AH的功能4的返回結(jié)果是用壓縮BCD碼的形式表示的,因此轉(zhuǎn)換成十進制并顯示的程序段不同?!纠?】用BIOS時間功能調(diào)用獲取當前日期,并在屏幕上顯示出2)編寫程序如下:

DATASEGMENTDATEDB‘CURRETNDATEIS$’

;定義一個提示串

DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATA;初始化DSMOVDS,AX

2)編寫程序如下:LEADX,DATE;顯示提示串

MOVAH,9INT21H

MOVAH,04H;獲取當前日期

INT1AHJCEXIT;若失敗,則轉(zhuǎn)EXITPUSHDX;保存月、日;顯示年份

MOVBX,CX;BX=年份

MOVCX,4;年份4位,需循環(huán)4次L1:PUSHCX;(1)保存循環(huán)次數(shù)

MOVCL,4;循環(huán)左移取出BCD碼

ROLBX,CLMOVDL,BL;把BL內(nèi)容取到DL中

ANDDL,0FH;屏蔽高四位

ORDL,30H;轉(zhuǎn)換成ASCII碼

MOVAH,2;顯示一位

INT21HLEADX,DATE;顯示提示串POPCX;恢復(fù)循環(huán)次數(shù)

LOOPL1 MOVDL,2DH;顯示一分隔符“—”MOVAH,2INT21H;顯示月及日

POPBX;BX=月,日

MOVCX,4;循環(huán)四次

L2:PUSHCX;保存循環(huán)次數(shù)

MOVCL,4ROLBX,CL;采用ROL方式取出BCD碼

MOVDL,BL;取到DL中

ANDDL,0FH

;清除高四位

ORDL,30H;轉(zhuǎn)換成ASCII碼

MOVAH,2;顯示在屏幕上

INT21HPOPCX;恢復(fù)循環(huán)次數(shù)POPCXCMPCX,3;(2)CX=3,顯示分隔符“—”JNZL3MOVDL,2DH;顯示分隔符“—”MOVAH,2INT21HL3:LOOPL2;循環(huán)4次EXIT:MOVAX,4C00HINT21HMAINENDPCODEENDSENDSTARTPOPCX圖形系統(tǒng)程序設(shè)計1.顯示模式在圖形方式下,顯示屏幕上由像素點組成,屏幕按分辨率劃分成像素行和列。可以通過讀寫屏幕上的各個點的像素,顯示出各種單色和彩色的圖形。在各種不同的顯示模式下,屏幕顯示的像素分辨率、顏色數(shù)以及顯示存儲器的組織方式都不同,與圖形有關(guān)的顯示模式及其適用的顯示卡如下表所示。顯示模式分辨率顏色數(shù)適用的顯示卡4320×2004CGAMCGAEGAVGA5320×2004CGAMCGAEGAVGA6640×2002CGAMCGAEGAVGA0DH320×20016EGAVGA0EH640×20016EGAVGA0FH640×3502EGAVGA10H640×35016EGAVGA11H640×4802MCGAVGA12H640×48016VGA13H320×200256MCGAVGA圖形系統(tǒng)程序設(shè)計1.顯示模式顯示模式分辨率顏色數(shù)適用的顯示用BIOS功能調(diào)用編寫顯示程序INT10H提供了兩個圖形方式下讀寫像素的功能:

AH=0CH,寫像素輸入?yún)?shù):DX=像素行

CX=像素列

BX=顯示頁號

AL=像素顏色值返回結(jié)果:無

AH=0DH,讀像素輸入?yún)?shù):DX=像素行

CX=像素列返回結(jié)果:AL=像素顏色值用BIOS功能調(diào)用編寫顯示程序INT10H提供了兩個圖形【例6】:編程實現(xiàn),在屏幕上顯示一個直角三角形,三邊分別為紅、黃、綠三種顏色。(1)分析:1)顯示系統(tǒng)中默認的顯示方式為文本方式,首先要讀取當前的顯示模式并保存,顯示圖形后再恢復(fù)原來的顯示模式。2)調(diào)用INT10H的讀寫像素功能,分別畫出三角形的三邊。【例6】:編程實現(xiàn),在屏幕上顯示一個直角三角形,三邊分別為紅CODESEGMENTASSUMECS:CODEMAINPROCFARMOVAX,0600H;利用INT10H的功能6清屏

MOVBH,7;黑底白字

MOVCX,0;窗口左上角坐標(0,0)

MOVDX,184FH;窗口右下角坐標(24,79)

INT10HMOVAH,0FH;讀取當前的顯示模式

INT10HPUSHAX;壓入堆棧保存

MOVAH,0;設(shè)置當前的顯示模式為12HMOVAL,12HINT10HCODESEGMENT;(1)從坐標(200,200)處開始畫一水平線

MOVCX,200;開始列

MOVDX,200;開始行LOP1:MOVAH,0CH;寫像素功能

MOVAL,0AH;淺綠色

MOVBH,0INT10H;寫像素

INCCX;列坐標加1,準備畫下一點

CMPCX,300;判斷水平線是否結(jié)束

JNZLOP1;未結(jié)束則循環(huán);(1)從坐標(200,200)處開始畫一水平線;(2)從坐標(200,200)處開始畫一垂直線

MOVCX,200;開始列

MOVDX,200;開始行LOP2:MOVAH,0CH;寫像素功能

MOVAL,0CH;淡紅色

MOVBH,0INT10HDECDX;行坐標減1,準備畫下一點

CMPDX,100;判斷垂直線是否結(jié)束

JNZLOP2;未結(jié)束則循環(huán);(3)從坐標(200,100)處開始畫一斜線

MOVCX,200;開始列

MOVDX,100;開始行;(2)從坐標(200,200)處開始畫一垂直線LOP3:MOVAH,0CH;寫像素功能

MOVAL,0EH;黃色

MOVBH,0INT10HINCCX;行、列坐標同時加1,畫斜線

INCDXCMPDX,200;判斷斜線是否結(jié)束

JNZLOP3

MOVAH,1;暫停

INT21H

POPAX;恢復(fù)原來的顯示模式

MOVAH,0INT10HLOP3:MOVAH,0CH;寫像素功能EXIT:MOVAX,4C00HINT21HMAINENDPCODEENDSENDMAIN(4)程序說明:1)從坐標(200,200)處開始向右畫三角形的水平線段,每寫一個象素,列坐標加1,加到列坐標為300則停止。2)從坐標(200,200)處開始向上畫三角形的垂直線段,每寫一個象素,行坐標減1,減到行坐標為100則停止。3)從坐標(200,100)處開始畫三角形的斜直線段,每寫一個象素,行列坐標同時加1,加到列坐標為(300,200)則停止。EXIT:MOVAX,4C00H直接組織顯示緩沖區(qū)(1)VGA的顯示緩沖區(qū)

VGA顯示卡的顯示緩沖區(qū)容量為256KB,它除了兼容CGA、EGA的顯示模式外,還提供了一種VGA獨有的顯示模式12H。這里主要以VGA的顯示模式12H為例。

VGA的顯示模式12H,分辨率為640×480,可顯示16種顏色,把256KB的顯存分成4個64KB的顯示頁面。每個像素由4位來表示,每個頁面一位,4個頁面上的相應(yīng)位確定屏幕上一個像素點的顏色,4個頁面中的每個字節(jié)表示相鄰的8個水平像素。所以,每個像素有16種顏色,要在屏幕上畫出一個像素點,必須將一個像素的顏色寫入顯示緩沖區(qū)的4個頁面。

若屏幕上像素的位置由坐標(x,y)來表示,像素位置轉(zhuǎn)換為顯示緩沖區(qū)中位置的計算公式為:字節(jié)地址=A0000H+y×80+x/8

直接組織顯示緩沖區(qū)圖形控制器在圖形方式下,直接編寫驅(qū)動VGA內(nèi)部寄存器和顯示緩沖區(qū)來處理圖形程序,是相當復(fù)雜的,我們這里只介紹部分硬件結(jié)構(gòu)和編程方法。在VGA的圖形方式下,CPU和顯示緩沖區(qū)之間不是直接傳送數(shù)據(jù)的,而是在圖形控制器的控制和處理下,經(jīng)過鎖存器來傳送的,每個頁面對應(yīng)一個8位的鎖存器。圖形控制器內(nèi)部有10個寄存器,系統(tǒng)只分配了兩個端口地址:3CEH和3CFH。其中3CEH為索引寄存器,3CFH中實際上有9個寄存器,共用一個端口地址。訪問3CFH中的9個寄存器的方法是:首先把要訪問的寄存器的編號(即索引值)寫入索引寄存器3CEH中,選擇其中的一個寄存器為當前活動寄存器,然后訪問3CFH就是訪問指定的寄存器。圖形控制器3)VGA的讀寫模式

VGA顯示卡提供兩種讀模式:讀模式0和讀模式1,其中讀模式0是默認的模式。讀模式0可以讀取某個頁面的字節(jié),選擇哪一個頁面的字節(jié)讀入CPU,取決于讀映像選擇寄存器。當希望讀取多個頁面的內(nèi)容時,使用讀模式1為更方便。

VGA提供了4種寫模式,其中寫模式0為直接處理器寫,這是最常用的方式,也是圖形控制器的缺省模式。在寫模式0中,所寫入的CPU數(shù)據(jù)可以更新一個或是全部的頁面,同時,還可以與一個事先定義好的值進行邏輯運算,以更新鎖存器中的8個像素或其中任一個像素。在這些操作中,要用到置位/復(fù)位寄存器、數(shù)據(jù)循環(huán)/功能選擇寄存器和位屏蔽寄存器。(4)圖形編程舉例

3)VGA的讀寫模式【例7】用直接組織顯示緩沖區(qū)的方法編程實現(xiàn),在屏幕上顯示一個直角三角形,三邊分別為紅、黃、綠三種顏色。(1)分析本程序的主要步驟與上例相同,區(qū)別只是具體寫每個象素的方法不同,上例通過調(diào)用BIOS顯示例程INT10H來讀寫像素,本例通過對硬件編程來直接組織顯示緩沖區(qū)。另外,為使程序簡潔,計算像素的字節(jié)地址和位掩碼以及寫像素功能分別由子程序來實現(xiàn)?!纠?】用直接組織顯示緩沖區(qū)的方法編程實現(xiàn),在屏幕上顯示一個CODESEGMENTASSUMECS:CODEMAINPROCFARMOVAX,0600H;清屏

MOVBH,7MOVCX,0MOVDX,184FHINT10H;讀取當前的顯示模式并保存

MOVAH,0FHINT10HPUSHAX

;設(shè)置顯示模式為12H

CODESEGMENTMOVAH,0MOVAL,12HINT10H

;從(200,200)處開始畫水平線

MOVCX,200MOVDX,200LOP1:CALLGET_ADDR;1)計算像素的字節(jié)地址和位掩碼

PUSHCX;保存CX中的坐標值

MOVCL,AHMOVCH,0AH;淺綠色

CALLWRITE0;(2)寫像素

POPCX;恢復(fù)CX中的坐標值MOVAH,0INCCX;修改坐標

CMPCX,300;判斷是否畫完

JNZLOP1;從(200,200)開始畫垂直線

MOVCX,200MOVDX,200LOP2:CALLGET_ADDR;計算像素的字節(jié)地址和位掩碼

PUSHCXMOVCL,AHMOVCH,0CH;淡紅色

CALLWRITE0;寫像素

POPCXDECDXCMPDX,100;判斷是否畫完

JNZLOP2;從(200,100)處開始畫斜線

MOVCX,200MOVDX,100INCCX;修改坐標LOP3:CALLGET_ADDR;計算像素的字節(jié)地址和位掩碼

PUSHCXMOVCL,AHMOVCH,0EH;黃色

CALLWRITE0;寫像素

POPCXINCCXINCDXCMPDX,200JNZLOP3MOVAH,1;暫停

INT21HPOPAX;恢復(fù)原來的顯示模式

MOVAH,0INT10H

EXIT:MOVAX,4C00H;返回DOSINT21HMAINENDPLOP3:CALLGET_ADDR;計算像素的字節(jié)地址和位掩碼子程序GET_ADDRPROCNEAR;入口:CX=X坐標,DX=Y坐標

PUSHCX;出口:BX=字節(jié)地址,AH=位掩碼

PUSHDXMOVAX,0A000H;設(shè)置段地址

MOVES,AXMOVAX,80;AX=Y*80MULDXMOVBX,AX;BX=Y*80MOVAX,CX;計算X/8MOVCL,8DIVCLMOVCL,AH;余數(shù)保存在CL中

MOVAH,0ADDBX,AX;BX=Y*80+X/8MOVAH,80HSHRAH,CL;AH=位掩碼

POPDXPOPCXRETGET_ADDRENDP;計算像素的字節(jié)地址和位掩碼子程序;寫像素子程序。

;入口參數(shù):BX=字節(jié)地址,CH=象素顏色值,CL=位掩碼。WRITE0PROCNEAR;出口參數(shù):完成寫一新象素

PUSHES;保護現(xiàn)場

PUSHAXPUSHBXPUSHDXPUSHCX

;(2)寫像素顏色值到置位/復(fù)位寄存器

MOVDX,3CEH;索引寄存器地址

MOVAL,0;置位/復(fù)位寄存器索引值

MOVAH,CH;像素顏色值

OUTDX,AX;寫入寄存器;設(shè)置置位/復(fù)位允許寄存器為允許4個頁面

MOVAL,1;置位/復(fù)位允許寄存器索引值

MOVAH,0FH;允許4個頁面

OUTDX,AX;寫入寄存器;寫像素子程序。;寫位屏蔽碼到位屏蔽寄存器MOVAL,8;位屏蔽寄存器索引值MOVAH,CL;位屏蔽碼

OUTDX,AX;寫入

MOVAL,ES:[BX];(3)讀四個頁面到鎖存器

MOVES:[BX],AL;寫入新像素

MOVAL,1;置位/復(fù)位允許寄存器

MOVAH,0;禁止4個頁面

OUTDX,AX;寫位屏蔽碼到位屏蔽寄存器MOVAL,8;設(shè)屏蔽寄存器

MOVAH,0FFH;允許8位寫入

OUTDX,AXPOPCX;恢復(fù)現(xiàn)場

POPDXPOPBXPOPAXPOPESRETWRITE0ENDP

CODEENDSENDMAINMOVAL,8;設(shè)屏發(fā)聲系統(tǒng)程序設(shè)計1.揚聲器的驅(qū)動系統(tǒng)

計算機上的揚聲器是由可編程定時/計數(shù)器8253(8254)和并行接口芯片8255共同控制發(fā)聲的,發(fā)聲系統(tǒng)的結(jié)構(gòu)如下圖所示。在下圖的揚聲器驅(qū)動系統(tǒng)中,8255PB口第1位的輸出與8253/54計數(shù)器2的輸出,這兩個信號經(jīng)過一個與門后,如果能輸出一個連續(xù)的方波脈沖信號,經(jīng)驅(qū)動器驅(qū)動后就可以使揚聲器發(fā)聲,控制方波的頻率和持續(xù)時間就可以發(fā)出不同音高和音長的聲音。因為與門有兩個輸入信號,只要使其中一個信號輸出方波,另一個的輸出保持為1狀態(tài),就可以使揚聲器發(fā)聲,因此,發(fā)聲程序有兩種設(shè)計方法,在前面的8.1.3中介紹過直接控制8255的PB1輸出,使揚聲器發(fā)聲的方法,這里介紹另一種方法。

發(fā)聲系統(tǒng)程序設(shè)計1.揚聲器的驅(qū)動系統(tǒng)對8253/54編程來使揚聲器發(fā)聲另一種驅(qū)動揚聲器發(fā)聲的方式是使PB1為1,打開與門,由8253/54的計數(shù)器2輸出方波。在編寫發(fā)聲程序時,首先要初始化8253/54(包括寫控制字和計數(shù)初值),要計數(shù)器2輸出方波,需工作在方式3,此時控制字為0B6H。8253/54初始化后,使PB0和PB1為1,打開計數(shù)器2的門控信號端GATE2,計數(shù)器2開始工作,輸出方波,同時與門也打開,方波信號驅(qū)動揚聲器發(fā)聲,延時一段時間后,關(guān)閉揚聲器。對8253/54編程來使揚聲器發(fā)聲另一種驅(qū)動揚聲器發(fā)聲的方【例8】:編寫利用8253/54驅(qū)動發(fā)聲的通用發(fā)聲子程序GENSOUND。入口參數(shù):CX=發(fā)聲的頻率值,BX=持續(xù)的時間(ms)(1)分析:首先要初始化8253/54,即寫入控制字和計數(shù)除值,然后打開與門和8253/54的門控信號GATE2,開始發(fā)聲,延時一段時間后,關(guān)閉與門和門控信號,停止發(fā)聲?!纠?】:編寫利用8253/54驅(qū)動發(fā)聲的通用發(fā)聲子程序GEGENSOUNDPROCNEARPUSHDXMOVAL,0B6H;寫8253/54控制字

OUT43H,ALMOVDX,12H;計算計數(shù)初值,結(jié)果在AX中

MOVAX,3208HDIVCXOUT42H,AL;送計數(shù)初值低字節(jié)

MOVAL,AHOUT42H,AL;送計數(shù)初值高字節(jié)

INAL,61H;讀入61H端口原值

MOVAH,AL;保存在AH中

ORAL,3;將第0、1位置1后送回61H端口

OUT61H,ALGENSOUNDPROCNEARL2:MOVCX,0AB5EH;延時(BX)×1msL3:LOOPL3DECBXJNZL2MOVAL,AH;恢復(fù)61H端口原值,停止發(fā)聲

OUT61H,ALPOPDXRETGENSOUNDENDPL2:MOVCX,0AB5EH;延時(BX樂曲程序編寫樂曲程序的方法是,根據(jù)樂譜中每個音符及其節(jié)拍,可以得到兩個數(shù)據(jù):每個音符的頻率值和持續(xù)時間,通過調(diào)用通用發(fā)聲子程序,就可以設(shè)計出演奏的樂曲程序。要設(shè)計樂曲程序,首先必須知道每個音符與發(fā)聲頻率的關(guān)系,表8-16給出了樂曲C調(diào)的頻率值。其次,樂曲中音符的持續(xù)時間由樂曲的速度和每個音符的節(jié)拍數(shù)來確定。在4/4拍中,如果給全音符分配0.8秒的時間,則二分音符的持續(xù)時間為400ms,四分音符為200ms。在設(shè)計樂曲程序時,首先根據(jù)樂譜中每個音符及其節(jié)拍定義兩個數(shù)據(jù)表:一個頻率表和一個節(jié)拍時間表,然后依次取出表中的頻率值和時間值,調(diào)用通用發(fā)聲子程序,就可以編寫出音樂演奏程序了。

音符和頻率表音符頻率(Hz)音符頻率(Hz)音符頻率(Hz)

低1130.81中1261.63高1523.52

低2146.83中2293.66高2587.33

低3164.81中3329.63高3659.26

低4174.61中4349.23高4698.46

低5196.00中5392.00高5783.99

低6220.00中6440.00高6880.00

低7246.94中7493.88高7987.77樂曲程序編寫樂曲程序的方法是,根據(jù)樂譜中每個音符及其節(jié)拍,【例9】:根據(jù)下面給出的樂譜,設(shè)計樂曲演奏程序。

1=C4/41231|1231|345—|345—|

56

5431|56

5431|21—|21—|(1)分析

1)首先根據(jù)給出的樂譜,定義兩個變量,變量FREQ中存放的是頻率表,依次為每個音符對應(yīng)的頻率值;變量TIME中存放的是節(jié)拍時間表,依次為每個音符的持續(xù)時間。

2)其次,依次取出兩個表中的頻率值和時間值,調(diào)用通用發(fā)聲子程序,就可以,發(fā)出不同頻率和音長的聲音,完成樂曲程序了。【例9】:根據(jù)下面給出的樂譜,設(shè)計樂曲演奏程序。(2)編寫程序如下:

DATASEGMENTFREQDW262,294,330,262,262,294,330,262,330,349,392DW330,349,392,392,440,392,349,330,262,392,440DW392,349,330,262,294,196,262,294,196,262,-1TIMEDW8DUP(800),2DUP(800,800,1600)DW2DUP(400,400,400,400,800,800)DW2DUP(800,800,1600)DATAENDS(2)編寫程序如下:CODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETFREQ;設(shè)SI為頻率表指針

MOVDI,OFFSETTIME;DI為時間表指針

L1:MOVCX,[SI];取頻率值送CXCMPCX,-1;(1)若為-1則結(jié)束

JEEXITMOVBX,[DI];取持續(xù)時間送BXCALLGENSOUND;調(diào)用通用發(fā)聲子程序

ADDSI,2ADDDI,2JMPL1

CODESEGMENTEXIT:MOVAX,4C00HINT21HMAINENDPCODEENDSENDSTART(3)程序說明:變量FREQ中的最后一個數(shù)值-1為結(jié)束標志,每取一個頻率值,判斷是否為-1,若為-1,表明表中的各個頻率值都已取完,則退出程序。EXIT:MOVAX,4C00H第九章BIOS和DOS中斷1BIOS與DOS中斷調(diào)用概述2鍵盤I/O程序設(shè)計3顯示器I/O程序設(shè)計4BIOS及DOS的時間功能調(diào)用第九章BIOS和DOS中斷1BIOS與DOS中斷調(diào)BIOS與DOS中斷調(diào)用概述在實際應(yīng)用中,PC機與外部設(shè)備的傳送數(shù)據(jù)大部分采用中斷方式來實現(xiàn),在主機系統(tǒng)主板上較高地址的ROM中,駐留著基本輸入/輸出系統(tǒng)(basicinput/outputsystem

BIOS)的程序,它提供了系統(tǒng)加電自檢、引導(dǎo)并裝入操作系統(tǒng)、主要的I/O設(shè)備的處理程序等功能。用戶可在不必了解中斷服務(wù)程序的內(nèi)部結(jié)構(gòu)的基礎(chǔ)上來使用中斷服務(wù)程序。DOS是磁盤操作系統(tǒng),是由BIOS在開機后自動裝入內(nèi)存的,DOS中斷是建立在BIOS之上的中斷,它借用了BIOS軟中斷的功能來調(diào)用系統(tǒng)的中斷服務(wù)程序。BIOS與DOS中斷調(diào)用概述在實際應(yīng)用中,PC機與外部設(shè)備的鍵盤I/O程序設(shè)計1.基礎(chǔ)知識

鍵盤是計算機最基本的輸入設(shè)備,鍵盤上的鍵主要分成三種基本類型鍵:字符鍵、功能鍵、組合控制鍵。

(1)字符碼與掃描碼

鍵盤上的每一個鍵都有一個按位置進行的編碼:掃描碼,用戶每按下一個鍵,都會產(chǎn)生一個鍵盤中斷,BIOS中的鍵盤中斷處理程序根據(jù)讀到的掃描碼就能唯一確定按下了哪個鍵。如果按下的是字符鍵,鍵盤處理程序求出對應(yīng)的ASCII碼,把掃描碼和ASCII碼一起存入一個BIOS定義的鍵盤緩沖區(qū)中;如果按下的不是字符鍵,就把掃描碼和一個全0字節(jié)一起存入鍵盤緩沖區(qū)。鍵盤I/O程序設(shè)計1.基礎(chǔ)知識(2)鍵盤緩沖區(qū)

由于所按鍵并不會馬上被用戶讀取,所以在BIOS的參數(shù)區(qū)中,定義了一個鍵盤輸入緩沖區(qū),它的位置在內(nèi)存0040:001AH處,結(jié)構(gòu)如下:

0040:001ABUFF_HEADDW?;首指針

0040:001CBUFF_TAILDW?;尾指針

0040:001KB_BUFFERDW16DUP(?);16個字的緩沖區(qū)

0040:001KB_BUFFER_ENDLABELWORD;尾地址

(2)鍵盤緩沖區(qū)2.BIOS鍵盤功能調(diào)用

BIOS提供的鍵盤中斷類型號為16H,它的中斷處理程序又分為3個功能,通過AH中的功能號來選擇。

(1)0號功能——從鍵盤讀入字符輸入?yún)?shù):AH=0

返回結(jié)果:AH=鍵入字符的掃描碼

AL=鍵入字符的ASCII碼(如按下的是字符鍵)或AL=0(如按下的是其它鍵)

0號功能讀鍵盤是強制讀。

2.BIOS鍵盤功能調(diào)用例:從鍵盤讀一字符,把掃描碼存到KEY1單元,ASCII碼存到KEY2單元。

MOVAH,0INT16HMOVKEY1,AHMOVKEY2,AL例:從鍵盤讀一字符,把掃描碼存到KEY1單元,ASCII碼存(2)1號功能——讀鍵盤緩沖區(qū)的字符輸入?yún)?shù):AH=1

返回結(jié)果:ZF=0時,AH=掃描碼,AL=字符的ASCII碼或0ZF=1時表示無鍵按下,鍵盤緩沖區(qū)為空,1號功能讀鍵盤是探測讀。例如:在一程序中,加入一段指令序列,檢測是否按下了ESC鍵,如果按下,則退出程序,否則,繼續(xù)執(zhí)行程序。加入的指令序列如下:

MOVAH,1;1號功能

INT16H;BIOS的讀鍵盤緩沖區(qū)的字符

JZCONT;ZF=1,無鍵按下繼續(xù)執(zhí)行程序

CMPAH,01H;ZF=0,有鍵按下,判是ESC鍵的掃描

溫馨提示

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

評論

0/150

提交評論