匯編語言的基本語法講課文檔_第1頁
匯編語言的基本語法講課文檔_第2頁
匯編語言的基本語法講課文檔_第3頁
匯編語言的基本語法講課文檔_第4頁
匯編語言的基本語法講課文檔_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言的基本語法第一頁,共83頁。1.1.匯編語言源程序的格式DATA SEGMENTAT2000HARRAY DBa1,a2,a3,…a10(a1~a10為立即數)COUNT EQU$-ARRAYSUM DW?DATA ENDSSTACK SEGMENTPARASTACK‘STACK’STAK DB10DUP(?)TOP EQULENGTHSTAKSTACK ENDS第二頁,共83頁。CODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA MOVDS,AX MOVAX,0 MOVDI,OFFSETSUM MOVBX,OFFSETARRAY MOVCX,COUNTLOP:ADDAL,[BX] ADCAH,0 INCBX LOOPLOP MOV[DI],AX MOVAH,4CH INT 21HCODE ENDS END START第三頁,共83頁。

匯編語言源程序格式的特點是: 1.分段結構 2.語句行 匯編語言程序的語句有兩類: (1)指令性語句 (2)指示性語句第四頁,共83頁。匯編語言源程序語句的格式

匯編語言源程序中的每個語句可以由四項組成,格式如下:

[名字]操作操作數[;注釋]

其中:

名字項是指一個標號或變量。

操作項是一個操作碼的助記符,它可以是指令、偽指令或宏指令名。

第五頁,共83頁。操作數項由一個或多個表達式組成,它提供為執(zhí)行所要求的操作而需要的信息。操作數項可以是常數、寄存器、標號、變量或由表達式組成。

注釋項用來說明程序或語句的功能。";"為識別注釋項的開始。";"也可以從一行的第一個字符開始,此時整行都是注釋,常用來說明下面一段程序的功能。第六頁,共83頁。

上面四項中帶方括號的兩項是可選項。各項之間必須用"空格"(space)或"水平制表"(Tab)符隔開。

(1)名字項

(2)操作項

(3)操作數項

(4)注釋項

第七頁,共83頁。

(1)名字項

源程序中用下列字符來表示名字:

字母A~Z

數字0~9

專用字符?、·、@、-、$

除數字外,所有字符都可以放在源語句的第一個位置。名字中如果用到·則必須是第一個字符??梢杂煤芏嘧址麃碚f明名字,但只有前面的31個字符能被匯編程序所識別。

第八頁,共83頁。

一般說來,名字項可以是標號或變量。它們都用來表示本語句的符號地址,都是可有可無的,只有當需要用符號地址來訪問該語句時它才需要出現。

·標號:標號在代碼段中定義,后面跟著冒號:,此外,它還可以作為過程名定義。

·變量:變量在數據段或附加數據段中定義,后面不跟冒號。變量經常在操作數字段出現。

第九頁,共83頁。

(2)操作項

操作項可以是指令、偽指令或宏指令的助記符。對于指令,匯編程序將其翻譯為機器語言指令。對于偽指令,匯編程序將根據其所要求的功能進行處理。對于宏指令,則將根據其定義展開。

第十頁,共83頁。(3)操作數項

操作數項由一個或多個表達式組成,多個操作數項之間一般用逗號分開。對于指令,操作數項一般給出操作數地址,它們可能有一個,或二個,或三個,或一個也沒有。對于偽操作或宏指令,則給出它們所要求的參數。

操作數項可以是常數、寄存器、標號、變量或由表達式組成。

第十一頁,共83頁。

(4)注釋項

注釋項用來說明一段程序、一條或幾條指令的功能。對于匯編語言程序來說,注釋項的作用是很明顯的,它可以使程序容易被讀懂,因此匯編語言程序必須寫好注釋。注釋應該寫出本條(或本段)指令在程序中的功能和作用,而不應該只寫指令的動作。讀者在有機會閱讀程序例子時,應注意學習注釋的寫法,在編制程序時,更應學會寫好注釋。

