《匯編語言》講稿_12.ppt_第1頁
《匯編語言》講稿_12.ppt_第2頁
《匯編語言》講稿_12.ppt_第3頁
《匯編語言》講稿_12.ppt_第4頁
《匯編語言》講稿_12.ppt_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言,第12章 內中斷,第12章 內中斷,12.1 內中斷的產生 12.2 中斷處理程序 12.3 中斷向量表 12.4 中斷過程 12.5 中斷處理程序 12.6 除法錯誤中斷的處理 12.7 編程處理 0 號中斷 12.8 安裝 12.9 do0 12.10 設置中斷向量 12.11 單步中斷 12.12 響應中斷的特殊情況,引言,中斷的意思是指,CPU不再接著(剛執(zhí)行完的指令)向下執(zhí)行,而是轉去處理這個特殊信息。 注意,我們這里所說的中斷信息,是為了便于理解而采用的種邏輯上的說法。它是對幾個具有先后順序的硬件操作所產生的事件的統(tǒng)一描述。,12.1 內中斷的產生,當CPU 的內部有什么

2、事情發(fā)生的時候,將產生需要馬上處理的中斷信息呢? 對于8086CPU,當內部有下面情況發(fā)生的時候,將產生中斷信息: 1、除法錯誤,比如:執(zhí)行div指令產生的除法溢出; 2、單步執(zhí)行; 3、執(zhí)行int0指令; 4、執(zhí)行int 指令。,12.1 內中斷的產生,上述的4種中斷源,在8086CPU中的中斷類型碼如下: (1)除法錯誤:0 (2)單步執(zhí)行:1 (3)執(zhí)行 int0 指令: (4)執(zhí)行 int 指令 ,該指令的格式為 int n,指令中的n為字節(jié)型立即數(shù),是提供給CPU的中斷類型碼。,12.2 中斷處理程序,CPU的設計者必須在中斷信息和其處理程序的入口地址之間建立某種聯(lián)系,使得CPU根據(jù)

3、中斷信息可以找到要執(zhí)行的處理程序。 我們知道,中斷信息中包含有標識中斷源的類型碼。根據(jù)CPU的設計,中斷類型碼的作用就是用來定位中斷處理程序。,12.2 中斷處理程序,比如CPU 根據(jù)中斷類型碼 4,就可以找到4號中斷的處理程序。 可隨之而來的問題是,若要定位中斷處理程序,需要知道它的段地址和偏移地址,而如何根據(jù) 8位的中斷類型碼得到中斷處理程序的段地址和偏移地址呢?,12.3 中斷向量表,CPU用 8 位的中斷類型碼通過中斷向量表找到相應的中斷處理程序的入口地址。 那么什么是中斷向量表呢? 中斷向量表就是中斷向量的列表。,12.3 中斷向量表,中斷向量表在內存中保存,其中存放著 256個中斷

4、源所對應的中斷處理程序的入口,如下圖所示:,12.3 中斷向量表,中斷向量表在內存中存放,對于8086PC機,中斷向量表指定放在內存地址0處。 從內存0000:0000到0000:03FF的1024個單元中存放著中斷向量表。,類型0的(IP),類型0的(CS),類型1的(IP),類型1的(CS),類型N的(IP),類型N的(CS),類型255的(IP),類型255的(CS),00000,00004,4*N,003FE,中斷向量中斷處理程序的入口 地址(段址):(偏址),中斷向量表,用戶可利用保留的中斷類型號 擴充自己需要的中斷功能。,特別提示,檢測點12.1(p238) 沒有完成此檢測點,請不

