微機(jī)原理及接口技術(shù)第四章匯編語(yǔ)言程序設(shè)計(jì)的知識(shí)_第1頁(yè)
微機(jī)原理及接口技術(shù)第四章匯編語(yǔ)言程序設(shè)計(jì)的知識(shí)_第2頁(yè)
微機(jī)原理及接口技術(shù)第四章匯編語(yǔ)言程序設(shè)計(jì)的知識(shí)_第3頁(yè)
微機(jī)原理及接口技術(shù)第四章匯編語(yǔ)言程序設(shè)計(jì)的知識(shí)_第4頁(yè)
微機(jī)原理及接口技術(shù)第四章匯編語(yǔ)言程序設(shè)計(jì)的知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩121頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第四章匯編語(yǔ)言程序設(shè)計(jì)匯編語(yǔ)言程序的格式匯編語(yǔ)言程序的上機(jī)過(guò)程偽指令語(yǔ)句匯編語(yǔ)言程序設(shè)計(jì)的基本方法本章內(nèi)容了解匯編語(yǔ)言程序的基本格式,及其上機(jī)過(guò)程。熟練掌握數(shù)據(jù)定義偽指令、段定義偽指令、符號(hào)定義偽指令、過(guò)程定義偽指令。熟練掌握匯編語(yǔ)言程序設(shè)計(jì)的一般步驟以及順序程序、分支程序、循環(huán)程序、子程序設(shè)計(jì)的方法。學(xué)習(xí)目的6.1匯編語(yǔ)言程序的格式一、什么是匯編語(yǔ)言1)機(jī)器語(yǔ)言直接用0,1序列表示指令和數(shù)據(jù)的編程方法。2)匯編語(yǔ)言用指令助記符編寫(xiě)程序的方法。語(yǔ)句格式:[NAME]OPERATIONOPERAND[;COMMENT]NAME:是一個(gè)符號(hào)或稱(chēng)為標(biāo)號(hào)。OPERATION:是一個(gè)操作碼的助記符,可為指令,偽指令等。OPERAND:是一個(gè)或多個(gè)表達(dá)式,是操作的對(duì)象。COMMENT:用來(lái)說(shuō)明語(yǔ)句或程序的功能。以“;”開(kāi)始二、匯編語(yǔ)言程序的語(yǔ)句格式注:

指令助記符前面還可以有[前綴]。匯編程序語(yǔ)句中的四項(xiàng),均可以用大寫(xiě)、小寫(xiě)或混合編寫(xiě)。1.標(biāo)號(hào)(含數(shù)據(jù)變量標(biāo)號(hào)和程序位置標(biāo)號(hào))標(biāo)號(hào)是一個(gè)自行設(shè)計(jì)的標(biāo)識(shí)符或名稱(chēng),最多可由31個(gè)字母、數(shù)字和特別字符(?、@、-、$)等組成。但 不能用數(shù)字開(kāi)頭。不能為匯編語(yǔ)言的保留字。注:保留字指有專(zhuān)門(mén)用途的字符或字符串,如CPU的寄存器名、指令助記符、偽指令助記符等。(1)數(shù)據(jù)變量標(biāo)號(hào)的三種屬性a.段值:即所在段的段地址。b.偏移量:即數(shù)據(jù)變量所在位置的地址與其段地址之差值。c.類(lèi)型:指該數(shù)據(jù)變量是字節(jié)、字還是雙字。(2)程序位置標(biāo)號(hào)的兩種屬性a.NEAR——段內(nèi)調(diào)用或轉(zhuǎn)移標(biāo)號(hào)。b.FAR——段間調(diào)用或轉(zhuǎn)移標(biāo)號(hào)。2.操作數(shù)區(qū)操作數(shù)可以是常數(shù)、變量、標(biāo)號(hào)、寄存器名或表達(dá)式(1)常數(shù):二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制或ASCⅡ碼,范圍-32768?32767。(2)標(biāo)號(hào)、寄存器名前面已講,變量下一節(jié)介紹。(3)表達(dá)式:由運(yùn)算符連接起來(lái)的式子叫表達(dá)式,按一定的規(guī)則對(duì)表達(dá)式進(jìn)行運(yùn)算后得到一個(gè)數(shù)值或一個(gè)地址。

表達(dá)式可分算術(shù)表達(dá)式、邏輯表達(dá)式、關(guān)系運(yùn)算表達(dá)式、分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式。用算術(shù)運(yùn)算符+、-、*、/和MOD連接的表達(dá)式。a.算術(shù)表達(dá)式用邏輯運(yùn)算符AND、OR、XOR和NOT連接的表達(dá)式。b.邏輯表達(dá)式用EQ、NE、LT、GT、GE和LE連接的表達(dá)式。若條件成立,其值為1,否則為0。c.關(guān)系運(yùn)算表達(dá)式分析運(yùn)算表達(dá)式把存儲(chǔ)器操作數(shù)分解為幾個(gè)組成部分;而合成運(yùn)算式是把這些組成部分綜合為存儲(chǔ)器操作數(shù)。d.分析運(yùn)算表達(dá)式和合成運(yùn)算表達(dá)式三、匯編語(yǔ)言的程序格式匯編語(yǔ)言程序是由匯編語(yǔ)句按照一定的語(yǔ)法規(guī)則和順序排列起來(lái)的。從結(jié)構(gòu)上來(lái)看,它是采用分段結(jié)構(gòu),每個(gè)段由SEGMENT語(yǔ)句開(kāi)始ENDS結(jié)束,一個(gè)程序中可以有多個(gè)段,每個(gè)段中也可以有多個(gè)程序。END為整個(gè)程序的結(jié)束語(yǔ)句,其一般格式為:NAME1SEGMENT語(yǔ)句

?語(yǔ)句N(xiāo)AME1ENDSNAME2SEGMENT語(yǔ)句

?語(yǔ)句N(xiāo)AME2ENDS