第十二頁,共83頁。指令性語句 格式為: [標號]:操作碼[操作數][;注釋] 帶方括號的為任選項, 標號是指令的符號地址, 操作碼和操作數是用匯編語言指令表示的指令部分, 注釋是對該語句在本程序中的功能的說明。第十三頁,共83頁。指示性語句 格式為:[名字/變量]命令[參數][;注釋] 命令指示匯編程序進行某種匯編操作, 參數是有關的數據, 名字是段名、符號名等標識符,變量用變量名表示。第十四頁,共83頁。常量、標識符和表達式一、常量 其值在程序中不能改變的量, 在匯編語言源程序中的常量有: 數字常量、字符常量和符號常量(1)數字常量可以是二進制數、八進制數、十進制數或十六進制數表示(2)字符常量是用單引號‘’括起來的ASCII字符,其值是該字符的ASCII代碼值第十五頁,共83頁。(3)符號常量是用標識符定義的常量。 例如,采用符號定義語句PORTAEQU80H, 則指令MOVAL,PORTA 與指令MOVAL,80H等價。二、標識符 在編程時建立的有特定意義的字符序列,標識符可用作符號常量、名字、變量和標號等。 組成標識符有如下規(guī)定:

第十六頁,共83頁。

(1)組成標識符的字符有: 英文大寫字母:A~Z; 英文小寫字母:a-z; 數字0~9; 字符?、@、_、$; (2)字符長度不超過3l個; (3)首字符不能是數字; (4)?不能單獨作為一個標識符; (5)不能把保留字用作標識符,保留字包括助記符、寄存器名等。第十七頁,共83頁。三、表達式表達式是常數、標號、變量與一些操作符相組合的序列,可以有數字表達式和地址表達式兩種。在匯編期間,匯編程序按照一定的優(yōu)先規(guī)則對表達式進行計算后可得到一個數值或一個地址。

常用的表達式操作符介紹如下:第十八頁,共83頁。 (1)算術操作符

算術操作符有+、-、*、/和MOD。

MOD是指除法運算后得到的余數,如19/7的商是2,而19MOD7則為5(余數)。

第十九頁,共83頁。算術操作符可以用于數字表達式或地址表達式中,但當它用于地址表達式時,只有當其結果有明確的物理意義時才是有效的結果。例如兩個地址相乘或相除是無意義的。在地址表達式中,可以使用+或-,但也必須注意其物理意義。

第二十頁,共83頁。例如把兩個不同段的地址相加也是無意義的。經常使用的是地址±數字量,它是有意義的。例如SUM+1是指SUM字節(jié)單元的下一個字節(jié)單元的地址(注意:不是指SUM單元的內容加1),而SUM-1則是指SUM字節(jié)單元的前一個字節(jié)單元的地址。

例:如果要求把首地址為BLOCK的字數組的第6個字傳送到DX寄存器,可用指令如下:

MOVDX,BLOCK+(6-1)*2

第二十一頁,共83頁。

例:如數組ARRAY定義如下,寫出把數組長度(字數)存入CX寄存器的指令。

ARRAYDW1,2,3,4,5,6,7

ARYENDDW?

其中ARYEND是為計算數組長度而建立的符號地址,所需指令如下:

MOVCX,(ARYEND-ARRAY)/2

匯編程序在匯編期間將計算出表達式的值而形成指令:

MOVCX,7

第二十二頁,共83頁。(2)邏輯操作符邏輯操作符有:AND(與)、OR(或)、XOR(異或)、NOT(非)。

邏輯操作符都是按位操作的,只能用于數字表達式中。邏輯操作符要求匯編程序對其前后兩個操作數(或表達式)作指定的邏輯操作。

第二十三頁,共83頁。

例:

OUTPORT_VALAND0FEH,AL

上例中PORT_VAL為端口號,OUT指令中的表達式說明只為偶數號端口輸出數據。

第二十四頁,共83頁。

(3)關系操作符

關系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。

關系操作符的兩個操作數必須都是數字或是同一段內的兩個存儲器地址。計算的結果應為邏輯值:結果為真,表示為0FFFFH;結果為假,則表示為0。

第二十五頁,共83頁。例如:

MOVBX,((PORT_VALLT5)AND20)OR((PORT_VALGE5)AND30)