5、要向下進行。,12.4 中斷過程,從上面的講解中,我們知道,可以用中斷類型碼,在中斷向量表中找到中斷處理程序的入口。 找到這個入口地址的最終目的是用它設置CS和IP,使CPU執(zhí)行中斷處理程序。,12.4 中斷過程,用中斷類型碼找到中斷向量,并用它設置CS和IP,這個工作是由CPU的硬件自動完成的。 CPU 硬件完成這個工作的過程被稱為中斷過程。,12.4 中斷過程,在使用 call 指令調用子程序時有同樣的問題,子程序執(zhí)行后還要返回到原來的執(zhí)行點繼續(xù)執(zhí)行, 所以,call 指令先保存當前 CS 的 IP值,然后再設置CS和IP。,12.4 中斷過程,8086CPU的中斷過程: (1)(從中斷信

6、息中)取得中斷類型碼; (2)標志寄存器的值入棧( 因為在中斷過程中要改變標志寄存器的值,所以先將其保存在棧中。); (3)設置標志寄存器的第8位TF 和第9位IF的值為0;(這一步的目的后面將介紹) (4)CS的內容入棧; (5)IP的內容入棧; (6)從內存地址為中斷類型碼*4 和中斷類型碼 *4+2 的兩個字單元中讀取中斷處理程序的入口地址設置IP和CS。,12.4 中斷過程,CPU在收到中斷信息之后,如果處理該中斷信息,就完成一個由硬件自動執(zhí)行的中斷過程。 (程序員無法改變這個過程中所要做 的工作),12.4 中斷過程,中斷過程的主要任務就是用中斷類型碼在中斷向量表中找到中斷處理程序的

7、入口地址,設置CS和IP。 因為中斷處理程序執(zhí)行完成后,CPU還要回過頭來繼續(xù)執(zhí)行被中斷的程序, 所以要在設置CS、IP之前,先將它們的值保存起來。,12.4 中斷過程,可以看到CPU將它們保存在棧中。 我們注意到,在中斷過程中還要做的一個工作就是設置標志寄存器的TF、IF位。 對于這樣做的目的,我們將在后面的內容和下一章中進行討論。,12.4 中斷過程,因為在執(zhí)行完中斷處理程序后,需要恢復在進入中斷處理程序之前的CPU現(xiàn)場 (某一時刻,CPU中各個寄存器的值)。 所以應該在修改標記寄存器之前,將它的值入棧保存。,12.4 中斷過程,我們更簡潔的描述中斷過程,如下: (1)取得中斷類型碼N;

8、(2) pushf (3) TF = 0,IF = 0 (4) push CS (5) push IP (6)(IP) = (N*4),(CS) = (N*4+2) 在最后一步完成后,CPU 開始執(zhí)行由程序員編寫的中斷處理程序。 中斷過程演示,12.5 中斷處理程序,由于CPU隨時都可能檢測到中斷信息,也就是說,CPU 隨時都可能執(zhí)行中斷處理程序,所以中斷處理程序必須一直存儲在內存某段空間之中。 而中斷處理程序的入口地址,即中斷向量,必須存儲在對應的中斷向量表表項中。,12.5 中斷處理程序,中斷處理程序的編寫方法和子程序的比較相似,下面是常規(guī)的步驟: (1)保存用到的寄存器。 (2)處理中斷

9、。 (3)恢復用到的寄存器。 (4)用 iret 指令返回。 iret指令的功能用匯編語法描述為: pop IP pop CS popf,12.5 中斷處理程序,iret通常和硬件自動完成的中斷過程配合使用。 可以看到,在中斷過程中,寄存器入棧的順序是標志寄存器、CS、IP ,而iret的出棧順序是 IP、CS、標志寄存器,剛好和其對應,實現(xiàn)了用執(zhí)行中斷處理程序前的CPU現(xiàn)場恢復標志寄存器和CS、IP的工作。,12.5 中斷處理程序,iret指令執(zhí)行后,CPU回到執(zhí)行中斷處理程序前的執(zhí)行點繼續(xù)執(zhí)行程序。,12.6 除法錯誤中斷的處理,下面的內容中,我們通過對 0號中斷,即除法錯誤的中斷處理,來

10、體會一下前面所講的內容。,12.6 除法錯誤中斷的處理,當CPU執(zhí)行div等除法指令的時候,如果發(fā)生了除法溢出錯誤,將產生中斷類型碼為 0 的中斷信息,CPU將檢測到這個信息,然后引發(fā)中斷過程,轉去執(zhí)行 0 號中斷所對應的中斷處理程序。,12.6 除法錯誤中斷的處理,我們看一下下面的程序的執(zhí)行結果: mov ax,1000h mov bh,1 div bh,12.7 編程處理 0 號中斷,現(xiàn)在我們考慮改變一下0號中斷處理程序的功能,即重新編寫一個0號中斷處理程序,它的功能是在屏幕中間顯示“overflow!”后,然后返回到操作系統(tǒng)。 如下圖所示,12.6 除法錯誤中斷的處理,12.7 編程處理