?END通常一條語(yǔ)句占用一行(不能超過(guò)132個(gè)字節(jié)),注釋部分可任意長(zhǎng),但必用“;”開(kāi)頭。6.2偽指令指令語(yǔ)句:匯編程序把它們翻譯成機(jī)器代碼,命令8086執(zhí)行對(duì)應(yīng)操作。偽指令語(yǔ)句:匯編程序并不把它們翻譯成機(jī)器代碼,只是用來(lái)指示、引導(dǎo)匯編程序在匯編時(shí)做一些操作,它本身不占用存儲(chǔ)單元。*程序分段及存儲(chǔ)器分配*變量定義及存儲(chǔ)器申請(qǐng)*過(guò)程定義*符號(hào)定義*程序模塊定義與通信*宏定義及宏調(diào)用*條件匯編*格式控制,列表及其他功能偽指令主要分為下列幾類(lèi):本章只介紹前五類(lèi)一、程序分段及存儲(chǔ)器分配1.SEGMENT和ENDS定義方式:[段名]SEGMENT[定位方式][組合方式][類(lèi)別名]

?語(yǔ)句?[段名]ENDS

段名是賦予該段的一個(gè)名稱(chēng),SEGMENT與ENDS成對(duì)出現(xiàn),且前面的段名要相同,段名的取法與文件名、標(biāo)號(hào)及變量名等相同。(1)段名LINK程序除完成段與段的聯(lián)合操作以外,還把聯(lián)合后得到的各個(gè)段互相銜接起來(lái),段與段的銜接方式叫做定位方式,共4種。(2)定位方式c.WORD(字):表示段從地址是一個(gè)最低位為0的二進(jìn)制數(shù)開(kāi)始。d.PAGE(頁(yè)):段從十六進(jìn)制數(shù)表示地址的最低兩位均為0處開(kāi)始。a.PARA(未定義的):表示段從一個(gè)字節(jié)的邊界即用十六進(jìn)制數(shù)表示地址的最低位為0處開(kāi)始。b.BYTE(字節(jié)):表示段可從任一地址開(kāi)始。例:設(shè)A,B,C,D這4個(gè)段的長(zhǎng)度分別為1376H,A47H,1234H和405H字節(jié),分配給A段的物理地址是00000H(段址0000H,位移量0000H)。在不同的定位方式下,各段定位后的段地址如下圖所示:C01DB:000D01DB:1240D0301:00010301:0405A0000:00000000:1375C01E4:000801E4:123BA0000:00000000:1375D0301:00000301:0404C01DD:000001DD:1233B0138:00000138:0A46A0000:00000000:1375(a)A,B,C,D均為PARA方式(b)A,B,C,D均為BYTE方式(c)A:PARAB:PAGEC:WORDD;PARA定位方式選擇B0137:00060137:0A4CB0140:00000140:0A46D0308:00000308:0404a.PUBLIC:表示該段與其他模塊中說(shuō)明為PUBLIC方式的同名段互相組合成一個(gè)邏輯段,公用一個(gè)段址,運(yùn)行時(shí)裝入同一個(gè)物理段中。(3)組合方式程序不同模塊中具有相同性質(zhì)的段若使用同樣的段名,則連接時(shí)就會(huì)把同名的段按照指定的方式組合起來(lái),組合方式共有6種。b.STACK:連接時(shí)把所有STACK方式的同名段連接成一個(gè)段,運(yùn)行時(shí)就是SS的裝入值,且棧指針SP指向該段的起始地址。c.COMMON:表示該段與其它模塊中所有已說(shuō)明為COMMON的同名段共享相同的存儲(chǔ)區(qū)域,即具有相同的段起始地址,共享的長(zhǎng)度為模塊同名段中最大長(zhǎng)度。d.MEMORY方式:表示該段應(yīng)定位在所有其他段的上面,若有多個(gè)段選用MEMORY,則除第一個(gè)之外,其余段均作為COMMON處理。e.AT:表示該段按絕對(duì)地址定位,其段地址即為其后表達(dá)式的值,位移量為0。若定義一個(gè)段時(shí)不指定上述任何一種方式,則該段與其他模塊的段沒(méi)有任何關(guān)系,獨(dú)立定義。例:有A,B;C,A,B;A,C共7個(gè)段是3個(gè)模塊中的段,用P,C,S分別代表PUBLIC,COMMON或STACK。組合成4個(gè)新段(見(jiàn)下圖),新段的長(zhǎng)度為被組合在一起的各段長(zhǎng)度之和(用PUBLIC和STACK方式時(shí)),或是各段中最長(zhǎng)段的長(zhǎng)度(COMMON方式)。f.缺省方式:A(P)B(C)C(S)A(P)B(C)AC(S)模塊1模塊2模塊3LINKPCSABCD連接程序的組合處理示意圖(4)類(lèi)別名是一個(gè)用單引號(hào)括起來(lái)的字符串,LINK程序把類(lèi)別名相同的所有段放在連續(xù)的存儲(chǔ)區(qū)域內(nèi),先出現(xiàn)的在前,后出現(xiàn)的在后。例: A SEGMENT

‘FAT’

A

B SEGMENT

‘BAZ’

E

C SEGMENT

‘BAZ’

B

D SEGMENT ‘ZOU’

C

E SEGMENT

‘FAT’

D

LINK處理前 LINK處理后2.GROUP偽指令格式:[組名]GROUP[段名][,…]功能:用來(lái)把模塊中若干不同名的段集合成一個(gè)組,使其裝入同一個(gè)物理段中,組內(nèi)各段之間的跳轉(zhuǎn)可視為段內(nèi)跳轉(zhuǎn)。注:組名與段名是一樣的取名規(guī)則,是代表該組的段地址,格式中的段名也可用表達(dá)式SEG[變量]或SEG[標(biāo)號(hào)]。3.ORG偽指令格式:ORG[數(shù)據(jù)表達(dá)式]功能:把位置計(jì)數(shù)器的值設(shè)置為表達(dá)式的值。ORG后面的一條指令性語(yǔ)句或數(shù)據(jù)區(qū)定義命令即從指定的位置處進(jìn)行匯編。4.ASSUME偽指令格式:ASSUME[段寄存器]:[段名],[段寄存器]:[段名],…功能:用于告知匯編程序,段寄存器CS、DS、ES和SS的內(nèi)容將被設(shè)定為那些段或組的段址。注:(1)段名可以是已定義過(guò)的任何段名或組名,也可以是表達(dá)式SEG[變量]或SEG[標(biāo)號(hào)],還可以是NOTHING。 (2)除CS外,DS、ES、SS的設(shè)置必須通過(guò)指令性語(yǔ)句來(lái)完成。例:SEGC SEGMENTASSUMEDS:SEGA,ES:SEGB,SS:NOTHING,CS:SEGC MOV AX,SEGA MOV DS,AX;設(shè)置DS MOV AX, SEGB MOV ES,AX;設(shè)置ES