則當PORT_VAL<5時,匯編結果應該是:

MOVBX,20

否則,匯編結果應該是:

MOVBX,30

第二十六頁,共83頁。(4)數值回送操作符

數值回送操作符有:TYPE、LENGTH、SIZE、OFFSET、SEG等。

數值回送操作符把一些特征或存儲器地址的一部分作為數值回送。

第二十七頁,共83頁。

·TYPE

格式為:TYPE表達式

如果表達式是變量,則匯編程序將回送該變量的以字節(jié)數表示的類型:DB為1,DW為2,DD為4,DF為6,DQ為8,DT為10。如果表達式是標號,則匯編程序將回送代表該標號類型的數值:NEAR為-1,FAR為-2。如果表達式為常數,則應回送0。

第二十八頁,共83頁。舉例:

ARRAYDW1,2,3

則對于指令ADDSI,TYPEARRAY

匯編程序將其形成為:

ADDSI,2

第二十九頁,共83頁?!ENGTH

格式為:LENGTH變量

對于變量中使用DUP的情況,匯編程序將回送分配給該變量的單元數,而對于其他情況則送1。

第三十頁,共83頁。舉例1:

FEESDW100DUP(0)

對于指令MOVCX,LENGTHFEES

匯編程序將使其形成為:

MOVCX,100舉例2:

ARRAYDW1,2,3

對于指令MOVCX,LENGTHARRAY匯編程序將使其形成為:

MOVCX,1

第三十一頁,共83頁。舉例3:

TABLEDB‘ABCD’

對于指令MOVCX,LENGTHTABLE

匯編程序將使其形成為:

MOVCX,1

第三十二頁,共83頁?!IZE

格式為:SIZE變量

匯編程序應回送分配給該變量的字節(jié)數。但是,此值是LENGTH值和TYPE值的乘積。

第三十三頁,共83頁。例如:

MOVCX,SIZEFEES

將形成為MOVCX,200

又例如:

MOVCX,SIZEARRAY

將形成為MOVCX,2

又例如:

MOVCX,SIZETABLE

將形成為MOVCX,1。

第三十四頁,共83頁?!FFSET

格式為:OFFSET變量或標號

匯編程序將回送變量或標號的偏移地址值。

舉例:

MOVBX,OFFSETOPER_ONE

匯編程序將OPER_ONE的偏移地址作為立即數回送給指令,而在執(zhí)行時則將該偏移地址裝入BX寄存器中。所以這條指令的功能與指令

LEABX,OPER_ONE

是等價的。

第三十五頁,共83頁?!EG

格式為:SEG變量或標號

匯編程序將回送變量或標號的段地址值。

舉例:如果DATA_SEG是從存儲器的05000H地址開始的一個數據段的段名,OPER1是該段中的一個變量名,則

MOVBX,SEGOPER1

將把0500H作為立即數插入指令。實際上,由于段地址是由連接程序分配的,所以該立即數是連接時插入的。執(zhí)行期間則使BX寄存器的內容成為0500H。

第三十六頁,共83頁。·PTR

格式為:類型PTR符號地址

PTR用來給已分配的存儲地址(用符號地址表示)賦予另一種屬性,使該地址具有另一種類型。

類型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和FAR等幾種,所以PTR也可以用來建立字、雙字、四字或段內及段間的指令單元等。

第三十七頁,共83頁。舉例:已有數據定義如下:TWO_BYTEDW?

可以用以下語句對這兩個字節(jié)賦予另一種類型定義:ONE_BYTEEQUBYTEPTRTWO_BYTE

這里ONE_BYTE和TWO_BYTE兩個符號地址具有相同的段地址和偏移地址,但是它們的類型屬性不同,前者為1,后者為2。

第三十八頁,共83頁。此外,有時指令要求使用PTR操作符。例如用

MOV[BX],5

指令把立即數存入BX寄存器內容指定的存儲單元中,但匯編程序不能分清是存入字單元還是字節(jié)單元,此時必須用PTR操作符來說明屬性,應該寫明:

MOVBYTEPTR[BX],5

或MOVWORDPTR[BX],5

第三十九頁,共83頁?!ざ尾僮鞣?/p>