11、 0 號中斷,當CPU執(zhí)行div bh時,發(fā)生了除法溢出錯誤,產生0號中斷信息,從而引發(fā)中斷過程,CPU執(zhí)行我們編寫的0號中斷處理程序。 在屏幕中間顯示提示信息“overflow!”后,返回到操作系統(tǒng)中。,12.7 編程處理 0 號中斷,編程:當發(fā)生除法溢出時,在屏幕中間顯示“overflow!”,返回DOS。 分析,12.7 編程處理 0 號中斷,分析(1)當發(fā)生除法溢出的時候,產生0號中斷信息,從而引發(fā)中斷過程。 此時,CPU將進行以下工作: 取得中斷類型碼0; 標志寄存器入棧,TF、IF設置為0; CS、IP入棧; (IP) = (0*4),(CS) = (0*4+2),12.7 編程處

12、理 0 號中斷,分析(2)可見 ,當中斷 0 發(fā)生時,CPU將轉去執(zhí)行中斷處理程序。 只要按如下步驟編寫中斷處理程序,當中斷0發(fā)生時,即可顯示“overflow!”。 相關處理。 向顯示緩沖區(qū)送字符串“overflow!”。 返回DOS,12.7 編程處理 0 號中斷,我們將這段程序稱為do0。 分析(3)現(xiàn)在的問題是:do0 應放在內存中。 因為除法溢出隨時可能發(fā)生,CPU隨時都可能將 CS:IP指向 do0的入口,執(zhí)行程序。,12.7 編程處理 0 號中斷,那么do0應該放在哪里呢? 由于我們是在操作系統(tǒng)之上使用計算機,所有的硬件資源都在操作系統(tǒng)的管理之下,所以我們要想得到一塊內存存放do

13、0,應該向操作系統(tǒng)申請。,12.7 編程處理 0 號中斷,但在這里出于兩個原因我們不想這樣做: 過多地討論申請內存將偏離問題主線; 我們學習匯編的一個重要目的就是要獲得對計算機底層的編程體驗。 所以,在可能的情況下,我們不去理會操作系統(tǒng),而直接面向硬件資源。,12.7 編程處理 0 號中斷,問題變得簡單而直接,我們只需找到一塊別的程序不會用到的內存區(qū),將do0傳送到其中即可。 前面講到,內存0000:00000000:03FF,大小為1KB的空間是系統(tǒng)存放中斷處理程序入口地址的中斷向量表。,12.7 編程處理 0 號中斷,8086 支持 256 個中斷,但是,實際上,系統(tǒng)中要處理的中斷事件遠沒

14、有達到256 個 。 所以在中斷向量表中,有許多單元是空的。 中斷向量表是PC系統(tǒng)中最重要的內存區(qū),只用來存放中斷處理程序的入口地址,DOS 系統(tǒng)和其他應用程序都不會隨便使用這段空間。,12.7 編程處理 0 號中斷,我們可以利用中斷向量表中的空閑單元來存放我們的程序。 一般情況下: 從0000:0200至0000:02FF的256個字節(jié)的空間所對應的中斷向量表項都是空的,操作系統(tǒng)和其他應用程序都不占用。 我們在前面的課程中使用過這段空間(參見5.7節(jié))。,12.7 編程處理 0 號中斷,根據(jù)以前的編程經驗,我們可以估計出,do0的長度不可能超過256個字節(jié)。 結論:我們可以將do0傳送到內存

15、0000:0200處。,12.7 編程處理 0 號中斷,分析(4 - 1) 我們將中斷處理程序do0放到 0000:0200 后,若要使得除法溢出發(fā)生的時候,CPU轉去執(zhí)行do0,則必須將do0的入口地址,即0000:0200登記在中斷向量表的對應表項中。,12.7 編程處理 0 號中斷,分析(4 - 2) 因為除法溢出對應的中斷類型碼為0,它的中斷處理程序的入口地址應該從04地址單元開始存放,段地址存放在 04+2 字單元中,偏移地址存放在04字單元中。,12.7 編程處理 0 號中斷,分析(4 - 3) 也就是說要將do0的段地址0存放在 0000:0002 字單元中 ,將偏移地址200H