SEGC ENDS二、變量定義及存儲(chǔ)器申請(qǐng)DB、DW和DD等可用于定義變量和預(yù)置存儲(chǔ)器,變量后不能帶冒號(hào),任何變量均有下列三屬性。(1)段屬性即變量所使用的段;(2)段內(nèi)偏移屬性;(3)變量的類(lèi)型:字節(jié)、字、雙字等。1.DB/DW/DD偽指令(1)格式:[變量名稱(chēng)]{DB/DW/DD}表達(dá)式功能:定義一數(shù)據(jù)存貯區(qū)。該數(shù)據(jù)存貯區(qū)的類(lèi)型由所使用的數(shù)據(jù)定義偽指令指定(其中DB/DW/DD定義的分別為字節(jié)型/字類(lèi)型/雙字型);存貯區(qū)中數(shù)據(jù)的個(gè)數(shù)由其后表達(dá)式的個(gè)數(shù)(包括重復(fù)因子)決定;并為各存儲(chǔ)單元提供一個(gè)初值。(2)表現(xiàn)形式:根據(jù)表達(dá)式的不同可有以下幾種常見(jiàn)形式。a.表達(dá)式為預(yù)置的一個(gè)常數(shù)項(xiàng)表達(dá)式如:AB DB ‘AB’ ;4142H BA DW ‘AB’ ;4241H FEN DW OFEH ;254 SEG-FEH DWSEGFEH ;變量FEH的段址 PAR1 DB 74 PAR2 DW 1234Hb.表達(dá)式中出現(xiàn)“?”,表示只分配存儲(chǔ)單元,其初值不定。如:SUM DW? ;分配一個(gè)字單元 F1 DB? ;分配一個(gè)字節(jié)單元c.表達(dá)式為預(yù)置地址表達(dá)式(DW/DD)

如:TABLE-0FF DWTABLE;TABLE的偏移量 D-PTR-TDDTABLE;TABLE的16位偏移量和段址d.表達(dá)式為預(yù)置重復(fù)的算式。如:ZIPSDB100DUP(0) DB2DUP(0,3DUP(1))2.RECORD偽指令(1)記錄定義的一般格式:記錄名稱(chēng)RECORD字段名稱(chēng):表達(dá)式,…功能:記錄可視為能進(jìn)行位處理的字節(jié)或字,用記錄名稱(chēng)作為匯編期間的操作符,去預(yù)置任何多個(gè)8bit或16bit的記錄,并為它分配存儲(chǔ)單元。注:表達(dá)式左邊表示字段名稱(chēng)的位數(shù),最多不能超過(guò)16bit,當(dāng)定義中的字段其位不能占滿整個(gè)字節(jié)或字時(shí),匯編程序就把所定義的字段與記錄的低位端對(duì)齊。如:QUASIRECORDA:6,B:6未定義

AB151211650如:MODEL3RECORDX:3=7,Y:4=8,Z:9=2571111000100000001

151312980MODEL3XYZ(2)記錄的預(yù)置和存儲(chǔ)分配記錄可以用記錄名稱(chēng)作為操作符。[名稱(chēng)]記錄名稱(chēng)<表達(dá)式,…>表達(dá)式DUP(<表達(dá)式,…>)一般格式:意思是將已定義的記錄MODEL3分配100個(gè)存儲(chǔ)單元(字單元),并把Y和Z字段修改為15和3。如:MANYMODEL3100DUP(<,15,3>)111111100000001111111110000000111111111000000011MANYMODEL3[0]MANYMODEL3[2]

MANYMODEL3[198]……(3)記錄的使用與處理如:MOVDX,MANYMODEL3[40]1111111000000011000111100000000001111;執(zhí)行MOV后DX的值;Y字段為1其余為0;執(zhí)行SHR后DX的值A(chǔ)NDDX,MASKYMOVCL,9SHRDX,CL;執(zhí)行AND后DX的值3.STRUC/END偽指令使用格式:注:結(jié)構(gòu)和記錄較少使用,當(dāng)設(shè)計(jì)大型復(fù)雜程序,或程序設(shè)計(jì)中使用多種語(yǔ)言時(shí),他們常用來(lái)傳送數(shù)據(jù)和狀態(tài)量。結(jié)構(gòu)名稱(chēng)STRUC

[字段名稱(chēng)]{DB/DW/DD}結(jié)構(gòu)名稱(chēng)ENDS表達(dá)式,…表達(dá)式DUP(表達(dá)式,…)……三、過(guò)程定義偽指令其中過(guò)程名是為該過(guò)程指定的一個(gè)名稱(chēng),與變量、標(biāo)號(hào)的定義法相同。使用格式:過(guò)程名PROCNEAR/FAR RET

過(guò)程名ENDP……功能:把具有一定功能的程序段設(shè)計(jì)成為一個(gè)過(guò)程(子程序),便于實(shí)現(xiàn)模塊化的程序設(shè)計(jì)。注:(1)CALL指令中過(guò)程名起著標(biāo)號(hào)的作用。有段屬性、偏移量屬性和類(lèi)型屬性(NEAR和FAR)。(2)子程序中至少有一個(gè)RET。四、符號(hào)定義偽指令1.EQU偽指令格式:符號(hào)名EQU數(shù)值表達(dá)式功能:為常量、變量、表達(dá)式或其他符號(hào)定義一個(gè)名字,但不申請(qǐng)分配內(nèi)存。如:THREEEQU3FIRSTWEQUWORDPTRBYT;把變量;BYT定義為名字是FIRSTW的字“=”偽操作與EQU相似,其區(qū)別是前者可重復(fù)定義而后者不能。使用EQU可使程序簡(jiǎn)單明了和便于修改。注:EQU可用PURGE解除。2.LABEL偽指令格式:變量名/標(biāo)號(hào)LABEL[類(lèi)型]功能:為當(dāng)前存儲(chǔ)單元定義一個(gè)指定類(lèi)型的變量名或標(biāo)號(hào),其類(lèi)型為BYTE、WORD、DWORD、結(jié)構(gòu)名、記錄名、NEAR和FAR。如:(1)BUFFLABELBYTEDB21等效于BUFFDB21(2)TRANSLABELNEARMOVAX,CX等效于TRANS:MOVAX,CX(3)ADD-ELABELFARADD-M:ADDAX,F(xiàn)OO[BX]

