版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、(一)匯編語言源程序的框架結(jié)構(gòu)一、匯編語言源程序的結(jié)構(gòu)特點 80X86/Pentium匯編語言源程序具有如下結(jié)構(gòu)特點。 (1) 80X86/Pentium匯編語言源程序是由若干個邏輯段所組成的,各個邏輯段的段名和其他屬性由段定義語句來定義和說明。 所謂邏輯段是指程序員使用段定義語句定義的段區(qū)。邏輯段與內(nèi)存中的實際物理段區(qū)并不是一一對應(yīng)的,一個物理段可能是由一個邏輯段所構(gòu)成的,也可能是由幾個邏輯段組合而成的。 80X86/Pentium系列微處理器都采用存儲器分段管理模式,因此其匯編語言源程序邏輯段代碼和數(shù)據(jù)的。1 (2)匯編語言源程序中的邏輯段分為代碼邏輯段、數(shù)據(jù)邏輯段和堆棧邏輯段三種類型。
2、代碼邏輯段 指示匯編程序在內(nèi)存中開辟一個段區(qū),用以存放該邏輯段內(nèi)所有匯編指令的機器代碼。 數(shù)據(jù)邏輯段 指示匯編程序在內(nèi)存中開辟一個段區(qū),用以存放該邏輯段所定義的所有變量以及工作緩沖區(qū)。 堆棧邏輯段 指示匯編程序在內(nèi)存中開辟一個段區(qū),用以存放堆棧,以支持系統(tǒng)進行堆棧操作(PUSH/POP操作)、過程調(diào)用、中斷處理以及在各模塊之間傳遞參數(shù)等等。2 (3)對于8086/8088和工作在實地址模式下的80X86/Pentium系列微處理器,每個物理段的最大長度均為64KB,段內(nèi)偏移地址的地址范圍為:0000H FFFFH。 當(dāng)工作在保護模式時,80286允許每個物理段的最大長度為16MB;80386、
3、80486和Pentium系列微處理器允許每個物理段的最大長度為4GB。 (4)在代碼邏輯段的開始處,必須使用ASSUME偽指令來說明各個邏輯段與各個段寄存器之間的對應(yīng)關(guān)系。但是段寄存器與邏輯段之間的真正聯(lián)系還必須要求程序員通過設(shè)置各個段寄存器(CS除外)的初值來建立,只有這樣才能真正建立起這些邏輯段的可尋址性。3 (5)8086/8088/80286只有4個段寄存器:CS、DS、ES和SS,在任意時刻,CPU只能通過這4個段寄存器來訪問它們所指向的4個物理段。 然而匯編語言源程序可能包含的邏輯段未必只有4個,在鏈接組合后,這些邏輯段所構(gòu)成的物理段也可能多于4個,因此用戶程序只能在不同時刻,將
4、段寄存器設(shè)置為不同的初值,使之在不同時刻分別指向不同的物理段。 當(dāng)用戶程序運行起來后,一個段寄存器可以在不同時刻分別指向內(nèi)存中的幾個物理段,因此一個段寄存器可以對應(yīng)于源程序中的幾個邏輯段。 80X86/Pentium系列微處理器有6個段寄存器,分別為:代碼段CS、堆棧段SS、數(shù)據(jù)段DS、附加數(shù)據(jù)段ES、FS和GS。4 (6)每個邏輯段由若干行匯編語句組成,每行只能有一條匯編語句。 (7)整個匯編語言源程序必須以END語句來結(jié)束。 該語句通知匯編程序停止匯編。END后面的標(biāo)號START通知匯編程序,將用戶程序設(shè)置為從標(biāo)號START處開始執(zhí)行,即指定操作系統(tǒng)的入口點。 (8)當(dāng)用戶程序執(zhí)行完畢后,
5、為保證系統(tǒng)流程能自動返回到DOS操作系統(tǒng),每個匯編語言源程序都必須在代碼段中包含返回到DOS操作系統(tǒng)的指令序列。5;打印輸出字符串“THIS IS A SAMPLE PROGRAM”STACKSEGMENT PARA STACK STACKDB 1024 DUP(0)STACKENDSDATASEGMENT MESSAGEDB THIS IS A SAMPLE PROGRAM DB 0DH,0AH,$DATAENDS6CODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOVAX, DATA ;建立DATA數(shù)據(jù)段的可尋址性MOVDS, AXLE
6、ABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5 ;功能號為05H的DOS系統(tǒng)功能調(diào)用,MOVDL, BX ;其作用是在顯示器上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:MOVAH, 4CH ;功能號為4cH的DOS系統(tǒng)功能調(diào)用,INT21H ;其作用是返回DOSCODEENDSEND START7二、源程序與PC DOS的接口 任何程序都是在操作系統(tǒng)的環(huán)境下運行的,用戶程序啟動后,CPU的執(zhí)行流程,即CPU控制,將從操作系統(tǒng)轉(zhuǎn)移到用戶程序。因此在編寫用戶程序時,程序員必須了解用戶程序與操作系統(tǒng)的接口。 本課程講解的匯
7、編語言源程序?qū)⒃赑C DOS環(huán)境下運行,因此必須了解匯編語言與PC DOS系統(tǒng)的接口。8 在DOS狀態(tài)下,當(dāng)執(zhí)行一條外部命令或執(zhí)行一個用戶程序時,DOS系統(tǒng)將依次完成以下工作。 (1)建立并填充程序段前綴區(qū)PSP 首先,在可用內(nèi)存最低地址區(qū)的小段邊界上,為用戶程序建立一張表,稱為程序段前綴區(qū)PSP ,其長度為256個字節(jié)。 其次,將有關(guān)用戶程序的相關(guān)信息填充到程序段前綴區(qū)PSP中。其中, 在PSP的第一個字節(jié)處(偏移地址0000H)存放一條INT 20H軟中斷指令。 INT 20H的中斷服務(wù)程序由PC DOS提供,其功能是使系統(tǒng)返回到DOS管理狀態(tài)。因此程序員可以這樣來組織用戶程序:當(dāng)CPU執(zhí)
8、行完用戶程序后,能夠跳轉(zhuǎn)到PSP開始處,去執(zhí)行INT 20H指令。9 (2)定位用戶程序并初始化各寄存器 首先,將整個用戶程序定位于PSP正下方,緊跟在PSP后面。 其次,設(shè)置各寄存器的初值如下。 DS和ES:指向PSP的第一個字節(jié),即PSP段區(qū)的段地址。 SS和SP:SS被設(shè)置為堆棧段的段基址,SP指向堆棧的棧底(取決于堆棧的長度)。 CS 和IP:CS被設(shè)置為用戶程序代碼段的段基址,IP被設(shè)置為代碼段中第一條被執(zhí)行指令的段內(nèi)偏移地址。10 (3)執(zhí)行用戶程序 從(CS):(IP)位置開始,執(zhí)行用戶程序。 DOS系統(tǒng)加載用戶程序文件.exe之后,在執(zhí)行該程序之前,各個寄存器和內(nèi)存的狀態(tài)如下圖
9、所示。11SS00FFH0000H程序段前綴區(qū)PSPINT 20H 指令低字節(jié)INT 20H 指令高字節(jié)PSP最后一個字節(jié)堆棧區(qū)第一個字節(jié)(用戶程序第一個字節(jié))堆棧區(qū)最后一個字節(jié)數(shù)據(jù)段區(qū)第一個字節(jié)數(shù)據(jù)段區(qū)最后一個字節(jié)SP棧底用戶程序第一條指令用戶程序第一條被執(zhí)行的指令用戶程序最后一條指令I(lǐng)PCS用戶堆棧段區(qū)用戶數(shù)據(jù)段區(qū)用戶代碼段區(qū)用戶程序區(qū)DS、ES可用內(nèi)存最低地址區(qū)的小段邊界12 通過以上討論可知,為保證CPU在執(zhí)行完用戶程序后能自動返回到DOS,在用戶程序中,程序員可以采取以下兩項措施。 (1)將用戶程序的主程序定義為FAR過程,該過程就是用戶程序的入口點,其最后一條指令為RET。 (2)
10、在主程序的開始處,將PSP段區(qū)的段基址DS/ES和數(shù)值0000H,即INT 20H指令的全地址,分別壓入堆棧保存,見以下三條指令。PUSHDS;保護PSP段基址MOVAX,0PUSHAX;保護INT 20H指令的段內(nèi)偏移地址 執(zhí)行這三條指令后,堆棧中就保存了程序段前綴區(qū)中的INT 20H指令的全地址。 當(dāng)CPU執(zhí)行到主程序的最后一條指令RET時,由于該過程被定義為FAR,RET指令將從堆棧中分別彈出偏移量0和PSP段基址給IP和CS,于是CPU隨后將要執(zhí)行的下一條指令就是INT 20H。執(zhí)行這條指令后,程序控制就返回到DOS。 以上這三條指令保證了程序控制能正確返回DOS,常稱為標(biāo)準(zhǔn)序。13采
11、取以上兩項措施后,匯編語言源程序的基本結(jié)構(gòu)如下例所示。;打印輸出字符串“THIS IS A SAMPLE PROGRAM”STACKSEGMENT PARA STACK STACKDB 1024 DUP(0)STACKENDSDATASEGMENT MESSAGEDB THIS IS A SAMPLE PROGRAM. DB 0DH,0AH,$DATAENDS14CODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTARTPROCFARPUSHDS ;返回DOS操作系統(tǒng)的標(biāo)準(zhǔn)序MOVAX, 0PUSHAXMOVAX, DATA ;建立DATA數(shù)據(jù)段的可尋址
12、性MOVDS, AXLEABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5 ;功能號為05H的DOS系統(tǒng)功能調(diào)用,MOVDL, BX ;其作用是在顯示器上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:RETSTARTENDPCODEENDSEND START15 說明: (1)CPU開始執(zhí)行用戶程序時,DS和ES所指向的是PSP段,沒有指向用戶程序的數(shù)據(jù)段。因此在標(biāo)準(zhǔn)序后,應(yīng)該重新設(shè)置DS或ES,使它們指向用戶程序的數(shù)據(jù)段。 MOV AX, DATA ;建立DATA數(shù)據(jù)段的可尋址性 MOV DS, AX (2)返回DOS的非
13、標(biāo)準(zhǔn)方法 不用定義主程序為FAR過程,去掉標(biāo)準(zhǔn)序部分,只需要在代碼段結(jié)束之前增加以下兩句。 MOV AH,4CH INT 21H程序執(zhí)行完畢后,系統(tǒng)同樣可以正常返回到DOS狀態(tài),如下例所示。16;打印輸出字符串“THIS IS A SAMPLE PROGRAM”STACKSEGMENT PARA STACK STACKDB 1024 DUP(0)STACKENDSDATASEGMENTMESSAGEDB THIS IS A SAMPLE PROGRAM. DB 0DH,0AH,$DATAENDSCODESEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART:
14、 MOVAX, DATA;建立DATA數(shù)據(jù)段的可尋址性MOVDS, AXLEABX, MESSAGELOOP1:CMPBYTE PTR BX, $JELOOP2MOVAH, 5;功能號為05H的DOS系統(tǒng)功能調(diào)用,其作用是在顯示器MOVDL, BX;上輸出字符(DL)INT21HINCBXJMPLOOP1LOOP2:MOVAH, 4CH;功能號為4cH的DOS系統(tǒng)功能調(diào)用,其作用是返回DOSINT21HCODEENDSEND START17(二)匯編語言的語句 語句是匯編語言源程序的基本組成單位,匯編語言源程序本身就是一個語句序列。一條語句規(guī)定了一個基本操作要求,而一個語句序列則完成一個特定的
15、任務(wù)。一、語句的種類 80X86/Pentium匯編語言擁有以下三種類型的語句。 指令性語句 由一條CPU指令所構(gòu)成的語句,指示匯編程序把該語句翻譯成對應(yīng)的機器目標(biāo)代碼。 指令性語句所指定的操作是由CPU在執(zhí)行程序時來完成的。例:MOV DS,AX;機器目標(biāo)代碼為:8EH D8H18 偽指令語句 為匯編程序提供匯編信息,并指示匯編程序執(zhí)行有關(guān)操作的語句。 在匯編過程中,匯編程序?qū)⒏鶕?jù)偽指令語句所指示的操作和提供的匯編信息,執(zhí)行相應(yīng)的操作,例如定義符號、分配存儲單元、程序分段等等。 因此偽指令語句所指定的操作是在匯編過程中,由匯編程序來完成的,偽指令語句并不產(chǎn)生機器目標(biāo)代碼。例1: SEGMEN
16、T/ENDS 該語句將源程序的分段信息(段名、段屬性等)提供給匯編程序,并指示匯編程序進行有關(guān)分段操作。19例2: MESSAGE DB THIS IS A SAMPLE PROGRAM 該語句定義了一個字節(jié)類型數(shù)組變量MESSAGE及其初始值。 匯編時,匯編程序首先定義一個名為MESSAGE的字節(jié)類型數(shù)組變量,并為其分配一個數(shù)據(jù)塊,然后把字符串常量THIS IS A SAMPLE PROGRAM存放到該數(shù)據(jù)塊中。 宏指令語句 由宏指令組成的語句。20二、語句的格式 指令性語句和偽指令語句的格式是類似的,均由4個字段組成。 指令性語句: 標(biāo)號: 前綴 指令助記符 操作數(shù),操作數(shù), ;注釋 偽指
17、令語句: 名字 偽指令定義符 操作數(shù),操作數(shù), ;注釋 標(biāo)號 表示CPU指令所在存儲單元的地址,它是一種符號地址。在程序中,標(biāo)號常常作為控制轉(zhuǎn)移類指令的轉(zhuǎn)移目標(biāo)地址。 名字 偽指令語句所定義的常量名、變量名、過程名、段名和宏指令名等。21 標(biāo)號和名字的命名方法必須符合匯編語言標(biāo)識符的定義規(guī)則如下。 以字母開頭,由字母(az或AZ,不區(qū)分大小寫)、數(shù)字(09)和部分字符(?、$ 和 下劃線_)組成,字符串長度不超過31個。 不能是匯編語言的保留字,例如:AX,AH,AL等。 指令助記符和偽指令定義符 指令助記符表示指令性語句的操作性質(zhì);偽指令定義符表示偽指令語句的偽操作功能,該字段是語句中唯一不
18、可缺省的。 指令助記符前面可以根據(jù)需要加前綴。在80X86/Pentium指令系統(tǒng)中,允許與指令助記符一起出現(xiàn)的前綴有重復(fù)前綴REP、REPE、REPNE等等。 操作數(shù) 指令性語句的操作數(shù)部分提供該指令的操作對象。該部分說明要處理的數(shù)據(jù)存放在什么位置以及如何訪問它。 偽指令語句操作數(shù)部分的格式和含義,隨偽操作命令的不同而不同。 注釋 注釋由分號“;”開始,用來對一條語句或一段程序進行說明。匯編程序并不處理該部分。22三、語句中的操作數(shù) 操作數(shù)分為以下4類。 1)常量操作數(shù) 在匯編時其值已經(jīng)確定,且在整個程序運行期間不變化的量稱為常量。常見的常量形式有以下幾種。 整型數(shù)值常量 整型數(shù)值常量就是一
19、個整型數(shù)值,我們可以使用各種進位計數(shù)制形式來表示它。 在一個整型數(shù)值的后面分別加上字母B、D、Q和H,就表示該數(shù)分別為二進制、十進制、八進制和十六進制整型數(shù)值常量。 十進制數(shù)后面的D可以省略,十六進制數(shù)的第一個數(shù)字必須是09。例如: 十進制數(shù)9可分別表示為以下五種形式: 1001B、9D、9、11Q、09H 十六進制數(shù)ABH也可表示為以下五種形式: 10101011B、171D、171、253Q、0ABH23 字符串常量 就是用單引號括起來的一個或多個字符。 字符串常量的數(shù)值就是相應(yīng)字符的ASCII碼序列。例如: ABCDE = 41H 42H 43H 44H 45H 12345 = 31H
20、32H 33H 34H 35H 5= 35H 因此,字符串常量與整型數(shù)值常量之間可以交替使用。 符號常量 符號常量是指使用偽指令EQU或 = 定義的常量標(biāo)識符。例如: PORTEQU80H TEMP =0242)寄存器操作數(shù)程序可見的寄存器名,例如 AX,BX,CX,DX 等等3)標(biāo)號、過程名和變量 標(biāo)號存放CPU指令的內(nèi)存存儲區(qū)的首字節(jié)單元的符號地址。 過程名存放過程代碼的內(nèi)存存儲區(qū)的首字節(jié)單元的符號地址。在匯編語言程序中,標(biāo)號和過程名都是代碼段內(nèi)的符號地址。25DATA12000H 變量在匯編時其值不確定,在程序運行期間其值不斷變化的量稱為變量。在匯編語言中,每一個變量都被分配一個存儲單元
21、,變量的值被存放在該存儲單元中;變量的地址就是該存儲單元的地址。為便于在程序中訪問一個變量,我們常常為該變量起一個名字,稱為變量名,在匯編程序中,變量常常以變量名的形式出現(xiàn)。我們知道,CPU只能通過存儲單元的地址來訪問存儲單元的內(nèi)容,因此CPU也只能通過變量的地址來訪問變量的內(nèi)容。因此變量名本質(zhì)上就是分配給該變量的存儲單元的符號地址,該地址可以在數(shù)據(jù)段、堆棧段或者代碼段中。78H56H變量名: DATA1變量DATA1的值 :12345678H變量DATA1的地址:(DS:2000H)MOV AX,DATA1;(AX)=5678H26 標(biāo)號、過程名和變量的屬性標(biāo)號是存放CPU指令的存儲單元的符
22、號地址,過程名是存放過程代碼的存儲區(qū)首字節(jié)單元的符號地址,變量名則是存放變量內(nèi)容的存儲單元的符號地址??梢?,標(biāo)號、過程名和變量名都與存儲器地址相關(guān)聯(lián),因此它們都具有以下三種屬性。段屬性標(biāo)號、過程名和變量名所標(biāo)識的存儲單元的段基址。偏移量屬性標(biāo)號、過程名和變量名所標(biāo)識的存儲單元的段內(nèi)偏移地址。27類型屬性變量的類型是指存放變量內(nèi)容的存儲單元的字節(jié)大小,共有以下六種。BYTE:字節(jié)WORD:字DWORD:雙字QWORD:四字FWORD:六字節(jié)TWORD:十字節(jié)標(biāo)號和過程名的類型是指標(biāo)號和過程名被引用的方式,共有以下兩種。NEAR類型:標(biāo)號或過程名在本段內(nèi)被引用。FAR類型 :標(biāo)號或過程名被其他段所
23、引用。284)表達式操作數(shù)所謂表達式是指由常量、寄存器名、標(biāo)號或變量名與運算符相組合的序列。在匯編期間,匯編程序?qū)凑找欢ǖ膬?yōu)先規(guī)則對表達式進行處理,最后將得到一個數(shù)值、一個地址值、或相應(yīng)尋址方式的機器代碼。 根據(jù)最后處理結(jié)果的類型,表達式分為兩種類型:數(shù)值表達式和地址表達式。29數(shù)值表達式最后處理結(jié)果為數(shù)值的表達式。數(shù)值表達式通常是由常量操作數(shù)與算術(shù)運算符、邏輯運算符或關(guān)系運算符連接而成。例如: MOV AX,10 * 20STRINGDB A+ 20H匯編時,匯編程序?qū)?shù)值表達式進行處理,最后得到一個數(shù)值,該數(shù)值可作為指令中的立即操作數(shù)或某存儲單元的初值。30地址表達式最后處理結(jié)果為地址
24、值或相應(yīng)尋址方式的機器代碼的表達式,通常由常量、變量名、標(biāo)號或寄存器名與運算符連接而成。地址表達式主要用來表示指令性語句中的操作數(shù)地址或轉(zhuǎn)移目標(biāo)地址。例如:JMP 2000H:0100HMOVAX,STRING + 1JMP NEXTMOVAX,BXMOVAX,ES: SI + 4 當(dāng)?shù)刂繁磉_式的值表示存儲器地址時,該表達式也具有段屬性、偏移量屬性和類型屬性。31 運算符 MASM宏匯編有六種運算符:算術(shù)運算符、邏輯運算符、移位運算符、關(guān)系運算符、分析運算符和合成運算符。 算術(shù)運算符 加 +、減 -、乘 *、除 /、求余MOD。 算術(shù)運算符可用于數(shù)值表達式中,運算結(jié)果是一個數(shù)值,例如:xdb(19+(20-10*2)/(2*3+1)ydb(19+(20-10*2)mod(2*3+1) 算術(shù)運算符也可用于地址表達式中,但表達式的運算結(jié)果必須要有明確的物理意義才有效。例如:兩個地址的相加、相乘和相除都是無意義的。32 算術(shù)運算符應(yīng)用于地址表達式的常見形式如下: 標(biāo)號或變量 數(shù)值表達式 這個地址表達式的運算結(jié)果仍然為一個標(biāo)號或變量,其類型屬性和段基址屬性都不變,但其偏移量產(chǎn)生一個位移。 例如: 設(shè)有數(shù)組ARRAY定義如下。 ARRAR DW 1,2,3,4,5,6,7 則地址表達式(ARRAR +
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保傘工班組安全競賽考核試卷含答案
- 水路危險貨物運輸員崗前生產(chǎn)安全意識考核試卷含答案
- 經(jīng)濟昆蟲產(chǎn)品加工工操作安全測試考核試卷含答案
- 電力電容器真空浸漬工崗前工作水平考核試卷含答案
- 玻纖保全保養(yǎng)工操作管理考核試卷含答案
- 2025年UV無影膠水項目合作計劃書
- 2025年橋接車輛項目合作計劃書
- 環(huán)球環(huán)評培訓(xùn)課件
- 2025年四川省廣元市中考物理真題卷含答案解析
- 2026屆八省聯(lián)考T8高三一模語文試題答案詳解課件
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人考試備考題庫及答案解析
- 房地產(chǎn)公司2025年度總結(jié)暨2026戰(zhàn)略規(guī)劃
- 2026浙江寧波市鄞州人民醫(yī)院醫(yī)共體云龍分院編外人員招聘1人筆試參考題庫及答案解析
- (2025年)新疆公開遴選公務(wù)員筆試題及答案解析
- 物業(yè)管家客服培訓(xùn)課件
- 直銷公司旅游獎勵方案
- 中央空調(diào)多聯(lián)機施工安全管理方案
- 2026年當(dāng)兵軍事理論訓(xùn)練測試題及答案解析
- 浙江省嘉興市2024-2025學(xué)年高二上學(xué)期期末檢測政治試題(含答案)
- 醫(yī)學(xué)統(tǒng)計學(xué)(12)共143張課件
- 特種設(shè)備安全檢查臺賬
評論
0/150
提交評論