16、存放在0000:0000字單元中。,12.7 編程處理 0 號中斷,總結上面的分析,我們要做以下幾件事情: (1)編寫可以顯示“overflow!”的中斷處理程序:do0; (2)將do0送入內存0000:0200處; (3)將do0的入口地址0000:0200存儲在中斷向量表0號表項中。 程序框架,12.7 編程處理 0 號中斷,程序12.1,assume cs:code code segment start: do0安裝程序 設置中斷向量表 mov ax,4c00h int 21h do0: 顯示字符串“overflow!” mov ax,4c00h int 21h code ends e

17、nd start,12.7 編程處理 0 號中斷,我們可以看到,上面的程序分為兩部分: (1)安裝do0,設置中斷向量的程序 (2)do0 程序12.1執(zhí)行時,do0的代碼是不執(zhí)行的,它只是作為do0安裝程序所要傳送的數(shù)據(jù)。,12.7 編程處理 0 號中斷,程序12.1執(zhí)行時,首先執(zhí)行do0安裝程序,將 do0 的代碼拷貝到內存 0:200處,然后設置中斷向量表,將do0的入口地址,即偏移地址200H和段地址0,保存在0號表項中。 這兩部分工作完成后,程序就返回了。,12.7 編程處理 0 號中斷,程序的目的就是在內存0:200處安裝do0 的代碼,將0號中斷處理程序的入口地址設置為0:200

18、。 do0的代碼雖然在程序中,卻不在程序執(zhí)行的時候執(zhí)行。它是在除法溢出發(fā)生的時候才得以執(zhí)行的中斷處理程序。,12.7 編程處理 0 號中斷,do0部分代碼的最后兩條指令是依照我們的編程要求,用來返回DOS的。 現(xiàn)在,我們在反過來從CPU的角度看一下,什么是中斷處理程序?,12.7 編程處理 0 號中斷,我們來看一下do0是如何變成0號中斷的中斷處理程序的: (1)程序12.1 在執(zhí)行時,被加載到內存中,此時do0的代碼在程序12.1 所在的內存空間中,它只是存放在程序12.1的代碼段中的一段要被傳送到其他單元中的數(shù)據(jù),我們不能說它是0號中斷的中斷處理程序;,12.7 編程處理 0 號中斷,do

19、0是如何變成0號中斷的中斷處理程序的: (2)程序12.1中安裝do0 的代碼執(zhí)行完后,do0的代碼被從程序12.1的代碼段中拷貝到0:200處。此時,我們也不能說它是0號中斷的中斷處理程序,它只不過是存放在0:200處的一些數(shù)據(jù);,12.7 編程處理 0 號中斷,do0是如何變成0號中斷的中斷處理程序的: (3)程序12.1中設置中斷向量表的代碼執(zhí)行完后,在0號表項中填入了do0的入口地址0:200,此時0:200 處的信息,即do0 的代碼,就變成了0號中斷的中斷處理程序。 因為當除法溢出(即0號中斷)發(fā)生時,CPU將執(zhí)行0:200處的代碼。,12.7 編程處理 0 號中斷,回憶以下: 我

20、們如何讓一個內存單元成為棧頂? 將它的地址放入SS、SP中; 我們如何讓,一個內存單元中的信息被CPU當作指令來執(zhí)行? 將它的地址放入CS、IP中; 那么,我們如何讓一段程序成為N號中斷的中斷處理程序? 將它的入口地址放入中斷向量表的N號表項中。,12.7 編程處理 0 號中斷,下面的內容中,我們討論每一部分程序的具體編寫方法。,12.8 安裝,我們可以使用movsb指令,將do0的代碼送入0:0200處。 程序框架,12.8 安裝,我們來看一下,用rep movsb指令的時候需要確定的信息: (1)傳送的原始位置,段地址:code,偏移地址:offset do0; (2)傳送的目的位置:0:

21、200; (3)傳送的長度:do0部分代碼的長度; (4)傳送的方向:正向。 更明確的程序,12.8 安裝,assume cs:code code segment start: 設置es:di指向目的地址 設置ds:si指向源地址 設置cx為傳輸長度 設置傳輸方向為正 rep movsb 設置中斷向量表 mov ax,4c00h int 21h do0: 顯示字符串“overflow!” mov ax,4c00h int 21h code ends end start,assume cs:code code segment start: mov ax,cs mov ds,ax mov si,o