這樣ADD-M標(biāo)號(hào)不僅適合近程調(diào)用和轉(zhuǎn)移也可用新名ADD-E使之適合遠(yuǎn)程調(diào)用和轉(zhuǎn)移?!?4)BARLABELBYTEARRDW100DUP(0)ADDAL,BAR[99]ADDAX,ARR[98]

同一數(shù)據(jù)區(qū)內(nèi)容既可作為字節(jié)又可作為字參加運(yùn)算。……五、程序模塊通訊用偽指令匯編語(yǔ)言程序可劃分為許多模塊,對(duì)每個(gè)模塊獨(dú)立地進(jìn)行匯編及調(diào)試(見(jiàn)下圖),一般從低層到高層逐步進(jìn)行。PUBLIC二級(jí)子模塊1PUBLIC二級(jí)子模塊2PUBLICPUBLIC二級(jí)子模塊n-1二級(jí)子模塊n…PUBLICPUBLICPUBLIC一級(jí)子模塊1EXTRN一級(jí)子模塊2EXTRN一級(jí)子模塊mEXTRN…主模塊EXTRN主模塊EXTRNPUBLIC二級(jí)子模塊1PUBLIC二級(jí)子模塊2PUBLICPUBLIC二級(jí)子模塊n-1二級(jí)子模塊n…PUBLICPUBLICPUBLIC一級(jí)子模塊1EXTRN一級(jí)子模塊2EXTRN一級(jí)子模塊mEXTRN…匯編語(yǔ)言程序的模塊結(jié)構(gòu)1.NAME和END偽指令功能:定義一個(gè)模塊,作為一個(gè)獨(dú)立的匯編單位,NAME缺省時(shí)模塊若使用了TITLE語(yǔ)句,則TITLE語(yǔ)句中前6個(gè)字符為模塊名,否則源文件名將作為模塊名。格式:NAME模塊名END標(biāo)號(hào)…注:一個(gè)模塊是一個(gè)獨(dú)立的匯編單位,匯編處理只進(jìn)行到模塊結(jié)束語(yǔ)句END為止。注:符號(hào)必須用“,”分開(kāi),且均在本模塊中定義過(guò)。注:2.PUBLIC偽指令格式:PUBLIC[符號(hào)表]功能:用來(lái)說(shuō)明該模塊中被定義的那些常量、變量和標(biāo)號(hào)(含過(guò)程名)可以被其他模塊所引用。如:PUBLICABC,BCD,CDE3.EXTRN偽指令格式:EXTRN[符號(hào):類(lèi)型,…]功能:指出本模塊中需要引用但卻在其他模塊中定義并說(shuō)明為PUBLIC屬性的符號(hào)(含常量,變量,標(biāo)號(hào)和過(guò)程),符號(hào)的類(lèi)型(BYTE、WORD、DWORD、NEAR、FAR和ABS(符號(hào)常量))必須與它們?cè)谄渌K中定義時(shí)的類(lèi)型一致。6.3匯編語(yǔ)言屬性操作符一、修改屬性的操作符(合成操作符)1.指針操作符PTR格式:類(lèi)型PTR表達(dá)式類(lèi)型:表達(dá)式:是變量、標(biāo)號(hào)或數(shù)值變量的類(lèi)型有:BYTE、WORD和DWORD;標(biāo)號(hào)的類(lèi)型有:NEAR和FAR;結(jié)構(gòu)名稱(chēng)功能:PTR把它左邊的屬性指派給它右邊的變量、標(biāo)號(hào)或數(shù)值,使之產(chǎn)生一個(gè)新的存儲(chǔ)器地址操作數(shù)。如:(1)INCBYTEPTR[BX](2)ADDDX,WORDPTRFOOB[20]