段操作符用來表示一個標量、變量或地址表達式的段屬性。

格式為:

段寄存器∶地址表達式

段名∶地址表達式

例如,用段前綴指定某段的地址操作數

MOVAX,ES:[BX+SI]

第四十頁,共83頁。·SHORT

用來修飾JMP指令中轉向地址的屬性,指出轉向地址是在下一條指令地址的±127個字節(jié)范圍之內。

例如:JMPSHORTTAG;轉移屬性為短轉移

.

.

.

TAG:MOV...

第四十一頁,共83頁。·THIS

格式為:THIS屬性或類型

THIS可以象PTR一樣建立一個指定類型(BYTE、WORD、DWORD)或指定距離(NEAR或FAR)的地址操作數。該操作數的段地址和偏移地址與下一個存儲單元地址相同。

第四十二頁,共83頁。

例如:FIRST_TYPEEQUTHISBYTE

WORD_TABLEDW100DUP(?)

此時FIRST_TYPE的偏移地址和WORD_TABLE完全相同,但它是字節(jié)類型的;而WORD_TABLE則是字類型的。

又如:STARTEQUTHISFAR

MOVCX,100

這樣,MOV指令有一個FAR屬性的符號地址START,這就允許其他段的JMP指令直接跳轉到START來。

第四十三頁,共83頁?!IGH和LOW

稱為字節(jié)分離操作符,它接收一個數或地址表達式,HIGH取其高位字節(jié),LOW取其低位字節(jié)。

例如:

CONSTEQU0ABCDH

則MOVAH,HIGHCONST

將匯編成MOVAH,0ABH

指令MOVAH,LOWCONST

將匯編成MOVAH,0CDH

第四十四頁,共83頁?!げ僮鞣膬?yōu)先級

我們知道表達式是常數、寄存器、標號、變量和操作符的組合,在計算表達式時,應該首先計算優(yōu)先級高的操作符,然后從左到右地對優(yōu)先級相同的操作符進行計算。括號也可以改變計算次序,括號內的表達式應優(yōu)先計算。

第四十五頁,共83頁。表達式中的運算符高優(yōu)先級低1括號中的項,即(…)和[…]2LENGTH,SIZE,WIDTH,MASK3PTR,OFFSET,SEG,TYPE,THIS4×,/,MOD5+,-6EQ,NE,L,LE,GT,GE7NOT8AND9OR,XOR第四十六頁,共83頁。偽指令(指示性語句)偽指令又稱為偽操作,它是在對源程序匯編期間由匯編程序處理的操作,它們可以完成如定義數據、分配存儲區(qū)、指示程序結束等功能。

宏指令是由用戶按照宏定義格式編寫的一段程序,其中語句可以是指令、偽指令,甚至是已定義的宏指令。

第四十七頁,共83頁。偽指令和指令的區(qū)別在于,每一條指令必須生成機器代碼,然后在程序運行期間由CPU來執(zhí)行其操作;而偽指令是在匯編期間由匯編程序執(zhí)行的操作命令,除了數據定義及存儲器分配偽指令分配存儲器空間外,其它偽指令不生成目標碼。和各種指令一樣,偽指令也是程序設計不可缺少的工具。下面介紹一些常用的偽指令。第四十八頁,共83頁。段定義偽指令

段定義偽指令是表示一個段開始和結束的命令。段名SEGMENT

段名ENDS

第四十九頁,共83頁。段名由用戶命名。對于數據段、附加段和堆棧段來說,段內一般是存儲單元的定義、分配等偽指令語句;對于代碼段中則主要是指令及偽指令語句。

定義了段還必須說明哪個段是代碼段,哪個段是數據段。ASSUME偽指令就是建立段和段寄存器關系的偽指令,其格式為:

ASSUME段寄存器名:段名,…

段寄存器名必須是CS、DS、ES和SS中的一個,而段名必須是由SEGMENT定義的段名。

第五十頁,共83頁。

;***********************

data_seg1segment;定義數據段

data_seg1ends

;***********************

data_seg2segment;定義附加段

data_seg2ends

;***********************第五十一頁,共83頁。code_segsegment;定義代碼段