22、ffset do0;設置ds:si指向源地址 mov ax,0 mov es,ax mov di,200h ;設置es:di指向目的地址 mov cx,do0部分代碼的長度;設置cx為傳輸長度 cld ;設置傳輸方向為正 rep movsb 設置中斷向量表 mov ax,4c00h int 21h do0: 顯示字符串“overflow!” mov ax,4c00h int 21h code ends end start,12.8 安裝,問題是,我們如何知道do0代碼的長度? 最簡單的方法是,計算一下do0 所有指令碼的字節(jié)數(shù)。 但是這樣做太麻煩了,因為只要do0的內容發(fā)生了改變,我們都要重新

23、計算它的長度。,12.8 安裝,我們可以利用編譯器來計算do0的長度。 具體做法,assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset do0;設置ds:si指向源地址 mov ax,0 mov es,ax mov di,200h ;設置es:di指向目的地址 mov cx,offset do0end-offset do0;設置cx為傳輸長度 cld ;設置傳輸方向為正 rep movsb 設置中斷向量表 mov ax,4c00h int 21h do0: 顯示字符串“overflow!” mov ax,4c0

24、0h int 21h do0end:nop code ends end start,12.8 安裝,“-”是編譯器識別的運算符號,編譯器可以用它來進行兩個常數(shù)的減法。 比如:mov ax,8-4,被編譯器處理為指令: mov ax,4。 編譯器可以處理表達式,比如: 指令: mov ax,(5+3)*5/10,被編譯器處理為指令: mov ax,4,12.8 安裝,好了,知道了“-”的含義,對于用offset do0end-offset do0,得到do0代碼的長度的原理,我們就不再多說了,相信到現(xiàn)在,讀者已經可以自己進行分析了。 下面我們編寫do0程序。,12.9 do0,do0程序的主要任

25、務是顯示字符串,程序如下:,do0:設置ds:si指向字符串 mov ax,0b800h mov es,ax mov di,12*160+36*2;設置es:di指向顯存空間的中間位置 mov cx,9 ;設置cx為字符串長度 s: mov al,si mov es:di,al inc si add di,2 loop s mov ax,4c00h int 21h do0end:nop,12.9 do0,程序寫好了,可要顯示的字符串放在哪里呢? 我們看程序12.2源碼,12.9 do0,程序12.2看似合理,可實際上卻大錯特錯。 錯誤分析,12.9 do0,程序12.2錯誤分析 注意,“ove

26、rflow!”在程序12.2的data段中。程序12.2執(zhí)行完成后返回,它所占用的內存空間被系統(tǒng)釋放,而在其中存放的“overflow!”也將很可能被別的信息覆蓋;,12.9 do0,程序12.2錯誤分析(續(xù)) 而do0程序被放到了0:200處,隨時都會因發(fā)生了除法溢出而被CPU 執(zhí)行,很難保證 do0 程序從原來程序12.2所處的空間中取得的是要顯示的字符串“overflow!”。,12.9 do0,因為 do0 程序隨時可能被執(zhí)行,而它要用到字符串“overflow”,所以該字符串也應該存放在一段不會被覆蓋的空間中。 正確的程序如下: 程序12.3源碼,12.9 do0,在程序12.3中,

27、我們將“overflow!”放到do0程序中,程序12.3執(zhí)行時,將標號do0到標號do0end之間的內容送到0000:0200處。,12.9 do0,注意,因為在do0程序開始處的“overflow!”不是可以執(zhí)行的代碼,所以在“overflow!”之前加上一條jmp 指令,轉移到正式的do0 程序。 當除法溢出發(fā)生時,CPU 執(zhí)行0:200 處的jmp 指令,跳過后面的字符串,轉到正式的do0 程序執(zhí)行。,12.9 do0,do0程序執(zhí)行過程中必須要找到“overflow!”,那么它在哪里呢? 首先來看段地址,“overflow!”和do0的代碼處于同一個段中,而除法溢出發(fā)生時,CS中必然