新存儲(chǔ)器操作數(shù)的段地址和段內(nèi)偏移量與PTR運(yùn)算符右邊的操作數(shù)的對(duì)應(yīng)量相同。PTR給已分配的存儲(chǔ)器一個(gè)另外的定義但并不重新分配存儲(chǔ)器。2.SHORT操作符SHORT用于條件轉(zhuǎn)移、轉(zhuǎn)移和調(diào)用指令中,指出其轉(zhuǎn)移的相對(duì)位移量不超過(guò)一個(gè)字節(jié)所能表達(dá)的范圍。3.THIS操作符THIS用于定義當(dāng)前所指單元的類(lèi)型。格式:THIS類(lèi)型/距離其中類(lèi)型是BYTE、WORD和DWORD,距離是NEAR和FAR屬性。功能:與PTR類(lèi)似建立一個(gè)新的存儲(chǔ)器地址操作數(shù),但不分配存儲(chǔ)器,其類(lèi)型由THIS指定。(1)FOOBEQUTHISBYTE(2)FAR-OUTEQUTHISFAR如:二、數(shù)值返回操作符(分析運(yùn)算符)返回的是變量或標(biāo)號(hào)的段地址,偏移地址及類(lèi)型的屬性值。格式:分析運(yùn)算符變量或標(biāo)號(hào)其運(yùn)算的結(jié)果為一常數(shù)1.SEG——取段址算符2.OFFSET——取偏移地址算符功能:分離出該變量或標(biāo)號(hào)的段址如:MOVAX,SEGBUF功能:分離出該變量或標(biāo)號(hào)的偏移地址如:MOVSI,OFFSETBUF3.TYPE——取類(lèi)型算符4.LENGTH——取變量所含存儲(chǔ)單元的個(gè)數(shù)功能:分離出該變量所含存儲(chǔ)單元的個(gè)數(shù)。功能:分離出該變量或標(biāo)號(hào)的類(lèi)型的字節(jié)數(shù)。變量類(lèi)型為BYTE、WORD和DWORD時(shí),返回的值分別為1、2和4;標(biāo)號(hào)類(lèi)型為NEAR或FAR時(shí),則返回-1或-2。注意:在定義該變量時(shí),數(shù)據(jù)定義偽指令后面的第一個(gè)表達(dá)式的形式為“nDUP(表達(dá)式)”時(shí),取值為n,否則為1。如:BUF1DB100DUP(0)BUF2DW10,5DUP(2)BUF3DD5DUP(1,2DUP(0))則LENGTHBUF1=100,LENGTHBUF2=1LENGTHBUF3=5。5.SIZE——取變量所含存儲(chǔ)區(qū)的總字節(jié)數(shù)。功能:SIZE=LNGTH*TYPE SIZEBUF1=100(因?yàn)門(mén)YPEBUF1=1) SIZEBUF2=2(因?yàn)門(mén)YPEBUF2=2) SIZEBUF3=20(因?yàn)門(mén)YPEBUF3=4)三、記錄專(zhuān)用操作符2.WIDTH操作符它用一個(gè)記錄字段名稱(chēng)作為操作數(shù),結(jié)果是字段名稱(chēng)所在位置的位是1,其余是0。返回的是記錄或記錄中字段的位數(shù)。1.MASK操作符6.4常用的DOS系統(tǒng)功能調(diào)用使用DOS系統(tǒng)功能調(diào)用的一般過(guò)程:見(jiàn)下圖所示。功能調(diào)用號(hào)AH置入口參數(shù)執(zhí)行“INT21H”分析出口參數(shù)……系統(tǒng)功能調(diào)用的方法一、鍵盤(pán)輸入(1號(hào)調(diào)用)格式:MOVAH,1 INT 21H功能:等待從鍵盤(pán)輸入一個(gè)字符并將輸入字符的ASCII碼送入寄存器AL中,碰到CTRL+Break則退出。二、顯示輸出(2號(hào)調(diào)用)格式:MOVAH,2 MOVDL,待顯字符的ASCII碼INT21H功能:將DL中的字符送顯示器顯示,若為CTRL+Break的ASCII碼則退出。三、打印輸出(5號(hào)調(diào)用)格式:MOVDL,待打印字符的ASCII碼 MOVAH,5INT21H功能:將DL中字符送打印機(jī)打印。四、控制臺(tái)輸入(8號(hào)調(diào)用)格式:MOVAH,8INT21H功能:與1號(hào)相似,但只從鍵盤(pán)上輸入而不顯示。五、顯示字符串(9號(hào)調(diào)用)格式:LEADX,字符串首偏移地址MOVAH,9INT21H功能:將當(dāng)前數(shù)據(jù)區(qū)中以‘$’結(jié)尾的字符串送顯示器顯示。六、鍵盤(pán)輸入字符串(10號(hào)調(diào)用)格式:LEADX,緩沖區(qū)首偏移地址MOVAH,10INT21H功能:從鍵盤(pán)上往指定緩沖區(qū)中輸入字符串并送顯示器顯示。如:BUFDB81DB?DB80DUP(0)注:緩沖區(qū)應(yīng)按規(guī)定的格式定義。BUF第一字節(jié)規(guī)定了緩沖區(qū)的大小,從鍵盤(pán)輸入的字符串從第三個(gè)字節(jié)存放,第二個(gè)字節(jié)存放實(shí)際輸入的字符個(gè)數(shù)。6.5匯編語(yǔ)言程序的上機(jī)過(guò)程一、匯編語(yǔ)言上機(jī)運(yùn)行的軟件環(huán)境1.DOS操作系統(tǒng)2.全屏幕編輯器EDIT.EXE3.宏匯編語(yǔ)言軟件TASM.EXE4.連接軟件TLINK.EXE5.調(diào)試軟件TD.EXE二、匯編程序和匯編過(guò)程匯編程序:即用于把源程序翻譯成機(jī)器代碼程序的程序。源程序:即用匯編語(yǔ)言編寫(xiě)的程序稱(chēng)為匯編語(yǔ)言程序,也稱(chēng)源程序。目標(biāo)程序:即匯編后產(chǎn)生的機(jī)器代碼程序。1)檢查源程序2)測(cè)出源程序中的語(yǔ)法錯(cuò)誤3)產(chǎn)生源程序的目標(biāo)程序,并可給出列表文件4)展開(kāi)宏指令匯編程序的主要功能是:匯編程序的主要功能是:匯編程序?qū)⒃次募R編后的情況通常有以下幾種:1.匯編成絕對(duì)地址并能立即運(yùn)行匯編將源程序按絕對(duì)地址格式產(chǎn)生目標(biāo)程序,并將它放在內(nèi)存中。優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,容易理解。缺點(diǎn):由于這種方式每次執(zhí)行程序前都要匯編一次,故時(shí)間浪費(fèi)較多,而且又占用內(nèi)存空間。2.匯編成絕對(duì)地址格式,裝入后運(yùn)行將源程序的不同模塊分別匯編成絕對(duì)地址的目標(biāo)程序,裝入相應(yīng)的內(nèi)容空間后,才能運(yùn)行。優(yōu)點(diǎn):裝入程序比較簡(jiǎn)單,占用空間小,可連接幾個(gè)用不同語(yǔ)言寫(xiě)成的模塊。缺點(diǎn):由用戶直接管理內(nèi)存資源,易出錯(cuò)。3.匯編成浮動(dòng)模塊,連接和裝入后運(yùn)行匯編程序?qū)⒏鱾€(gè)程序模塊匯編成相對(duì)地址的浮動(dòng)目標(biāo)文件,即每個(gè)模塊的地址均從0開(kāi)始,然后由連接和裝入程序?qū)⑺鼈冞B接一個(gè)完整的絕對(duì)地址的目標(biāo)程序,該目標(biāo)程序可立即運(yùn)行,也可存儲(chǔ)在磁盤(pán)上備用。特點(diǎn)是:可連接不同語(yǔ)言的程序模塊。4.動(dòng)態(tài)連接和裝入\匯編時(shí)仍產(chǎn)生浮動(dòng)目標(biāo)程序,而且只有當(dāng)某個(gè)模塊被調(diào)用時(shí)才連接和裝入。Intel8086/8088匯編程序采用的是第3種工作方式。實(shí)現(xiàn)一個(gè)8086匯編語(yǔ)言程序運(yùn)行的過(guò)程見(jiàn)下圖。優(yōu)點(diǎn):節(jié)省內(nèi)存,各子程序模塊可重疊裝入,一個(gè)模塊可為幾個(gè)用戶共享,缺點(diǎn):降低了處理速度。編寫(xiě)源程序用編輯程序?qū)⒃闯绦蜉斎胗?jì)算機(jī)調(diào)用匯編程序?qū)υ闯绦蜻M(jìn)行匯編是否有錯(cuò)誤?調(diào)用連接程序?qū)R編后生成的目標(biāo)文件(·OBJ)進(jìn)行連接連接是否有錯(cuò)誤?運(yùn)行連接后生成的可執(zhí)行文件結(jié)果是否有錯(cuò)誤?調(diào)用調(diào)試文件進(jìn)行調(diào)試運(yùn)行是否成功?結(jié)束修改已輸入的源程序YYNYYNNN程序從編寫(xiě)到運(yùn)行的過(guò)程修改已輸入的源程序修改已輸入的源程序修改已輸入的源程序因此在計(jì)算機(jī)上運(yùn)行匯編語(yǔ)言程序的步驟是:1.用編輯程序建立ASM源文件。2.用TASM程序把源文件轉(zhuǎn)換成OBJ文件。3.用TLINK程序把目標(biāo)文件轉(zhuǎn)換成EXE文件。4.用DOS命令直接鍵入文件名就可執(zhí)行該程序。編輯程序PROGR·ASM文件PROGR·OBJ文件PROGR·EXE文件匯編程序連接程序TASMTLINK匯編語(yǔ)言程序的建立及匯編過(guò)程三、匯編程序?qū)ψ兞亢蜆?biāo)號(hào)的處理匯編程序通過(guò)ASSUME語(yǔ)句了解到運(yùn)行時(shí)各段寄存器的設(shè)定值后,就可以對(duì)被匯編的指令語(yǔ)句中的變量和標(biāo)號(hào)作如下處理。1.檢查指令中所引用的變量和標(biāo)號(hào)是否合理,即它們的段屬性是否和某個(gè)段寄存器的段假設(shè)值相符。2.檢查是否需要為所引用的變量和標(biāo)號(hào)是否產(chǎn)生跨段前綴字節(jié),即檢查變量和標(biāo)號(hào)的段屬性是否與硬件為該指令所規(guī)定的段寄存器的假設(shè)值相符。下圖是匯編程序?qū)χ噶钪幸玫淖兞?標(biāo)號(hào)是否合理以及是否需要生成跨段前綴字節(jié)處理過(guò)程的示意圖。取變量/標(biāo)號(hào)的段屬性它們是否已被設(shè)定在某個(gè)段寄存器中?地址表達(dá)式是否有跨段前綴運(yùn)算符?前綴是段寄存器嗎?是JMP或CALL指令嗎?地址表達(dá)式是否帶有跨段前綴運(yùn)算符?前綴是硬件為該指令規(guī)定的段寄存器嗎?匯編生成帶段前綴字節(jié)的目標(biāo)指令代碼與段屬性一致的寄存器是硬件為該指令規(guī)定的寄存器嗎?匯編生成不帶跨段前綴字節(jié)的指令目標(biāo)代碼出錯(cuò)NNYYNNNYYYYYNN匯編程序以變量/標(biāo)號(hào)段屬性的檢查與處理四、匯編語(yǔ)言程序上機(jī)舉例例:把40個(gè)字母a的字符串從源緩沖區(qū)傳送到目的緩沖區(qū)。;PROGRAMTITLEGOESHERE--ex_movs;*****************************************************data segment ;definedatasegmentsource_buffer db40dup('A')dataends;***************************************************** extra segment ;defineextrasegmentdest_buffer db40dup(?)extra ends;*****************************************************code segment ;definecodesegment;main proc far;mainpartofprogram assume cs:code,ds:data,es:extrastart: ;startingexecutionaddress;setupforreturn push ds;saveolddatasegment sub ax,ax ;putzeroinAX push ax;saveitonstack;setDSregistertocurrentdatasegment mov ax,data ;datasegmentaddr mov ds,ax;intoDSregister;setESregistertocurrentextrasegment mov ax,extra;extrasegmentaddr mov es,ax ;intoESregister建立DOS的返回地址;MAINPARTOFPROGRAMGOESHERE lea si,source_buffer;putoffsetaddrofsource ;bufferinSI lea di,dest_buffer;putoffsetaddrofdestination ;bufferinDI cld ;setDFflagtoforward mov cx,40 ;putcountinCX rep movsb ;moveentirestring ret ;returntoDOSmain endp;endofmainpartofprogram;code ends ;endofcodesegment;******************************************************* end start ;endassembly下面對(duì)該程序進(jìn)行上機(jī)調(diào)試: D:\lxy1>TASMMY;對(duì)源文件MY進(jìn)行匯編 TurboAssemblerVersion2.5Copyright(c)1988,1991Borland International Assemblingfile:MY.ASM *Warning*MY.ASM(8)Reservedwordusedassymbol:STACK Errormessages:None Warningmessages:1 Passes:1 Remainingmemory:423k D:\lxy1>TLINKMY ;對(duì)源文件MY進(jìn)行連接 TurboLinkVersion4.0Copyright(c)1991BorlandInternational D:\lxy1>程序在存儲(chǔ)區(qū)中存放的邏輯地址源程序部分程序執(zhí)行后各寄存器、標(biāo)志位的結(jié)果數(shù)據(jù)段中存放的40個(gè)“A”及對(duì)應(yīng)的ASCII碼DEBUG調(diào)試環(huán)境如下:6.6匯編語(yǔ)言程序設(shè)計(jì)的基本方法一、概述(1)分析課題,抽象出數(shù)學(xué)模型。(2)確定控制方案和算法。(3)畫(huà)出程序框圖,分析設(shè)計(jì)方案的可行性及實(shí)現(xiàn)方法。1.匯編語(yǔ)言程序設(shè)計(jì)的一般步驟(4)編制源程序,確定I/O口地址及存儲(chǔ)器空間的具體分配。(5)調(diào)試修改源程序。(6)運(yùn)行試驗(yàn),模擬或直接給出各種條件,使程序充分運(yùn)行。(7)對(duì)最終的軟件程序進(jìn)行整理,并建立文檔。2.判斷程序質(zhì)量的標(biāo)準(zhǔn)(1)程序的執(zhí)行時(shí)間。(2)程序所占用的內(nèi)存字節(jié)數(shù)。(3)程序的語(yǔ)句行數(shù)。3.程序流程圖(1)用方框表示工作框,分別有一個(gè)入口和出口,用箭頭表示,框內(nèi)簡(jiǎn)單說(shuō)明所完成的特定功能。程序流程圖是在編寫(xiě)程序之前用于確定程序的結(jié)構(gòu)和相互之間的關(guān)系。按慣例:(3)六邊形框?yàn)樽映绦蚧蜻^(guò)程框,框內(nèi)標(biāo)出子程序或過(guò)程名,有一個(gè)入口一個(gè)出口,用箭頭表示。(4)帶箭頭的直線,各框之間用帶箭頭的直線連接起來(lái),表示程序的走向。(2)用菱形表示判斷框,菱形內(nèi)標(biāo)明比較、判斷和條件,一個(gè)入口幾個(gè)出口。二、順序程序設(shè)計(jì)(算術(shù)運(yùn)算程序)直線運(yùn)行程序是沒(méi)有分支、沒(méi)有循環(huán)、沒(méi)有轉(zhuǎn)移順序執(zhí)行的一種簡(jiǎn)單程序。例:兩個(gè)32位無(wú)符號(hào)數(shù)乘法程序8088/8086中只有16bit運(yùn)算指令,兩個(gè)32bit數(shù)相乘無(wú)法直接用指令實(shí)現(xiàn),但可以利用16bit乘法指令,采用快速乘法算法編程實(shí)現(xiàn)。ABB×DCDA×DB×CA×C+×部分積1部分積2部分積3部分積432位數(shù)乘法圖解用16位乘法指令實(shí)現(xiàn)32位乘法的程序流程圖設(shè)地址指針被乘數(shù)的低16位BAX乘數(shù)的低16位DSI乘數(shù)的高16位CDIBD=部分積1存入緩沖區(qū)被乘數(shù)的高16位AXAD=部分積2部分積2的低16位+部分積1的高16位進(jìn)位加至部分積2高16位AC=部分積4存入緩沖區(qū)BC=部分積3與前面的對(duì)應(yīng)16位相加保存進(jìn)位恢復(fù)進(jìn)位部分積4與前面的和相加保存在緩沖區(qū)返回相應(yīng)的程序?yàn)椋?NAME 32-BIT-MULTIPLYDATA SEGMENTMULNUM DW 0000,0FFFFH,0000,0FFFFH,4DUP(?)DATA ENDSSTACKSEGMENT DB100DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART PROC FARBEGIN: PUSH DS ;DS中包含的是程序段前綴的起始地址 MOV AX,0 PUSH AX ;設(shè)置返回至DOS的段值和IP值 MOV AX,DATA MOV DS,AX MOV ES,AX ;置段寄存器初值 LEA BX,MULNUMMULU32: MOV AX,[BX] ;BAX MOV SI,[BX+4] ;DSI MOV DI,[BX+6] ;CDI MUL SI ;B×D MOV [BX+8],AX ;保存部分積1 MOV [BX+0AH],DX MOV AX,[BX+2] ;AAX MUL SI ;A×D ADD AX,[BX+0AH] ADC DX,0 ;部分積2的一部分與部分積1的相 ;應(yīng)部分相加 MOV [BX+0AH],AX MOV [BX+0CH],DX ;保存 MOV AX,[BX] ;BAX MUL DI ;B×C ADD AX,[BX+0AH] ;與部分積3的相應(yīng)部分相加

