版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第4章 匯編語言程序設計v4.1 一個源程序從寫出到執(zhí)行的過程v4.2 源程序v4.3 編輯源程序v4.4 編譯v4.5 連接v4.6 以簡化的方式進行編譯和連接v4.7 1.exe的執(zhí)行v4.8 可執(zhí)行文件中的程序裝入內存并運行的原理v4.9 程序執(zhí)行過程的跟蹤引言v現(xiàn)在我們將開始編寫完整的匯編語言程序,用編譯器將它們編譯成為可執(zhí)行文件(如:*.exe文件),在操作系統(tǒng)中運行。v這一章,我們將編寫第一個這樣的程序。4.1 一個源程序從寫出到執(zhí)行的過程v一個匯編語言程序從寫出到最終執(zhí)行的簡要過程: 編寫-編譯-連接-執(zhí)行編寫匯編源程序v使用文本編輯器(如Edit、記事本等),用匯編語言編寫匯編
2、源程序。對源程序進行編譯連接v使用匯編語言編譯程序對源程序文件中的源程序進行編譯,產(chǎn)生目標文件;再用連接程序對目標文件進行連接,生成可在操作系統(tǒng)中直接運行的可執(zhí)行文件??蓤?zhí)行文件v可執(zhí)行文件中包含兩部分內容:程序(從原程序中的匯編指令翻譯過來的機器碼)和數(shù)據(jù)(源程序中定義的數(shù)據(jù))相關的描述信息(比如:程序有多大、要占多少內存空間等)執(zhí)行可執(zhí)行文件中的程序v在操作系統(tǒng)中,執(zhí)行可執(zhí)行文件中的程序。v操作系統(tǒng)依照可執(zhí)行文件中的描述信息,將可執(zhí)行文件中的機器碼和數(shù)據(jù)加載入內存,并進行相關的初始化(比如:設置CS:IP指向第一條要執(zhí)行的指令),然后由CPU執(zhí)行程序。4.2 源程序v匯編指令v偽指令 XX
3、X segment XXX ends end assume4.2 源程序v匯編指令有對應的機器碼的指令,可以被編譯為機器指令,最終為CPU所執(zhí)行。4.2 源程序v偽指令沒有對應的機器碼的指令,最終不被CPU所執(zhí)行。v誰來執(zhí)行偽指令呢?偽指令是由編譯器來執(zhí)行的指令,編譯器根據(jù)偽指令來進行相關的編譯工作。它可以完成:數(shù)據(jù)定義,分配存儲區(qū),指示程序結束等功能。本課件由匯編網(wǎng)()制作提供 偽操作(偽指令)偽操作(偽指令) 偽操作是匯編程序對源程序進行匯編時處理的操作,完成處理器選擇、存儲模式定義、數(shù)據(jù)定義、存儲器分配、指示程序開始結束等功能。 處理器選擇偽操作 段定義偽操作 程序開始和結束偽操作 數(shù)據(jù)
4、定義及存儲器分配偽操作 表達式賦值偽操作 地址計數(shù)器與對準偽操作 基數(shù)控制偽操作定義一個段v segment和ends是一對成對使用的偽指令,這是在寫可被編譯器編譯的匯編程序時,必須要用到的一對偽指令。v segment和ends的功能是定義一個段,segment說明一個段開始,ends 說明一個段結束。v一個段必須有一個名稱來標識,使用格式為: 段名 segment 段名 ends定義一個段v一個匯編程序是由多個段組成的,這些段被用來存放代碼、數(shù)據(jù)或當作??臻g來使用。v一個有意義的匯編程序中至少要有一個段,這個段用來存放代碼。程序結束標記vEnd 是一個匯編程序的結束標記,編譯器在編譯匯編程
5、序的過程中,如果碰到了偽指令 end,就結束對源程序的編譯。v如果程序寫完了,要在結尾處加上偽指令end 。否則,編譯器在編譯程序時,無法知道程序在何處結束。v注意:不要搞混了end和ends。寄存器與段的關聯(lián)假設vassume:含義為“假設”。v它假設某一段寄存器和程序中的某一個用 segment ends 定義的段相關聯(lián)。v通過assume說明這種關聯(lián),在需要的情況下 ,編譯程序可以將段寄存器和某一個具體的段相聯(lián)系。4.2 源程序v源程序中的“程序”匯編源程序: 偽指令 (編譯器處理) 匯編指令(編譯為機器碼)程序:源程序中最終由計算機執(zhí)行、處理的指令或數(shù)據(jù)。注意注意v我們可以將源程序文件
6、中的所有內容稱為源程序,將源程序中最終由計算機執(zhí)行處理的指令或數(shù)據(jù) ,成為程序。v程序最先以匯編指令的形式存在源程序中,經(jīng)編譯、連接后轉變?yōu)闄C器碼,存儲在可執(zhí)行文件中,v圖示程序經(jīng)編譯連接后變?yōu)闄C器碼4.2 源程序v標號一個標號指代了一個地址地址。codesg:放在segment的前面,作為一個段的名稱,這個段的名稱最終將被編譯、連接程序處理為一個段的段地址。4.2 源程序v程序的結構任務:編程運算 23。v定義一個段v實現(xiàn)處理任務v程序結束v段與段寄存器關聯(lián) 匯編程序 assume cs:abc abc segment mov ax,2 add ax,ax add ax,ax abc end
7、s end 4.2 源程序v程序返回我們知道,一個程序結束后,將CPU的控制權交還給使它得以運行的程序,我們稱這個過程為:程序返回。如何返回呢?DOS中的程序運行vDOS是一個單任務操作系統(tǒng)。一個程序P2在可執(zhí)行文件中,則必須有一個正在運行的程序P1,將P2從可執(zhí)行文件中加載入內存后,將CPU的控制權交給P2,P2才能得以運行。P2開始運行后,P1暫停運行。而當P2運行完畢后,應該將CPU的控制權交還給使它得以運行的程序P1,此后,P1繼續(xù)運行。4.2 源程序v程序返回應該在程序的末尾添加返回的程序段。 mov ax,4c00H int 21Hv這兩條指令所實現(xiàn)的功能就是程序返回。v幾個和結束
8、相關的內容段結束、程序結束、程序返回參數(shù)、變量和標號參數(shù)、變量和標號v下面詳細討論匯編語言程序語句的主要部分:參數(shù) 變量名 標號v并引出相關的偽指令和操作符v本節(jié)重點掌握:常數(shù)的表達變量定義偽指令DB/DW/DD地址操作符和類型操作符變量定義偽指令變量定義偽指令v變量定義(Define)偽指令為變量申請固定長度的存儲空間,并可同時將相應的存儲單元初始化變量名 偽指令助記符 初值表 變量定義偽指令最常使用變量定義偽指令最常使用變量名v變量名為用戶自定義標識符,表示初值表首元素的表示初值表首元素的邏輯地址邏輯地址;用這個符號表示地址,常稱為符號地址v變量名可以沒有。這種情況,匯編程序將直接為初值表
9、分配空間,無符號地址v設置變量名是為了方便存取它指示的存儲單元變量定義偽指令助記符變量定義偽指令助記符v變量定義偽指令根據(jù)申請的主存空間單位分類vDB定義字節(jié)偽指令定義字節(jié)偽指令vDW定義字偽指令定義字偽指令vDD定義雙字偽指令定義雙字偽指令vDF定義3字偽指令vDQ定義4字偽指令vDT定義10字節(jié)偽指令v還有定位偽指令定義字節(jié)單元偽指令DBDB偽指令用于分配一個或多個字節(jié)單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字節(jié)量(Byte),存放一個8位數(shù)據(jù): 可以是0255的無符號數(shù) 或是128127帶符號數(shù) 也可以是字符串常數(shù)datasegment;數(shù)據(jù)段Xdb a,-5db 2 du
10、p(100),?Ydb ABCdataends字節(jié)單元定義實例字節(jié)單元定義實例 43H 42H 41H 64H 64H FBH 61HYXdata數(shù)據(jù)段偏移地址偏移地址存儲單元存儲單元0001H0002H0003H0004H0005H0006H0007H0000H初值表初值表movmov al,X al,X;此處X表示它的第1個數(shù)據(jù),故ALadecdec X+1 X+1;對X為始的第2個數(shù)據(jù)減1,故成為-6movmov Y,al Y,al;現(xiàn)在Y這個字符串成為 aBC字節(jié)變量的應用字節(jié)變量的應用定義字單元偽指令DWDW偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一
11、定是字量(Word),一個字單元可用于存放任何16位數(shù)據(jù): 一個段地址一個偏移地址 兩個字符 065535之間的無符號數(shù) 3276832767之間的帶符號數(shù)datasegment;數(shù)據(jù)段countdw 8000h,?,ABmaxint equequ 64hnumber dw maxintarraydw maxint dup(0)dataends字單元定義實例字單元定義實例 00Hnumbercountdata數(shù)據(jù)段偏移地址偏移地址存儲單元存儲單元0000H0002H0004H0006H0008H000aH 80H - - 42H 41H 64H 00H 00H 00H 00H 00H arra
12、y初值表初值表v初值表是用逗號逗號分隔的參數(shù)v主要由數(shù)值常數(shù)數(shù)值常數(shù)、表達式或?、表達式或?、DUP組成組成?表示初值不確定,即未賦初值;DUP表示重復初值DUP的格式為:重復次數(shù) DUP(重復參數(shù))DUPvdup是一個操作符,在匯編語言中同db、dw、dd 等一樣,也是由編譯器識別處理的符號。v它是和db、dw、dd 等數(shù)據(jù)定義偽指令配合使用的,用來進行數(shù)據(jù)的重復。v示例dupvdup示例db 3 dup (0) 定義了3個字節(jié),它們的值都是0, 相當于 db 0,0,0dup示例db 3 dup (0,1,2) 定義了9個字節(jié),它們是 0、1、2、0、1、2、0、1、2, 相當于 db 0
13、,1,2,0,1,2,0,1,2 dupvdup示例db 3 dup (abc,ABC) 定義了18個字節(jié),它們是 abcABCabcABCabcABC, 相當于db abcABCabcABCabcABCdupv可見,dup的使用格式如下:db 重復的次數(shù) dup (重復的字節(jié)型數(shù)據(jù))dw 重復的次數(shù) dup (重復的字型數(shù)據(jù))dd 重復的次數(shù) dup (重復的雙字數(shù)據(jù))dupvdup是一個十分有用的操作符 比如我們要定義一個容量為 200 個字節(jié)的棧段,如果不用dup,則必須用這樣的格式: stack segment dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
14、0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 stack endsdupv當然,讀者可以用dd,使程序變得簡短一些,但是如果要求定義一個容量為1000字節(jié)或10000字節(jié)的呢? 如果沒有dup,定義部分的程序就變得太長了; 有了dup就可以輕松解決。如下: stack segment db
15、 200 dup (0) stack ends 返回本課件由匯編網(wǎng)()制作提供 段定義偽操作:段定義偽操作:完整的段定義格式完整的段定義格式 data segment data segment ; 定義數(shù)據(jù)段定義數(shù)據(jù)段 data endsdata ends;-;-extra segment extra segment ; 定義附加段定義附加段 extra endsextra ends;-;-code segment code segment ; 定義代碼段定義代碼段 assume cs:code, ds:data, es:extraassume cs:code, ds:data, es:ext
16、rastart: start: mov mov ax, data ax, data mov ds mov ds, ax , ax ; 段地址段地址 段寄存器段寄存器 code endscode ends end start end startPSPPSPDSDSESESSSSSCSCSEXE程序的內存映象圖裝入模塊文件頭過程定義偽指令過程定義偽指令v格式格式:過程名字過程名字 + PROC + 類型屬性類型屬性(near/ far) 過程名字過程名字 + ENDPvfar和near是子程序調用時的參數(shù)v如果子程序和調用程序在一個段內,子程序參數(shù)設置為nearv如果子程序和調用程序不在一個段內,
17、子程序參數(shù)設置為farv“main proc far” v注釋:注釋:這是定義一個子程序的第一行。子程序名是main,類型far。就是說main這個子程序可以被不跟main在同一個段內的程序調用。即主程序和子程序的段基址不同時主程序也可以調用子程序。例如:主程序code的段基址在CS中,子程序main的段基址在ES中,且CS和ES中的內容不同,子程序的類型是far時,code可以調用main。否則,不能調用。 code segmentmain proc farmain proc far assume start: push ds mov ax, 0 push ax retmain endpma
18、in endpcode ends end startcode segmentmain proc far assume start: mov ax,4c00h int 21hmain endpcode ends end start本課件由匯編網(wǎng)()制作提供其他偽操作其他偽操作本課件由匯編網(wǎng)()制作提供 地址計數(shù)器與對準偽操作:地址計數(shù)器與對準偽操作:地址計數(shù)器地址計數(shù)器 $ :保存當前正在匯編的指令的地址保存當前正在匯編的指令的地址 ORG $+8 ; 跳過8個字節(jié)的存儲區(qū) JNE $+6 ; 轉向地址是 JNE 的首址 +6 JMP $+2 $ 用在偽操作的參數(shù)字段:用在偽操作的參數(shù)字段:表示
19、地址計數(shù)器的當前值表示地址計數(shù)器的當前值 ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 00H00H 01H 00H 02H 00H 7CH7CH 00H00H 03H 00H 04H 00H 82H82H ARRAY ARRAY 007E007E0078007800740074本課件由匯編網(wǎng)()制作提供SIZE SIZE 變量變量功能:功能:LENGTH LENGTH * * TYPE TYPEOFFSETOFFSET / SEGSEG 變量變量 / 標號標號功能:回送變量或標號的偏址功能:回送變量或標號的偏址 / / 段址段址TYPETYPE 變量變量 / 標號標號
20、/ 常數(shù)常數(shù) DB DW DD DF DQ DT NEAR FAR DB DW DD DF DQ DT NEAR FAR 常數(shù)常數(shù) 1 2 4 6 8 10 -1 -2 01 2 4 6 8 10 -1 -2 0LENGTH LENGTH 變量變量功能:回送由功能:回送由DUP定義的定義的變量的單元數(shù),其它情況回送變量的單元數(shù),其它情況回送1 1本課件由匯編網(wǎng)()制作提供類型類型 PTR PTR 表達式表達式 MOV WORD PTRPTR BX, 5段操作符段操作符 MOV ES:ES: BX, ALSHORT SHORT 標號標號 JMP SHORTSHORT NEXT本課件由匯編網(wǎng)()制
21、作提供 end本課件由匯編網(wǎng)()制作提供v后面內容僅限上機使用,可以不看上機部分上機部分4.4 編輯源程序v進入DOS方式,運行Edit,在其中編輯程序,如下圖所示:4.4 編譯v進入DOS方式,進入 C:masm 目錄,運行masm.exe。v如果源程序文件不是以 asm 為擴展名的話,就要輸入它的全名。比如p1.txt。v在輸入源程序文件名的時候一定要指明它所在的路徑。如果文件就在當前路徑下,只輸入文件名就可以。4.4 編譯v輸入要編譯的源文件文件名后,按 Enter鍵。v目標文件(*.obj)是我們對一個源程序進行編譯要得到的最終結果。v編譯程序默認要輸出的目標文件名為1.obj,所以可
22、以不必再另行指定文件名。4.4 編譯v列表文件是編譯器將源程序編譯為目標文件的過程中產(chǎn)生的中間結果。v可以不生成這個文件,直接按 Enter鍵即可。4.4 編譯v編譯程序提示輸入交叉引用文件的名稱。v這個文件同列表文件一樣,是編譯器將源程序編譯為目標文件過程中產(chǎn)生的中間結果。v可以不生成這個文件,直接按 Enter 鍵即可。4.4 編譯v對源程序的編譯結束,編譯器輸出的最后兩行告訴我們這個源程序沒有警告錯誤和必須要改正的錯誤。4.4 編譯v一般來說,有兩類錯誤使我們得不到所期望的目標文件:(1)我們程序中有“Severe Errors”;(2)找不到所給出的源程序文件。4.5 連接v在對源程序
23、進行編譯得到目標文件后,我們需要對目標文件進行連接,從而得到可執(zhí)行文件。v繼續(xù)上一節(jié)的過程,我們再將C:masm1.obj連接為C:masm1.exe。4.5 連接v進入DOS方式,進入C:masm目錄,運行l(wèi)ink.exe。v如果目標文件不是以obj為擴展名的話,就要輸入它的全名。比如:p1.bin。v在輸入目標文件名的時候,要注意指明它所在的路徑。這里,我們要連接的文件是當前路徑下1.obj,所以此處輸入“1”。4.5 連接v輸入要連接的目標文件名后,按Enter鍵。v可執(zhí)行文件是我們對一個程序進行連接要得到的最終結果。v連接程序默認要輸出的可執(zhí)行文件名為 1.EXE ,所以可以不必再另行
24、指定文件名。v我們直接按 Enter 鍵,使用連接程序設定的可執(zhí)行文件名。4.5 連接v映像文件是連接程序將目標文件連接為可執(zhí)行文件過程中產(chǎn)生的中間結果。v可以不生成這個文件,直接按 Enter 鍵即可。4.5 連接v連接程序提示輸入庫文件的名稱。v庫文件里包含了一些可以調用的子程序,如果我們的程序中調用了某一個庫文件中的子程序,就需要在連接的時候,將這個庫文件和我們的目標文件連接到一起,生成可執(zhí)行文件。v如果沒有調用任何子程序,直接按Enter鍵即可。4.5 連接v對目標文件的連接結束,連接程序輸出的最后一行告訴我們,這個程序有一個警告錯誤:“沒有棧段” ,這里我們不理會這個錯誤。4.5 連
25、接v前面我們通過對 1.obj 進行連接的過程,展示了使用連接器對目標文件進行連接的方法。v我們得到了一個新的文件 1.exe 。當然,如果連接過程中出現(xiàn)錯誤,那么我們將得不到這個可執(zhí)行文件。v連接的作用是什么呢?4.5 連接v這里再次強調一下,我們學習匯編的主要目的,就是通過用匯編語言進行編程而深入地理解計算機底層的基本工作機理,達到可以隨心所欲地控制計算機的目的。v基于這種考慮,我們的編程活動,大都是直接對硬件進行的。我們希望直接對硬件編程,卻并不希望用機器碼編程。4.5 連接v我們用匯編語言編程,就要用到 :編輯器(Edit)、編譯器(masm)、連接器(link)、調試工具(debug
26、)等所有工具,而這些工具都是在操作系統(tǒng)之上運行的程序,所以我們的學習過程必須在操作系統(tǒng)的環(huán)境中進行。4.5 連接v我們在一個操作系統(tǒng)環(huán)境中,使用了許多工具,這勢必要牽扯到操作系統(tǒng)、編譯原理等方面的知識和原理。v我們只是利用這些環(huán)境、工具來方便我們的學習,而不希望這些東西分散了我們的注意力。4.5 連接v所以,對于涉及到而又不在我們學習的主要內容之中的東西,我們只做簡單的解釋。4.5 連接v連接的作用有以下幾個:當源程序很大時,可以將它分為多個源程序文件來編譯,每個源程序編譯成為目標文件后,再用連接程序將它們連接到一起,生成一個可執(zhí)行文件;程序中調用了某個庫文件中的子程序,需要將這個庫文件和該程
27、序生成的目標文件連接到一起,生成一個可執(zhí)行文件;4.5 連接v連接的作用有以下幾個(續(xù)):一個源程序編譯后,得到了存有機器碼的目標文件,目標文件中的有些內容還不能直接用來生成可執(zhí)行文件,連接程序將這此內容處理為最終的可執(zhí)行信息。所以,在只有一個源程序文件,而又不需要調用某個庫中的子程序的情況下,也必須用連接程序對目標文件進行處理,生成可執(zhí)行文件。v注意,對于連接的過程,可執(zhí)行文件是我們要得到的最終結果。4.6 以簡化的方式進行編譯和連接v我們編譯、連接的最終目的是用源程序文件生成可執(zhí)行文件。v在這個過程中所產(chǎn)生的中間文件都可以忽略。我們可以用一種較為簡捷的方式進行編譯、連接。4.6 以簡化的方
28、式進行編譯和連接v編譯:4.6 以簡化的方式進行編譯和連接v連接:4.7 1.exe的執(zhí)行v現(xiàn)在,終于將我們的第一個匯編程序加工成了一個可在操作系統(tǒng)下執(zhí)行的程序文件。1.exe的執(zhí)行情況:v程序到底運行沒有?程序當然運行了,只是從屏幕上不可能看到任何運行結果。4.7 1.exe的執(zhí)行v我們的程序沒有像顯示器輸出任何信息。程序只是做了一些將數(shù)據(jù)送入寄存器和加法的操作,而這些事情,我們不可能從顯示屏上看出來。v程序執(zhí)行完成后,返回,屏幕上再次出現(xiàn)操作系統(tǒng)的提示符。4.8 可執(zhí)行文件中的程序裝入內存并運行的原理v在DOS中,可執(zhí)行文件中的程序P1若要運行,必須有一個正在運行的程序P2 ,將 P1 從
29、可執(zhí)行文件中加載入內存,將CPU的控制權交給它,P1才能得以運行;當P1運行完畢后,應該將CPU的控制權交還給使它得以運行的程序P2。v1.exe的執(zhí)行過程4.8 可執(zhí)行文件中的程序裝入內存并運行的原理v1.exe的執(zhí)行過程:(1)我們在提示符“C:masm”后面輸入可執(zhí)行文件的名字“1”,按Enter鍵。 問題4.1(2)1.exe中的程序運行;(3)運行結束,返回,再次顯示提示符“C:masm”。 問題4.2 問題4.1v執(zhí)行第(1)步操作時,有一個正在運行的程序將1.exe中的程序加載入內存,這個正在運行的程序是什么?它將程序加載入內存后,如何使程序得以運行? 問題4.2v執(zhí)行第(3)步
30、操作,程序運行結束后,返回到哪里?v參考內容v回答問題4.1和4.2操作系統(tǒng)的外殼v操作系統(tǒng)是由多個功能模塊組成的龐大 、復雜的軟件系統(tǒng)。任何通用的操作系統(tǒng) ,都要提供一個稱為shell(外殼)的程序 ,用戶(操作人員)使用這個程序來操作計算機系統(tǒng)工作。vDOS中有一個程序 ,這個程序在 DOS 中稱為命令解釋器,也就是DOS系統(tǒng)的shell?;卮饐栴}4.1和4.2v(1)我們在DOS中直接執(zhí)行 1.exe 時,是正在運行的command將1.exe中的程序加載入內存。v(2)command設置CPU的CS:IP指向程序的第一條指令(即程序的入口),從而使程序得以運行。v(3)程序運行結束后,返回到command中,CPU繼續(xù)運行command。4.8 可執(zhí)行文件中的程序裝入內存并運行的原理v匯編程序從寫出到執(zhí)行的過程:4.9 程序執(zhí)行過程的跟蹤v為了觀察程序的運行過程 ,我們可以使用Debug。vDebug 可以將程序加載入內存,設置CS:IP指向程序的入口,但Debug并不放棄對CPU 的控制,這樣,我們就可以使用Debug 的相關命令來單步執(zhí)行程序 ,查看每條指令指令的執(zhí)行結果。4.9 程序執(zhí)行過程的跟蹤v接下來可以用R命令看一下各個寄存器的設置情況:v可以看到,Deb
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國銀鹽相紙行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報告
- 金華浙江金華永康市信訪局編外工作人員招聘筆試歷年參考題庫附帶答案詳解
- 二零二五版科技公司股東股權分割與轉讓及上市輔導協(xié)議3篇
- 二零二五年度美容院線上線下營銷推廣合作合同8篇
- 2025年仿象牙工藝品項目可行性研究報告
- 7《健康看電視》(說課稿)2024-2025學年統(tǒng)編版道德與法治四年級上冊
- 數(shù)字差壓計行業(yè)深度研究報告
- 2025版5G通信網(wǎng)絡建設合同模板4篇
- 2025年度智能門窗系統(tǒng)定制與安裝承包合同4篇
- 2023三年級數(shù)學上冊 二 兩、三位數(shù)乘一位數(shù) 4 解決問題說課稿 冀教版
- 2024年桂林中考物理試卷
- DL∕T 5362-2018 水工瀝青混凝土試驗規(guī)程
- (正式版)JC∕T 60023-2024 石膏條板應用技術規(guī)程
- DL-T5054-2016火力發(fā)電廠汽水管道設計規(guī)范
- (權變)領導行為理論
- 2024屆上海市浦東新區(qū)高三二模英語卷
- 家用電器可靠性與壽命預測研究
- 中考語文二輪復習:詩歌鑒賞系列之邊塞軍旅詩(知識點+方法+習題)
- 2024年智慧工地相關知識考試試題及答案
- 五年級上冊脫式計算練習300題及答案
- 健康產(chǎn)業(yè)園策劃方案
評論
0/150
提交評論