28、存放do0的段地址,也就是“overflow!”的段地址;,12.9 do0,再來看偏移地址,0:200處的指令為jmp short do0start ,這條指令占兩個字節(jié),所以“overflow!”的偏移地址為202h 。,12.10 設置中斷向量,下面,我們將do0的入口地址0:200,寫入中斷向量表的 0 號表項中,使do0成為0 號中斷的中斷處理程序。,12.10 設置中斷向量,0號表項的地址為0:0,其中0:0字單元存放偏移地址,0:2字單元存放段地址。 程序如下: mov ax,0 mov es,ax mov word ptr es:0*4,200h mov word ptr es

29、:0*4+2,0,12.11 單步中斷,基本上,CPU在執(zhí)行完一條指令之后,如果檢測到標志寄存器的TF位為1,則產生單步中斷,引發(fā)中斷過程。單步中斷的中斷類型碼為1,則它所引發(fā)的中斷過程如下: (1)取得中斷類型碼1; (2)標志寄存器入棧,TF、IF設置為0; (3) CS、IP入棧; (4)(IP)=(1*4),(CS)=(1*4+2)。,12.11 單步中斷,如上所述,如果TF=1,則執(zhí)行一條指令后,CPU就要轉去執(zhí)行1號中斷處理程序。 CPU為什么要提供這樣的功能呢?,12.11 單步中斷,我們在使用Debug的T命令的時候,有沒有想過這樣的問題,Debug如何能讓CPU在執(zhí)行一條指令

30、后,就顯示各個寄存器的狀態(tài)? 我們知道,CPU在執(zhí)行程序的時候是從CS:IP指向的某個地址開始,自動向下讀取指令執(zhí)行。,12.11 單步中斷,也就是說,如果CPU不提供其他功能的話,就按這種方式工作,只要CPU一加電,它就從預設的地址開始一直執(zhí)行下去,不可能有任何程序能控制它在執(zhí)行完一條指令后停止,去做別的事情。,12.11 單步中斷,可是,我們在Debug中看到的情況卻是,Debug可以控制CPU執(zhí)行被加載程序中的一條指令,然后讓它停下來,顯示寄存器的狀態(tài)。 Debug有特殊的能力嗎?,12.11 單步中斷,我們只能說Debug利用了CPU提供的一種功能。 只有CPU提供了在執(zhí)行一條指令后就

31、轉去做其他事情的功能,Debug或是其他的程序才能利用CPU提供的這種功能做出我們使用T命令時的效果。,12.11 單步中斷,好了,我們來簡要地考慮一下Debug是如何利用CPU所提供的單步中斷的功能的。 首先,Debug提供了單步中斷的中斷處理程序,功能為顯示所有寄存器中的內容后等待輸入命令。,12.11 單步中斷,然后,在使用 T 命令執(zhí)行指令時,Debug 將TF設置為 1,使得CPU在工作于單步中斷方式下,則在CPU執(zhí)行完這條指令后就引發(fā)單步中斷,執(zhí)行單步中斷的中斷處理程序,所有寄存器中的內容被顯示在屏幕上,并且等待輸入命令。,12.11 單步中斷,那么,接下來的問題是,當TF=1時,

32、CPU在執(zhí)行完一條指令后將引發(fā)單步中斷,轉去執(zhí)行中斷處理程序。 注意,12.11 單步中斷,注意:中斷處理程序也是由一條條指令組成的,如果在執(zhí)行中斷處理程序之前,TF=1,則CPU在執(zhí)行完中斷處理程序的第一條指令后,又要產生單步中斷,則又要轉去執(zhí)行單步中斷的中斷處理程序,在執(zhí)行完中斷處理程序的第一條指令后,又要產生單步中斷,則又要轉去執(zhí)行單步中斷的中斷處理程序,12.11 單步中斷,看來,上面的過程將陷入一個永遠不能結束的循環(huán),CPU永遠執(zhí)行單步中斷處理程序的第一條指令。,12.11 單步中斷,CPU當然不能讓這種情況發(fā)生,解決的辦法就是,在進入中斷處理程序之前,設置TF=0。 從而避免CPU在執(zhí)行中斷處理程序的時候發(fā)生單步中斷。 這就是為什么在中斷過程中有 TF=0這個步驟。,12.11 單

溫馨提示

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

評論

0/150

提交評論