assumecs:code_seg,ds:data_seg1,es:data_seg2start:;程序執(zhí)行的起始地址

;setDSregistertocurrentdatasegment

movax,data_seg1;數據段地址

movds,ax;存入DS寄存器

;setESregistertocurrentextrasegment

movax,data_seg2;附加段地址

moves,ax;存入ES寄存器

..

code_segends;代碼段結束

;**************************

endstart

第五十二頁,共83頁。

由于ASSUME偽指令只是指定某個段分配給哪一個段寄存器,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把段地址裝入相應的段寄存器中:

MOVAX,DATA_SEG1;數據段地址

MOVDS,AX;存入DS寄存器

MOVAX,DATA_SEG2;附加段地址

MOVES,AX;存入ES寄存器

第五十三頁,共83頁。如果程序中還定義了堆棧段STACK_SEG,也需要把段地址裝入SS中:

MOVAX,STACK_SEG;堆棧段地址

MOVSS,AX;存入ES寄存器

第五十四頁,共83頁。注意,在程序中不需要用指令裝入代碼段的段地址,因為在程序初始化時,裝入程序已將代碼段的段地址裝入CS寄存器了。

第五十五頁,共83頁。程序開始和結束偽指令

在程序的開始可以用NAME或TITLE作為模塊的名字,其格式為:

NAME模塊名

TITLE文件名

表示源程序結束的偽指令的格式為:

END[標號]第五十六頁,共83頁。注意:NAME及TITLE偽指令并不是必需的,如果程序中既無NAME又無TITLE偽指令,則將用源文件名作為模塊名。END偽指令中的“標號”指示程序開始執(zhí)行的起始地址。如果多個程序模塊相連接,則只有主程序的END要加上標號,其他子程序模塊則只用END而不必指定標號。上例最后使用了ENDSTART偽指令。匯編程序將在遇END時結束匯編,并且程序在運行時從START開始執(zhí)行。第五十七頁,共83頁。數據定義及存儲器分配偽指令

8086提供了各種數據及存儲器分配偽指令,這些偽指令在匯編程序對源程序進行匯編期間,由匯編程序完成數據類型定義及存儲器分配等功能。

數據定義及存儲器分配偽指令的格式是:[變量]助記符操作數[,…,操作數][;注釋]

第五十八頁,共83頁。

數據定義及存儲器分配偽指令格式中的"變量"是操作數的符號地址,它是可有可無的,它的作用與指令語句前的標號相同,區(qū)別是變量后面不加冒號。如果語句中有變量,那么匯編程序將操作數的第一個字節(jié)的偏移地址賦于這個變量。

"注釋"字段用來說明該偽指令的功能,它也不是必須有的。

"助記符"字段說明所用偽指令的助記符。

第五十九頁,共83頁。

下面介紹常用的數據定義偽指令。

DB(definebyte)

DB偽指令用來定義字節(jié),對其后的每個數據都存儲在一個字節(jié)中。DB能定義十進制數、二進制數、十六進制數和ASCII字符,二進制數和十六進制數要分別用"B"和"H"表示,ASCII字符用單引號('')括起來。DB還是唯一能定義字符串的偽操作,串中的每個字符占用一個字節(jié)。

第六十頁,共83頁。

請看下面數據定義的例子,注意DB定義的每個數據的存儲情況,左邊第一列是匯編程序為數據分配的字節(jié)地址,第二列是相應地址中存儲的數據或ASCII字符(均用十六進制表示)。變量DATA7定義了3個數據和一個字符串,每個數據或串用","分開,它們分別存儲在偏移地址002E開始的6個字節(jié)單元中。

第六十一頁,共83頁。000019DATA1DB25;十進制數000189DATA2DB10001001B;二進制數000212DATA3DB12H;十六進制數0010ORG0010H;指定偏移地址為10h001032353931DATA4DB‘2591’;ASCII碼數0018ORG0018H;指定偏移地址為18h001800DATA5DB?;保留一個字節(jié)0020ORG0020H;指定偏移地址為20h00204D79206E616DDATA6DB'MynameisJoe';ASCII碼字符

65206973204A