ADC DX,[BX+0CH] MOV [BX+0AH],AX MOV [BX+0CH],DX PUSHF ;保存后一次相加的進(jìn)位位 MOV AX,[BX+2] ;AAX MUL DI ;A×C POPF ADC AX,[BX+0CH] ;與部分積4的相應(yīng)部分相加 ADC DX,0 MOV [BX+0CH],AX MOV [BX+0EH],DX RETSTART ENDPCODE ENDS END BEGIN三、分支程序設(shè)計(jì)程序中根據(jù)各種可能出現(xiàn)的情況及相應(yīng)的處理方法分成若干支路,運(yùn)行時(shí),根據(jù)不同情況有選擇地執(zhí)行相應(yīng)處理程序。例:符號(hào)函數(shù)當(dāng)x>0時(shí)當(dāng)x=0時(shí)當(dāng)x<0時(shí)其程序流程圖如下圖所示相應(yīng)的程序段為;X出口入口<0>0=0y-1y0y1符號(hào)函數(shù)流程圖 MOV AX,BUFFER OR AX,AX JE ZERO JNSPLUSMOV BX,-1 JMP CONTIZERO: MOV BX,0 JMP CONTIPLUS: MOV BX,1CONTI:

……四、循環(huán)程序一段程序有時(shí)重復(fù)執(zhí)行多次,就牽涉到循環(huán)程序結(jié)構(gòu),其組成部分為:1.循環(huán)體即要求重復(fù)執(zhí)行的程序段部分,包括循環(huán)工作部分和循環(huán)控制部分。2.循環(huán)初態(tài)循環(huán)開(kāi)始時(shí)往往要置初態(tài),賦初值,包括循環(huán)工作部分初態(tài)和結(jié)束條件初態(tài)。3.循環(huán)結(jié)束條件在循環(huán)程序中必須給出循環(huán)結(jié)束條件,否則就會(huì)進(jìn)入死循環(huán),結(jié)束條件有好多種,最常見(jiàn)的有:(1)用計(jì)數(shù)器控制循環(huán)(2)按問(wèn)題的條件控制循環(huán)(3)多重循環(huán)(4)用開(kāi)關(guān)量控制循環(huán)(5)用邏輯尺控制循環(huán)例:某一數(shù)據(jù)采集系統(tǒng)采得的12個(gè)數(shù)據(jù)已存放到BUF緩沖區(qū),若第1,2,5,7,10這幾個(gè)測(cè)量值作FUN1處理,其余的作FUN2處理。我們?cè)O(shè)置為一個(gè)位串,作FUN1處理的位記為0,作FUN2處理的位記為1,則實(shí)現(xiàn)上述控制要求的位串為10000,此位串稱(chēng)為邏輯尺(不足16bit用0補(bǔ)足),可放在某一寄存器中,其流程圖如下圖所示。初始化:設(shè)邏輯尺,設(shè)循環(huán)次數(shù),設(shè)地址指針取邏輯尺邏輯尺左移一位標(biāo)志C=0?調(diào)用FUN1調(diào)用FUN2完成否?存結(jié)果,修改地址指針?lè)祷豗NNY上圖相應(yīng)程序如下: NAME LOOP_USE_LOGIC_RULADATA SEGMENTBUFFER DW 11,22,33,44,55,66,77,88,99,1234,5678,9876BLOCK DW 12DUP(?)COUNT EQU 12LOGRUL EQU 10000BDATA ENDSSTACK SEGMENT PARA STACK 'STACK

