微機原理匯編語言.ppt_第1頁
微機原理匯編語言.ppt_第2頁
微機原理匯編語言.ppt_第3頁
微機原理匯編語言.ppt_第4頁
微機原理匯編語言.ppt_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本章主要教學內(nèi)容 l 匯編語言和匯編程序的基本概念 l 匯編語言源程序書寫規(guī)則、語句格式及程序分段 l 偽指令語句的格式、功能及應(yīng)用 l 匯編語言源程序的建立、匯編、連接、調(diào)試及運行,第5章 匯編語言的基本表達及其運行,5.1 匯編語言和匯編程序的基本概念 5.1.1 匯編語言 匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計語言,它采用指令系統(tǒng)的助記符來表示操作碼和操作數(shù),用符號地址表示操作數(shù)地址。,5.1.2 匯編程序 用匯編語言編寫的源程序在輸入計算機后,需要將其翻譯成目標程序,計算機才能執(zhí)行相應(yīng)指令,這個翻譯過程稱為匯編,完成匯編任務(wù)的程序稱為匯編程序。 有基本匯編ASM(Assembler)和宏匯編MASM(MacroAssembler)兩種。 匯編程序以匯編語言源程序文件作為輸入,并由它產(chǎn)生兩種輸出文件:目標程序文件和源程序列表文件。 目標程序文件經(jīng)連接定位后由計算機執(zhí)行; 源程序列表文件將列出源程序、目標程序的機器語言代碼及符號表。,5.2 匯編語言源程序書寫格式 5.2.1 匯編語言源程序的分段結(jié)構(gòu) 匯編源程序一般由3個邏輯段組成,即數(shù)據(jù)段、堆棧段和代碼段。每個邏輯段以SEGMENT語句開始,以ENDS語句結(jié)束。整個源程序以END語句結(jié)束。 數(shù)據(jù)段用來在內(nèi)存中建立一個適當容量的工作區(qū),以存放常數(shù)、變量等操作數(shù)據(jù)。 堆棧段用來在內(nèi)存中建立一個適當?shù)亩褩^(qū),以便在中斷、子程序調(diào)用時使用。 代碼段包括了許多以符號表示的指令,其內(nèi)容就是程序要執(zhí)行的指令。,注:必須用ASSUME偽指令告訴匯編程序,哪一段和哪一個段寄存器相對應(yīng),即某一段地址應(yīng)該放入哪一個段寄存器 在DOS環(huán)境下,通常采用DOS的4CH號中斷功能調(diào)用使匯編語言返回DOS。 不需要再對CS和SS進行初始化,5.2.2 匯編語言源程序的語句類型和語句格式 1語句類型 8086宏匯編MASM使用的語句可以分成3種類型: 指令語句:這類指令能夠產(chǎn)生目標代碼,是CPU可以執(zhí)行的能夠完成特定功能的語句,主要由機器指令組成。在匯編時一條指令語句被翻譯成對應(yīng)的機器碼,對應(yīng)著特定的操作。 偽指令語句:偽指令語句是為匯編程序和連接程序提供一些必要控制的管理性語句,它不產(chǎn)生目標代碼,僅僅在匯編過程中告訴匯編程序應(yīng)如何匯編,并完成相應(yīng)的偽操作。 例如:告訴匯編程序源程序 有幾個段,段名,定義變量和定義過程,給變量分配存儲單元,給符號賦值,給數(shù)字或表達式命名。 宏指令語句:可包括多條指令或偽指令 。在匯編時,按照宏指令的定義,在出現(xiàn)宏指令的地方將其展開還原。,2語句格式 一般情況下,匯編語言的語句可以由以下幾部分組成: 名字 操作符 操作數(shù) ;注釋 1)名字是一個符號,它表示本條語句的符號地址。一般來說,名字可以是標號和變量,統(tǒng)稱為標識符。 名字的組成 字母A-Z,a-z;數(shù)字0-9;專用字符?. - $ 注:數(shù)字不能為名字的第一個位置 .只能出現(xiàn)在名字的第一個位置 名字最長31個字符組成 2)指令語句和偽指令語句中名字的區(qū)別 指令語句的名字之后要用冒號,而偽指令語句名字后不用 例:LAB1:MOV AX,2050H;指令語句,LAB1是名字,也是指令第一字節(jié)的符號地址 VAR1 DW 1200H;偽指令語句,VAR1是名字,也是符號地址,VAR1和VAR1+1存放00 12,指令語句中的名字一般采用標號 NEXT:MOV AX,1234H 一個標號與一條指令的地址相聯(lián)系,因此標號可以作為JMP和CALL指令的操作數(shù) JNZ NEXT CALL APAR 偽指令語句中的名字可以是變量名、段名、過程名、符號名等 BUF DW 1234H CODE SEGMENT APAR PROC,3)標號和變量的屬性 標號和變量都具備3種屬性:段屬性、偏移屬性及類型屬性。 段屬性:該屬性定義了標號和變量的段起始地址 標號的段由CS指示 變量的段通常由DS或ES指示 偏移屬性:表示標號和變量相距段起始地址的字節(jié)數(shù),16位 類型屬性:標號是在本段內(nèi)引用NEAR還是在其他段中引用FAR。 變量有幾個字節(jié)長度。由定義變量的偽指令DB、DW和 DD等決定。,2.操作符字段 操作符可以是機器指令、偽指令和宏指令的助記符。 操作數(shù)字段是操作符的操作對象。當有兩個及以上的操作數(shù)時,用逗號隔開。 注釋字段是以“;”開頭的說明部分,可以用英文或者中文書寫。注釋字段是語句的非執(zhí)行部分 。,5.3 8086匯編語言中的標識符、表達式和運算符 5.3.1 標識符 匯編語言每條語句的第一個字段是它的名字字段,名字可以是標號或變量,這兩者又稱為標識符。 重點是要掌握其組成規(guī)則和它的3個屬性。 5.3.2 表達式和運算符 在表達式中,運算符充當著重要的角色。 8086宏匯編有算術(shù)運算符、邏輯運算符、關(guān)系運算符、分析運算符和綜合運算符共5種。 下面分別討論5種運算符的作用:,(1)算術(shù)運算符用于完成算術(shù)運算,有(加法)、(減法)、(乘法)、(除法)、MOD(求余)、SHL(左移)、SHR(右移)共7種運算。 例如,將字數(shù)組B1的長度值 (字數(shù)) 存入AX寄存器,可以寫作: B1 DW 11,22,33,44,55,66 LB1 DW ? MOV AX,(LB1B1)/2 匯編后指令成為 MOV AX,6,(2)邏輯運算符的作用是對其操作數(shù)進行按位操作。邏輯運算符有AND(與)、OR(或)、XOR(異或)和NOT(非)。 例如: PORT_VAL EQU 20H OUT AL,PORT_VAL OR 5 匯編后指令成為 OUT AL,25H,(3)關(guān)系運算符的運算對象是兩個性質(zhì)相同的項目。其結(jié)果為:關(guān)系成立或不成立。有EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)共6種。結(jié)果為真,表示為0FFFFH,否則為0.,(4)分析運算符是對存儲器地址進行運算的。有5個:SEG(求段基值)、OFFSET(求偏移量)、TYPE(求變量類型)、LENGTH(求變量長度)和SIZE(求字節(jié)數(shù))。,(1) SEG操作符格式為: SEG 變量名或 標號名 回送變量或標號的段地址值。 例如:若DATA1是從存儲器06000H物理地址開始的一個數(shù)據(jù)段的段名,PADD是該段中的一個變量名。則 MOV BX,SEG PADD 相當于MOV BX,0600H,(3) TYPE操作符格式為: TYPE 變量名 或 標號名 存儲器操作數(shù)類型 TYPE返回值 BYTE 1 WORD 2 DWORD 4 NEAR -1 FAR -2 TYPE運算符加在變量前面,返回的是這個變量所對應(yīng)的TYPE返回值,如TYPE VAR1=1 TYPE運算符加在結(jié)構(gòu)前面,返回的是結(jié)構(gòu)包含的字節(jié)數(shù) 如 STUDENT STRUC NAME DB WANG NUMBER DB ? STUDENT ENDS 則:TYPE STUDENT=5 TYPE運算符加在標號前面,返回標號的屬性是NEAR還是FAR,(4) LENGTH操作符格式為: LENGTH 變量名 LENGTH和SIZE操作符只能和數(shù)據(jù)存儲器地址操作數(shù)(BYTE、WORD或者DWORD)一起使用。LENGTH對于變量中使用DUP時, 回送分配給該變量的單元數(shù); 其它情況則回送1。 例如: MULTI_WORDS DW 50 DUP(20) WORDS1 DW 20,30,40,50 則 MOV CX,LENGTH MULTE_WORDS 相當于 MOV CX,50 而 MOV CX,LENGTH WORDS1 相當于 MOV CX,1,(5) SIZE操作符格式為:SIZE 變量名 SIZE操作符回送分配給該變量的字節(jié)數(shù)相當于 LENGTH值和TYPE值的乘積。 例如: MOV CX,SIZE MULTI_WORD 相當于MOV CX,100 MOV CX,SIZE WORDS1 相當于MOV CX,2,5)屬性操作符 屬性操作符主要有PTR、段操作符、SHORT、THIS、HIGH、LOW六種。 (1) PTR操作符格式為: 類型 PTR 存儲器地址表達式 PTR將它左邊的類型指定給右邊的表達式 類型可以是BYTE WORD DWORD NEAR FAR,它 本身并不實際分配存儲器。 VAR1 DB 30H,40H VAR2 DW 2050H MOV AX,WORD PTR VAR1;將4030HAX MOV BL,BYTE PTR VAR2;將50HBL,有時匯編程序分不清所存入的數(shù)據(jù)是字節(jié)還是字, 此時必須用PTR來說明屬性。 例如: MOV DX,20 格式是錯誤的,必須寫成 MOV BYTE PTR DX,20或者MOV WORD PTR DX,20,(2) 段操作符 段操作符用來明確表示變量或地址表達式的段 屬性, 取消了它們原來的默認組合。也稱為段跨 越前綴。例如:MOV DX,ES:BP+DI 表示源操作數(shù)在ES段,不是與BP原來的默認的 SS段。 (3) SHORT操作符,用來指示JMP指令中轉(zhuǎn)向地址的屬性。如: JMP SHORT PROG1 ;短轉(zhuǎn)移 NEXT:. NEXT與JMP指令距離不能大于127個字節(jié),(4)THIS操作符格式為: THIS 類型或?qū)傩?THIS和PTR有共同之處,建立一個特殊類型的存儲器地址操 作數(shù),而不實際為它分配新的存儲單元。例如: ARRAY1 EQU THIS BYTE ARRAY2 DW 30 DUP(?) 此時, ARRAY1的段地址和偏移地址與ARRAY2相同,但類 型不同,ARRAY1是字節(jié)類型,ARRAY2是字類型。 另外也可以按如下方法使用: BEGIN EQU THIS FAR START: MOV AX,0 此時, MOV指令有一個FAR屬性的地址BEGIN,允許其它 段的JMP指令直接跳轉(zhuǎn)到BEGIN來,同時允許本段指令 JMP NEAR START 或者JMP SHORT START轉(zhuǎn)移到MOV指令處,(5)HIGH和LOW操作符 HIGH和LOW操作符是字節(jié)分離操作符, 它接收 一個數(shù)或地址表達式,HIGH取其高字節(jié), LOW取 其低位字節(jié)。例如: MEMOFFADD EQU 0123H 指令 MOV CL, HIGH MEMOFFADD 匯編成MOV CL,01H MOV BH, LOW MEMOFFADD 匯編成MOV BH,23H,5.4 偽指令語句 在匯編語言中,偽指令是給匯編程序的命令,在匯編過程中由匯編程序進行處理。 例如定義數(shù)據(jù)、分配存儲區(qū)、定義段及定義過程等都采用偽指令表示。 5.4.1 數(shù)據(jù)定義偽指令 數(shù)據(jù)定義偽指令用來定義一個變量的類型,并將所需要的數(shù)據(jù)放入指定的存儲單元中,也可以只給變量分配存儲單元,而不賦予特定的值。,1. 數(shù)據(jù)定義偽指令的一般格式為: 變量名 偽指令 操作數(shù) ,操作數(shù) ;注釋 2. 常用的數(shù)據(jù)定義偽指令 定義字節(jié)變量偽指令DB 定義字變量偽指令DW 定義雙字變量偽指令DD 定義四字變量偽指令DQ 定義十字節(jié)變量偽指令DT,例 DATA SEGMENT ;定義數(shù)據(jù)段 B1 DB 10H,30H;存入兩個字節(jié)10h,30h B2 DB 2*3+5 ;存入表達式的值0BH S1 DB good! ;存入5個字符 W1 DW 1000H,2030H;存入兩個字 W2 DD 12345678H;存入雙字 S2 DB AB ;存入41H,42H S3 DW AB ;存入42H,41H DATA ENDS ;數(shù)據(jù)段結(jié)束,除了常數(shù)、表達式和字符串外,問號也可以作為數(shù)據(jù)定義偽指令的操作數(shù),此時僅給變量保留相應(yīng)的存儲單元,而不賦予變量某個確定的初值。 格式為:n DUP (初值) n為重復(fù)次數(shù),圓括號中為重復(fù)內(nèi)容 例 DATA SEGMENT BUF1 DB ? BUF2 DB 8 DUP(0);給字節(jié)變量BUF2分配8個存儲單元,初值為0 BUF3 DW 5 DUP(?);給BUF3分配5個字單元 BUF4 DW 10 DUP(0,1,?);10個0,1,? BUF5 DB 50 DUP(2,2 DUP(4),6);50個2 4 4 6 DATA ENDS,例如: D1 DB 01,30,10H D2 DW 01,2*3,100 D3 DB AB D4 DW AB 字符串可以看成串常數(shù),用單或雙引號引住,得到的是字符串的ASCII碼值。 在匯編期間存儲器中存入數(shù)據(jù)情況如圖3.8所示。,例如:A1 DB 2 DUP(0,2 DUP(1,2),3),4,5,以下指令使用變量B1和B2的方法是合法的: B1 DB 11H,22H,33H,44H B2 DW 55H,66H,77H MOV AL,B1 ;取字節(jié),(AL)=11H MOV BL,B1+2 ;取字節(jié),(BL)=33H MOV AX,B2 ;取字,(AX)=0055H MOV CX,B2+4 ;取字,(CX)=0077H 對于同樣的變量B1和B2,以下使用是非法的: MOV AL,B2 ;AL是1字節(jié),B2類型屬性為2字節(jié),不匹配 MOV CX,B1 ;CX是2字節(jié),B1類型屬性為1字節(jié),不匹配,5.4.2 符號定義偽指令 符號定義偽指令的用途是給一個符號重新命名,或定義新的類型屬性等。這些符號可以包括匯編語言的變量名、標號名、過程名、寄存器名以及指令助記符等。 常用的符號定義偽指令有EQU、LABLE。,1.EQU偽指令,作用:將表達式的值賦于一個名字,表達式可以是常 數(shù)、變量、寄存器名、指令助記符、數(shù)值表達式或地址 表達式等。 例: COUNT EQU 100 ;COUNT代替常數(shù) VAL EQU ASCII_TABLE ;代替變量 SUM EQU 30*25 ;代替數(shù)值表達式 ADR EQU ES:BP+DI+10 ;代替地址表達式 C EQU CX ;代替寄存器 M EQU MOV ;代替指令助記符,2.等號偽指令,格式: 名字=表達式 =與EQU偽指令區(qū)別:等號可以對同一個名字重復(fù)定義。 例 COUNT EQU 10 ;代替常數(shù) COUNT EQU 10+20;不能再次定義 但 COUNT=10 ;代替常數(shù) COUNT=10+20 ;可以重復(fù)定義,3.LABLE偽指令,用途:在原來標號或變量的基礎(chǔ)上定義一個類型不 同的新的標號或變量。 格式:變量名或標號名 LABLE 類型符 LABEL偽操作使同一個變量具有不同的類型 LABEL偽操作的格式為: name LABEL type 數(shù)據(jù)項表示法中type 為 BYTE,WORD DWORD 例如: ARR_BYTE LABEL BYTE ARR_WORD DW 1122H,3344H,5566H,7788H,9900H,對于以ARR_WORD變量名為開始的存儲器中 同一個單元,同時定義了字節(jié)屬性和字屬性, 使用ARR_BYTE變量名時,為字節(jié)屬性; 使用ARR_WORD變量名時,為字屬性。 如果指令中寫作: MOV AL,ARR_BYTE 那么讀一字節(jié)數(shù)據(jù)22H到AL; 如果寫作: MOV AX,ARR_WORD 那么讀一個字數(shù)據(jù)1122H到AX。,4. 程序開始和結(jié)束偽操作 程序開始可用NAME和TITLE為模塊取名字, 并不是必要的。格式為: NAME module-name module-name是程序員給出的模塊名, 如果沒使用NAME偽操作.,也可以使用TITLE 偽操作,格式為: TITLE text TITLE可指定列表文件每一頁上打印的標題,text最多 可有60個字符。若程序中無NAME偽操作, 則匯編程序 將用text中的前六個字符作為模塊名。,5. 對準偽操作 EVEN 偽操作使下一個字節(jié)地址從偶數(shù)開始,一個字的地址最好從偶地址開始,所以對于字數(shù)組,為保證其從偶地址開始, 可以在它前面用EVEN偽操作來達到這一目的。格式為: EVEN 例如: EVEN WORD_ ARRAY DW 100dup(?),ORG偽操作指定其后的偏移地址,格式為: ORG constant expression 如常數(shù)表達式的值為n,則ORG偽操作可以使下 一字節(jié)的地址為n。 例如: ORG 100H V0 DW 2233H,4455H 則V0的偏移地址為100H。,匯編程序?qū)υ闯绦騾R編的過程中, 使用地址計數(shù)器計數(shù)器的值用來$表示, 匯編語言允許用戶直接用$來引用地址計數(shù)器的值。 例如: JNE $+6 轉(zhuǎn)向地址是JNE指令的首地址加上6。 例如: ORG 0010H ARRAY1 DW 1,2,$+4,3,4,$+5 匯編后的存儲區(qū)將如圖3.10所,圖3.10 ARRAY1占用存儲空間圖,6. 基數(shù)控制偽操作 匯編程序默認的數(shù)為十進制數(shù), 因而除非專門指定, 否則匯編程序把程序中出現(xiàn)的數(shù)均看成十進制數(shù), 當使用其它基數(shù)表示常數(shù)時, 需要專門給以標記,例如: 二進制數(shù)由B表示,如:00110100B 十進制數(shù)由D表示,如:165D 八進制數(shù)由O或Q表示,如:1677Q 十六進制數(shù)由H表示,如:0ABCDH,當?shù)谝粋€符是字母時,前面必須加0。 可用RADIX偽操作將默認的基數(shù)改變?yōu)?16范圍的基數(shù)。,如默認的基數(shù)為10時,指令 MOV BX,0FFH MOV BX,178 用RADIX偽操作將基數(shù)改為16時,指令可以寫作 RADIX 16 MOV BX,0FF MOV BX,178D 此時十進制數(shù)后須跟標記D,十六進制數(shù)后一般 不標記H,但是一個16進制數(shù),例如2D,為了與十進制數(shù) 2D區(qū)別,十六進制數(shù)要標記H。,5.4.3 段定義偽指令,用途: 在匯編語言程序中定義邏輯段,用它來指定段的名稱和范 圍,并指明段的定位類型、組合類型及類別。 常用的段定義偽指令有SEGMENT、ENDS和ASSUME等。 1.SEGMENT/ENDS偽指令 SEGMENT用于定義一個邏輯段,給邏輯段賦予一個段名 SEGMENT位于一個邏輯段的開始,ENDS表示一個邏輯段結(jié)束,代碼段以外的其他段段定義格式如下: segment name SEGMENT ;行1 ; ; segment name ENDS ;行n 代碼段段定義格式如下: segment name SEGMENT ;行1 ASSUME assignment, , assignment ;行2 ; ; segment name ENDS ;行n,ASSUME是偽操作,ASSUME操作只能指定某個段名與某個段寄存器聯(lián)系,提供給匯編程序把源程序翻譯成目標程序時使用,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把代碼段以外的段地址裝入相應(yīng)的段寄存器中。,一個程序可以由多個段組成。 例如: ;-定義DATA1段 DATA1 SEGMENT ARRAY DB 1,2,3,4,5,A,B TABLE DW 0FFFFH,0000H DATA1 ENDS ;-定義DATA2段 DATA2 SEGMENT BUFFER DB 20 DUP(?,?,?) DATA2 ENDS,;-定義代碼段 CODE SEGMENT ASSUME CS:CODE,DS:DATA1,ES:DATA2 START: ;程序員自己把段地址裝入相應(yīng)的段寄存器中。 MOV AX,DATA1 ;DATA1段地址送AX MOV DS,AX ;DATA1段地址經(jīng)AX送DS MOV AX,DATA2 ;DATA2段地址送AX MOV ES,AX ;DATA2段地址經(jīng)AX送ES CODE ENDS END START ;行n,如果需要用連接程序把本程序與其他程序模塊連接時, 就需要使用SEGMENT的類型及屬性 說明格式: 段名 定位類型 組合類型 類別 (段內(nèi)語句系列) 段名 ENDS 類型及屬性說明如下:,定位類型,主要有: BYTE:邏輯段從字節(jié)的邊界開始,該段可以從任何地址開始。 WORD:該段必須從字的邊界開始,即段地址必須為偶數(shù)。 PARA:邏輯段從一個節(jié)的邊界開始,通常16個字節(jié)為一個節(jié)。默認 PAGE: 邏輯段從頁邊界開始。256個字節(jié)為一頁,故本段的起始地址最低8為必須為0 組合類型,主要有: PRIVATE:每段都有自己的基地址。默認組合類型。 PUBLIC:連接時將具有相同類別名的其它分段連接在一起,其連接次序由連接命令指定。 COMMON:該段在連接時與其它同名分段有相同的起始地址。連接長度是各分段中的最大長度。,STACK:指定該段在運行時為堆棧段的一部分。同PUBLIC,不同程序中的邏輯段,如果類別名相同,則順序連接成為一個邏輯段。 MEMORY :連接程序?qū)驯径味ㄎ辉诒贿B接在一起的其他所有段之上。 AT expression:使段的起始地址是表達式所計算出來的16位段地址, 但它不能用來指定代碼段. 例AT 5300H 則本段從存儲器的物理地址53000H開始裝入。 (3)類別:必須放在單引號內(nèi) 作用:在連接時決定各邏輯段的裝入順序。類別名相同的邏輯段,按出現(xiàn)的先后順序排列,沒有類別名的邏輯段,與其他無類別名的邏輯段一起連續(xù)裝入內(nèi)存。,5.4.4 過程定義偽指令 在程序設(shè)計中,經(jīng)常將一些重復(fù)出現(xiàn)的語句組定義為子程序。子程序又稱為過程,可以采用CALL指令來調(diào)用。 使用格式: 過程名 PROC NEAR/FAR (語句系列) RET (語句系列) 過程名 ENDP 調(diào)用一個過程的格式為: CALL 過程名,5.4.5 結(jié)構(gòu)定義偽指令 結(jié)構(gòu)就是相互關(guān)聯(lián)的一組數(shù)據(jù)的某種組合形式。 用偽指令STRUC和ENDS把相關(guān)數(shù)據(jù)定義語句組合起來,便構(gòu)成一個完整的結(jié)構(gòu)。 使用格式: 結(jié)構(gòu)名 STRUC (數(shù)據(jù)定義語句序列) 結(jié)構(gòu)名 ENDS,5.4.6 模塊定義與連接偽指令 在編

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論