6F65002E0A1002313042DATA7DB10,10H,10B,'10B';不同的數據類型第六十二頁,共83頁。

DW(defineword)

DW偽指令用來定義字,對其后的每個數據分配2個字節(jié)(1個字),數據的低8位存儲在低字節(jié)地址中,高8位存儲在高字節(jié)地址中,如下例中的變量DATA8的數據存儲在0070字地址中,其中0070字節(jié)存儲0BAH,0071字節(jié)存儲03H。DW還可存儲變量或標號的偏移地址。見下面DW偽指令的例子。

第六十三頁,共83頁。第六十四頁,共83頁。

DD(definedoubleword)

DD偽指令用來定義雙字,對其后的每個數據分配4個字節(jié)(2個字)。該偽指令同樣將數據轉換為十六進制,并根據低地址存儲低字節(jié),高地址存儲高字節(jié)的規(guī)則來存放數據。如下例DATA15的存儲情況是:00A8:0F2H,00A9H:57H,00AAH:2AH,00ABH:5CH。

用DD存入地址時,第一個字為偏移地址,第二個字為段地址。

第六十五頁,共83頁。第六十六頁,共83頁。

DQ(definequadword)

DQ偽指令用來定義4字,即64位字長的數據,DQ之后的每個數據占用8個字節(jié)(4個字)。

DT(definetenbytes)

DT偽指令用來為壓縮的BCD數據分配存儲單元,它雖然可以分配10個字節(jié)(5個字),但最多只能輸入18個數字,要注意的是,數據后面不需要加“H”。下面是DQ和DT的例子。

第六十七頁,共83頁。第六十八頁,共83頁。

DUP(duplicate)

DUP偽指令可以按照給定的次數來復制某個(某些)操作數,它可以避免多次鍵入同樣一個數據。例如,把6個FFH存入相繼字節(jié)中,可以用下面兩種方法,顯然用DUP的方法更簡便些。

存入6字節(jié)的FFH

DATA20DB0FFH0FFH0FFH0FFH0FFH0FFH;

DATA21DB6DUP(0FFH)

第六十九頁,共83頁。

DUP操作一般用來保留數據區(qū),如用數據定義偽指令"DB64DUP(?)"可保留64個字節(jié)單元。DUP還可以嵌套。

第七十頁,共83頁。表達式賦值偽操作EQU

有時程序中多次出現同一個表達式,為方便起見可以用賦植偽操作給表達式賦予一個名字,其格式如下:Expresstion_nameEQUExpresstion此后,程序中凡需要用到該表達式之處就可以用表達式名來代替。上式中表達式可以是任何有效的操作數格式,可以是任何可以求出常數值的表達式,也可以是任何有效的助記符。

第七十一頁,共83頁。EQU是一個賦值偽操作(偽指令),它給一個數據標號賦于一個常數值,但這個常數不占用存儲單元。當這個數據標號出現在程序中時,匯編程序即用它的常數值代替數據標號。EQU可以在數據段之外使用,甚至可用在代碼段中間。

第七十二頁,共83頁。

假定在數據段和代碼段中要多次使用一個數據(如25),那么在編程時凡是用到25的地方都可用數據標號COUNT來表示。如果程序想修改這個數據,那么只需修改EQU的賦值,而無須修改程序中其它部分,如COUNTER和MOV語句就不必修改。

COUNTEQU25COUNTERDBCOUNT

MOVAL,COUNT

第七十三頁,共83頁。DATAEQUHEIGHT+12;地址表達式賦以符號ALPHAEQU7;常數賦以符號名BETAEQUALPHA-2;把7-2=5賦以符號名BETAADDREQUVAR+BETA;VAR+5賦以符號名ADDRBEQU[BP+8];變址引用賦以符號名BP8EQUDS:[BP+8];加段前綴的變址引用賦以符號名P8

第七十四頁,共83頁。注意:在EQU語句的表達式中,如果有變量或標號的表達式,則在該語句前應該先給出它們的定義。如上例,ALPHA必須在BETA之前定義,否則匯編程序將指示出錯。

第七十五頁,共83頁。=

溫馨提示

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

評論

0/150

提交評論