' DB 100DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART PROC FARBEGIN: PUSH DS MOV AX,0 PUSH AX ;為返回DOS,設(shè)置返回地址 MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,LOGRUL MOV CX,COUNT LEA BX,BUFFER LEA SI,BLOCKAGAIN: MOV AX,[BX] RCL DX,1 ;邏輯尺左移1位 JC ANOTH CALL FUN1NEXT: MOV [SI],AX INC BX INC BX INC SI INC SI LOOP AGAIN RETANOTH: CALL FUN2 JMP NEXTSTART ENDPFUN1 PROC ADD AX,AX RETFUN1 ENDPFUN2 PROC ADD AX,AX ADD AX,AX RETFUN2 ENDPCODE ENDS END BEGIN五、子程序設(shè)計(jì)常把具有獨(dú)立功能模塊設(shè)計(jì)成子程序,在注釋部分要明確描述:(1)本子程序的目的;(2)輸入和輸出參數(shù);(3)所用寄存器和存儲(chǔ)單元。例:軟件時(shí)鐘程序首先在CRT上輸出一個(gè)要求用戶用鍵盤(pán)輸入時(shí)鐘初始值的提示符‘:’。用鍵盤(pán)敲入格式為‘XX(時(shí)):XX(分):XX(秒)’然后調(diào)用一個(gè)延時(shí)1秒的子程序(在程序中只用一個(gè)延時(shí)子程序代替,并未精確計(jì)算延時(shí)1秒的子程序),每過(guò)去1秒使秒值1,然后檢查是否已為60,若不是,則轉(zhuǎn)至顯示;若是,則使秒值為0,分值為1,檢查是否已為60,若不是則轉(zhuǎn)顯示;若是,則使分值為0,時(shí)值加1。接著檢查時(shí)值是否已為24,若不是則轉(zhuǎn)顯示;若是,則使時(shí)值為0,接著也轉(zhuǎn)顯示,其流程如下圖所示。調(diào)用“1”秒延時(shí)子程序秒增量DAA調(diào)整=60?置秒值為0分值加1DAA調(diào)整=60?把CH,DH,DL中的時(shí)分秒值轉(zhuǎn)換為ASCII碼,送至緩沖區(qū)中利用功能調(diào)用9,輸出緩沖區(qū)中的時(shí)間值=24?DAA調(diào)整時(shí)值加1置分值為0初始化利用功能調(diào)用2,輸出提示符‘:’,要求輸入當(dāng)前時(shí)間利用功能調(diào)用10,按規(guī)定格式從控制臺(tái)輸入當(dāng)前時(shí)間把輸入數(shù)的ASCII碼變?yōu)锽CD把輸入的時(shí),分,秒的BCD值轉(zhuǎn)換為二進(jìn)制數(shù),分別送至CH,DH,DL置時(shí)值為0NNNYYYnameoutput_clockdatasegment;開(kāi)辟10個(gè)字節(jié)的緩沖區(qū)便于存放“時(shí):分:秒”值bufferdb10db?db10dup(?)dataendsstacksegmentparastack'stack'db100dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushax ;設(shè)置DOS的返回地址

movax,datamovds,axmoves,axmovdl,':'movah,2;輸出提示符“:”int21hleadx,buffermovah,10int21h ;向buffer輸入當(dāng)前時(shí)鐘初值leabx,buffer+2moval,[bx]andal,0fhmov[bx],alincbxmoval,[bx]andal,0fhmov[bx],alincbx ;將時(shí)值的ASCII碼化為未壓縮的BCD碼并放回原處incbxmoval,[bx]andal,0fhmov[bx],alincbxmoval,[bx]andal,0fhmov[bx],alincbx ;將分值的ASCII碼化為未壓縮的BCD碼并放回原處incbxmoval,[bx]andal,0fhmov[bx],alincbxmoval,[bx]andal,0fhmov[bx],al ;將秒值的ASCII碼化為未壓縮的BCD碼并放回原處leabx,buffer+2moval,[bx]callmul10movch,al ;時(shí)值壓縮的BCD碼放入CH中incbxincbxmoval,[bx]callmul10movdh,al ;分值壓縮的BCD碼放入DH中incbxincbxmoval,[bx]callmul10movdl,al ;秒值壓縮的BCD碼放入DL中 moval,dl addal,1 daa movdl,al cmpal,60h;秒值加1不等于60則將當(dāng)前時(shí)鐘值轉(zhuǎn)換為ASCII碼再去顯示jnedispy movdl,0;否則秒值為0,分值加1 moval,dh addal,1 daa movdh,al cmpal,60h;分值不等于60則將當(dāng)前時(shí)鐘值轉(zhuǎn)換為ASCII碼再去顯示 jnedis

溫馨提示

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

評(píng)論

0/150

提交評(píng)論