計(jì)算機(jī)組成技術(shù)第7章學(xué)習(xí)專業(yè)課件_第1頁(yè)
計(jì)算機(jī)組成技術(shù)第7章學(xué)習(xí)專業(yè)課件_第2頁(yè)
計(jì)算機(jī)組成技術(shù)第7章學(xué)習(xí)專業(yè)課件_第3頁(yè)
計(jì)算機(jī)組成技術(shù)第7章學(xué)習(xí)專業(yè)課件_第4頁(yè)
計(jì)算機(jī)組成技術(shù)第7章學(xué)習(xí)專業(yè)課件_第5頁(yè)
已閱讀5頁(yè),還剩104頁(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)介

第7章8086/8088匯編語(yǔ)言程序設(shè)計(jì)7.1引言7.2順序程序設(shè)計(jì)7.3分支結(jié)構(gòu)程序設(shè)計(jì)7.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)7.5字符串操作程序設(shè)計(jì)

7.6宏、條件匯編與重復(fù)匯編

7.7子程序設(shè)計(jì)7.88086/8088微處理器的其他指令與應(yīng)用

1.匯編語(yǔ)言的基本概念與學(xué)習(xí)匯編語(yǔ)言的重要性

匯編語(yǔ)言是一種面向機(jī)器(處理器)的程序設(shè)計(jì)語(yǔ)言,是機(jī)器語(yǔ)言的符號(hào)化表示。匯編語(yǔ)言的執(zhí)行語(yǔ)句與機(jī)器指令有著一一對(duì)應(yīng)的關(guān)系,即一個(gè)執(zhí)行語(yǔ)句對(duì)應(yīng)一條機(jī)器指令。按照某種機(jī)器匯編語(yǔ)言的語(yǔ)法規(guī)則編寫的源程序必須翻譯成相應(yīng)的機(jī)器語(yǔ)言才能在計(jì)算機(jī)上運(yùn)行。這個(gè)翻譯過(guò)程稱為匯編。從匯編語(yǔ)言到機(jī)器語(yǔ)言的翻譯程序叫匯編程序。本課程介紹的匯編程序是微軟公司開發(fā)的MASM。交叉匯編、反匯編

7.1引言1.匯編語(yǔ)言的基本概念與學(xué)習(xí)匯編語(yǔ)言的重要性

學(xué)習(xí)匯編語(yǔ)言有助于加深對(duì)計(jì)算機(jī)組成、尋址方式和指令集的理解,全面、客觀地評(píng)價(jià)計(jì)算機(jī)/處理器的性能。使用匯編語(yǔ)言可以直接操作、控制計(jì)算機(jī)的底層硬件。相對(duì)于高級(jí)語(yǔ)言源程序經(jīng)過(guò)編譯得到的目標(biāo)程序,匯編語(yǔ)言源程序經(jīng)匯編得到的目標(biāo)程序具有代碼精練、占用存儲(chǔ)空間小、執(zhí)行速度快的特點(diǎn),甚至還可以降低機(jī)器的功耗。不同的機(jī)器有不同的匯編語(yǔ)言,不同的匯編語(yǔ)言有不同的語(yǔ)法規(guī)則。本課程只介紹8086/8088匯編語(yǔ)言。7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

合法的字符英文字母A~Z/a~z(匯編語(yǔ)言不區(qū)分字母大小寫)數(shù)字0~9符號(hào)+、–、*、/、=、<、>、(、)、[、]、;、,、

、:、’、”、_、@、$、&、#、?、!數(shù)據(jù)分為常量和變量在匯編期間,常量的值完全確定。在程序運(yùn)行期間,常量的值不會(huì)發(fā)生變化。在匯編語(yǔ)言中,變量名代表的是該變量在計(jì)算機(jī)中的存儲(chǔ)地址(和類型)。

7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

常量二進(jìn)制整數(shù),例如:01010101B

八進(jìn)制整數(shù),例如:567O、567Q十進(jìn)制整數(shù),例如:1234十六進(jìn)制整數(shù),例如:12H,0ABH字符,例如:‘O’、“GOOD”十進(jìn)制實(shí)數(shù),例如:12.34E–5

十六進(jìn)制實(shí)數(shù),例如:1A2B345R

7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

符號(hào)常量用途:提高程序的可讀性、降低發(fā)生錯(cuò)誤的可能性通過(guò)“EQU”或“=”語(yǔ)句來(lái)定義例如:PIEQU3.141592ALPHT=PI*3一個(gè)符號(hào)用“EQU”定義后就不允許對(duì)其再次定義,而用“=”定義的符號(hào)可以對(duì)其再次定義符號(hào)常量及其數(shù)值保存在匯編程序管理的符號(hào)表中,在匯編過(guò)程中,一旦遇到符號(hào)就用它的數(shù)值替換。7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

變量?jī)煞N類型:寄存器變量和主存變量寄存器變量就是寄存器名。例如:AX(AH|AL),BX(BH|BL),CX(CH|CL),DX(DH|DL),SI,DI,BP,SP,CS,DS,ES,SS,IP主存變量簡(jiǎn)稱為變量,變量名具有段地址、偏移地址和類型三個(gè)屬性。變量的類型有:DB、DW、DD、DQ和DT。7.1引言一個(gè)實(shí)現(xiàn)字節(jié)型變量X+Y

Z的源程序匯編語(yǔ)言源程序,在結(jié)構(gòu)上與高級(jí)語(yǔ)言源程序是相似的,都是先定義變量,再編寫對(duì)變量進(jìn)行處理的語(yǔ)句。匯編語(yǔ)言的語(yǔ)句是計(jì)算機(jī)指令的助記符,功能單一,一行只能書寫一個(gè)語(yǔ)句/指令,且用“回車”來(lái)標(biāo)志結(jié)束,不需要在語(yǔ)句末尾加任何標(biāo)點(diǎn)符號(hào)。一個(gè)實(shí)現(xiàn)字節(jié)型變量X+Y

Z的源程序注釋處理語(yǔ)句(也稱指令性語(yǔ)句)說(shuō)明語(yǔ)句(也稱偽指令性)2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

上例的偽指令有段定義偽指令、變量定義偽指令和段值設(shè)置偽指令段定義偽指令由語(yǔ)句“段名SEGMENT”開始,以語(yǔ)句“段名ENDS”結(jié)束。變量定義偽指令的格式是:變量名變量類型變量初值序列[;注釋]段值設(shè)置偽指令A(yù)SSUME,放在代碼段的開始處7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

上例的指令性語(yǔ)句有MOV指令、ADD指令和INT指令指令性語(yǔ)句的一般格式是:

[標(biāo)號(hào):]指令操作符[操作數(shù)][,操作數(shù)][;注釋]操作數(shù)分為源操作數(shù)和目的操作數(shù),前者表示欲處理數(shù)據(jù)的源地址,后者表示處理結(jié)果的存儲(chǔ)地址,兩者的數(shù)據(jù)類型必須一致。標(biāo)號(hào)是后面緊跟著冒號(hào)的標(biāo)識(shí)符,代表冒號(hào)后面語(yǔ)句的存儲(chǔ)地址,供轉(zhuǎn)移指令或循環(huán)指令作為操作數(shù)使用標(biāo)號(hào)的屬性:NEAR、FAR7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

標(biāo)號(hào)、段名和變量名統(tǒng)稱為標(biāo)識(shí)符是一個(gè)由字母、符號(hào)或數(shù)字組成的字符串。這個(gè)字符串有三個(gè)限制:一是必須采用合法的字符;二是第一個(gè)字符必須是字母、問(wèn)號(hào)、@或下劃線中的一個(gè),不能是數(shù)字;三是不能使用匯編語(yǔ)言的保留字。標(biāo)識(shí)符中字符個(gè)數(shù)沒有明確的限制,但只有前面的31個(gè)字符能夠被匯編程序識(shí)別。標(biāo)識(shí)符的命名應(yīng)該有一些含義,以增強(qiáng)程序的可讀性和可理解性。7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

MOV指令格式:MOVDst,Src;(Dst)

(Src)

例如:MOVAX,

BXMOVCX,1234HMOV可以實(shí)現(xiàn)通用寄存器和主存單元之間的數(shù)據(jù)傳送,卻不能實(shí)現(xiàn)兩個(gè)主存單元之間或兩個(gè)段寄存器之間的數(shù)據(jù)傳送。7.1引言2.8086/8088匯編語(yǔ)言的基本語(yǔ)法

ADD指令格式:ADDDst,Src;(Dst)

(Src)+(Dst)

例如:ADDAX,

BXADDCX,[1234H]ADD指令影響標(biāo)志位OF,SF,ZF,AF,PF,CF7.1引言匯編語(yǔ)言程序的開發(fā)過(guò)程編寫源程序:EDIT(DOS),TextPad(Windows)將源程序保存為XXXX.asm文件使用MASM生成目標(biāo)程序XXXX.obj使用LINK生成可執(zhí)行程序XXXX.exe7.1引言源程序XXX.asm目標(biāo)程序XXX.obj可執(zhí)行程序XXX.exe設(shè)計(jì)編輯用MASM匯編用LINK連接執(zhí)行1.概述順序程序是指不含有轉(zhuǎn)移指令或分支指令的程序,語(yǔ)句執(zhí)行的順序就是它們排列的順序。

7.2順序程序設(shè)計(jì)指令格式:XORDst,Src;(Dst)

(Src)

(Dst)注意對(duì)標(biāo)志位的影響。2.尋址方式

目的大多數(shù)情況下,指令不直接給出操作數(shù)本身,而是給出存放操作數(shù)的寄存器或者是內(nèi)存單元的地址。大多數(shù)情況下,操作數(shù)地址也不是直接給出,而是給出計(jì)算操作數(shù)地址的方法,稱之為尋址方式7.2順序程序設(shè)計(jì)(1)立即尋址操作數(shù)直接存放在指令中,緊跟在操作碼之后,它作為指令的一部分存放在代碼段里,這種操作數(shù)稱為立即數(shù)。立即數(shù)可以是8位的或者16位的。(386之后的機(jī)器也可以是32位的)立即數(shù)用來(lái)表示常數(shù),它經(jīng)常用來(lái)給寄存器賦初值。只能用于源操作數(shù)字段,不能用于目的操作數(shù)字段,且源操作數(shù)長(zhǎng)度應(yīng)與目的操作數(shù)長(zhǎng)度一致。立即數(shù)尋址舉例

MOVAX,3064H

指令執(zhí)行后(AX)=3064H6430……………………OP…………指令A(yù)X立即尋址舉例MOV AL,4EH4EOP4EMOVAL,4EHAL(2)寄存器尋址操作數(shù)在寄存器中,指令中指定寄存器號(hào)。16位的操作數(shù),寄存器可以是

AX,BX,CX,DX,SI,DI,SP,BP。8位的操作數(shù),寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL。例:MOVAX,BX

指令執(zhí)行前:(AX)=3064H

(BX)=1234H指令執(zhí)行后:(AX)=1234H

(BX)=1234H寄存器尋址不需要訪問(wèn)存儲(chǔ)器來(lái)取得操作數(shù),所以可以得到較高的運(yùn)算速度。立即數(shù)尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對(duì)尋址基址變址尋址相對(duì)基址變址尋址不需要計(jì)算操作數(shù)的地址需要計(jì)算操作數(shù)的

有效地址EA操作數(shù)的地址段地址偏移地址+我們把這個(gè)偏移地址稱為有效地址(EA)有效地址=基址+變址+位移量存放在指令中的一個(gè)8位、16位的數(shù),但它不是立即數(shù),而是一個(gè)地址。存放在變址寄存器(SI,DI)中的內(nèi)容,用來(lái)訪問(wèn)數(shù)組中的某個(gè)元素或字符串中的某個(gè)字符存放在基址寄存器(BX,BP)中的內(nèi)容,它是有效地址中的基址部分,通常用來(lái)指向數(shù)據(jù)段中數(shù)組或字符串的首地址段偏移地址CSIPSSSP或BPDSBX、DI、SI或一個(gè)16位數(shù)ESBX、DI、SI或一個(gè)16位數(shù)8086/8088段寄存器和相應(yīng)存放偏移地址的寄存器之間的默認(rèn)組合(3)直接尋址操作數(shù)的有效地址只包含位移量一種成分,其值就存放在代碼段中指令的操作碼之后。位移量的值就是操作數(shù)的有效地址。例:MOVAX,[2000H]

假設(shè)(DS)=3000H物理地址=3000H*16+2000H

=32000H32000H0020……………………OP…………代碼段5030…………數(shù)據(jù)段AX

則指令執(zhí)行后,AX=3050H可以用符號(hào)來(lái)代替數(shù)值地址

MOVAX,ADDR

MOVAX,[ADDR]

如果在附加段,則應(yīng)指定段前綴

MOVAX,ES:ADDR

MOVAX,ES:[ADDR]直接尋址中操作數(shù)地址是直接寫在指令中,所以它只適用于處理單個(gè)變量。因?yàn)橐幚砹硗庖粋€(gè)變量,就需要用另外一條指令了。(4)寄存器間接尋址指令的操作數(shù)是一個(gè)寄存器。但是寄存器中的內(nèi)容并不是真正的操作數(shù),而是操作數(shù)的有效地址。因此真正的操作數(shù)需要按照這個(gè)有效地址訪問(wèn)主存儲(chǔ)器才能獲得。16位尋址,可用的寄存器是BX,BP,SI,DI。使用BX、SI、DI,其默認(rèn)段是數(shù)據(jù)段DS。使用BP,其默認(rèn)段是堆棧段SS。例:MOVAX,[BX]設(shè)(DS)=2000H

(BX)=1000H物理地址=2000H*16+1000H=21000H指令執(zhí)行后AX=50A0H21000H……………………A050…………數(shù)據(jù)段AX寄存器間接尋址可用于以循環(huán)結(jié)構(gòu)來(lái)處理表格,執(zhí)行完一條指令后,只需修改寄存器內(nèi)容就可以用同一個(gè)指令來(lái)訪問(wèn)表格的下一項(xiàng)。(5)寄存器相對(duì)尋址“相對(duì)尋址”意味著指令中帶有位移量。操作數(shù)的有效地址為基址寄存器或變址寄存器的內(nèi)容和指令中的位移量之和。例:MOVAX,COUNT[SI]也可以表示為MOVAX,[COUNT+SI]請(qǐng)問(wèn):寄存器間接尋址與寄存器相對(duì)尋址,有何不同?例:MOVAX,COUNT[BX]

MOVAX,COUNT[SI]

當(dāng)指令中使用的是基址寄存器BX或BP時(shí),也稱為基址尋址。當(dāng)指令中使用的是變址寄存器SI或DI時(shí),也稱為變址尋址。例:MOVAX,COUNT[BX]設(shè)(DS)=3000H

(BX)=2000HCOUNT=3000H物理地址=3000H*16+2000H+3000H=35000H指令執(zhí)行后AX=1234H30000H35000H0030……………………OP…………代碼段3412…………數(shù)據(jù)段AX…………33000HCOUNTBXDS寄存器相對(duì)尋址(即基址尋址或變址尋址)同樣可以用于以循環(huán)結(jié)構(gòu)來(lái)處理表格,表格的首地址可設(shè)置為偏移量(第幾列)的地址,利用修改基址或變址寄存器中的內(nèi)容(第幾行)來(lái)取得表格中的值(6)基址變址尋址操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和例:MOVAX,[BX][DI]也可以表示為MOVAX,[BX+DI]指令執(zhí)行后

AX=1234H21000H221FDH……………………3412…………數(shù)據(jù)段AX…………21158HBX例:MOVAX,[BX][DI]設(shè)(DS)=2100H

(BX)=0158H

(DI)=10A5H物理地址=(2100H*16+0158H)+10A5H

=21158H+10A5H=221FDH基址變址尋址同樣可以用于以循環(huán)結(jié)構(gòu)來(lái)處理數(shù)組或表格。表格的首地址可存放在基址寄存器中(在處理過(guò)程中保持不變),利用變址寄存器的值作為下標(biāo)來(lái)訪問(wèn)數(shù)組或表格中的元素,每處理完一個(gè)元素,變址寄存器的值“加一”指向下一個(gè)元素。(7)相對(duì)基址變址尋址“相對(duì)尋址”意味著指令中帶有位移量。操作數(shù)的有效地址是一個(gè)基址寄存器與一個(gè)變址寄存器的內(nèi)容和指令中的位移量之和。例:MOVAX,ARRAY[BX][SI]也可表示為MOVAX,[ARRAY+BX+SI]例:MOVAX,MASK[BX][SI]設(shè)(DS)=3000H

(BX)=2000H

(SI)=1000HMASK=0250H物理地址=3000H*16+2000H+1000H+0250H

=33250H假設(shè)[33250]=1234H,則指令執(zhí)行后

AX=1234H相對(duì)基址變址尋址常用于二維數(shù)組元素的尋址。如存儲(chǔ)器中存放著由多個(gè)記錄組成的文件,則以位移量可以指向文件之首,基址寄存器指向某個(gè)記錄,變址寄存器則指向該記錄中的一個(gè)元素3.表達(dá)式的使用

例7-232位數(shù)據(jù)X和Y的加減,結(jié)果分別存于Result1和Result2。DATASEGMENTXDD12345600HYDD11223344HResult1DD?Result2DD?DATAENDS

7.2順序程序設(shè)計(jì)代碼段的框架CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

(核心代碼)MOVAH,4CHINT21HCODEENDSENDSTART7.2順序程序設(shè)計(jì)代碼段的核心代碼MOVAX,WORDPTRX

MOVDX,WORDPTR[X+2] ;把1234H裝入DXADDAX,WORDPTRYADCDX,WORDPTR[Y+2] ;MOVWORDPTRResult1,AX ;保存結(jié)果的低16位

MOVWORDPTR[Result1+2],DX ;保存結(jié)果的高16位

MOVAX,WORDPTRXMOVDX,WORDPTR[X+2]SUBAX,WORDPTRYSBBDX,WORDPTR[Y+2];MOVWORDPTRResult2,AXMOVWORDPTR[Result2+2],DX7.2順序程序設(shè)計(jì)帶進(jìn)位的加法帶借位的減法表達(dá)式表達(dá)式的類型:數(shù)值表達(dá)式:常量與運(yùn)算符(包括圓括號(hào))組成的算式,它的運(yùn)算結(jié)果被當(dāng)作一個(gè)數(shù)值地址表達(dá)式:運(yùn)算對(duì)象,包括寄存器名、常量、變量、標(biāo)號(hào)及方括號(hào)(表示讀主存)與運(yùn)算符組成的算式,它的運(yùn)算結(jié)果被當(dāng)作一個(gè)主存地址

7.2順序程序設(shè)計(jì)數(shù)值表達(dá)式的運(yùn)算符類型:算術(shù)運(yùn)算符。+(加)、–(減)、*(乘)、/(除)、MOD(取余數(shù))、SHR(算術(shù)右移)和SHL(算術(shù)左移)。其中算術(shù)右移/左移1位相當(dāng)于除以/乘以2。邏輯運(yùn)算符。AND(與)、OR(或)、NOT(非)和XOR(異或)。這4個(gè)運(yùn)算符也是指令助記符。不過(guò)數(shù)值表達(dá)式在匯編時(shí)就用求出的值來(lái)代替表達(dá)式,不會(huì)與指令混淆。關(guān)系運(yùn)算符。EQ(等于)、NE(不等于)、LT(小于)、GT(大于)、LE(小于等于)和GE(大于等于)。它們的運(yùn)算結(jié)果是0(表示不成立或者“假”)或0FFFFH(表示成立或者“真”)。7.2順序程序設(shè)計(jì)數(shù)值表達(dá)式的例子:MOVBX,((SUMLT10)AND30)OR((SUMGE100)AND20符號(hào)常量SUM小于10時(shí),將被匯編成“MOVBX,30”;SUM大于等于100時(shí),將被匯編成“MOVBX,20”;SUM介于10~100時(shí),將被匯編成“MOVBX,0”。

7.2順序程序設(shè)計(jì)地址表達(dá)式的運(yùn)算符類型:數(shù)值表達(dá)式中的三類運(yùn)算符屬性取代符類型運(yùn)算符PTR段地址取代符“:”短地址取代符SHORT任意類型運(yùn)算符THIS屬性分離符7.2順序程序設(shè)計(jì)地址表達(dá)式的運(yùn)算符類型(續(xù)):屬性分離符取段地址符SEG和取偏移地址符OFFSET取類型符TYPE元素個(gè)數(shù)屬性符LENGTH字節(jié)總數(shù)屬性符SIZE高位字節(jié)屬性符HIGH和低位字節(jié)屬性符LOW

7.2順序程序設(shè)計(jì)4.乘/除法運(yùn)算的實(shí)現(xiàn)(1)8086/8088的乘法指令有兩個(gè):無(wú)符號(hào)數(shù)乘法指令MUL(unsignedMULtiple)MULsrc;(AX)

(AL)*(8位src)(DX,AX)

(AX)*(16位src)

帶符號(hào)數(shù)乘法指令I(lǐng)MUL(sIgnedMULtiple)IMULsrc;(AX)

(AL)*(8位src)(DX,AX)

(AX)*(16位src)7.2順序程序設(shè)計(jì)4.乘/除法運(yùn)算的實(shí)現(xiàn)(2)8086/8088的除法指令有兩個(gè):無(wú)符號(hào)數(shù)除法指令DIV(unsignedDIVide)

DIVsrc;(AL)

(AX)/(8位src)的商,

(AH)

(AX)/(8位src)的余數(shù)

(AX)

(DX,AX)/(16位src)的商

(DX)

(DX,AX)/(16位src)的余數(shù)

帶符號(hào)數(shù)除法指令I(lǐng)DIV(sIgnedDIVide)

IDIVsrc;(同上)7.2順序程序設(shè)計(jì)5.算術(shù)移位與邏輯移位(1)8086/8088的算術(shù)移位指令有兩個(gè):算術(shù)左移指令SAL(ShiftArithmeticLeft)

SALopr,1SALopr,CL

算術(shù)右移指令SAR(ShiftArithmeticRight)

SARopr,1SARopr,CL

7.2順序程序設(shè)計(jì)5.算術(shù)移位與邏輯移位(2)8086/8088的邏輯移位指令有兩個(gè):邏輯左移指令SHL(SHiftlogicalLeft)SHLopr,1SHLopr,CL

邏輯右移指令SHR(SHiftlogicalRight)

SHRopr,1SHRopr,CL

7.2順序程序設(shè)計(jì)

在匯編語(yǔ)言程序中,程序的分支是通過(guò)轉(zhuǎn)移指令來(lái)實(shí)現(xiàn)的。8086/8088微處理器提供了兩類轉(zhuǎn)移指令:無(wú)條件轉(zhuǎn)移指令JMP和條件轉(zhuǎn)移指令JX。它們的執(zhí)行均不影響標(biāo)志位。7.3分支結(jié)構(gòu)程序設(shè)計(jì)1.無(wú)條件轉(zhuǎn)移指令JMP指令格式:JMPOPR指令功能:根據(jù)OPR更改IP/或CS。根據(jù)是否改變CS寄存器,無(wú)條件轉(zhuǎn)移可以分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。顧名思義,段內(nèi)轉(zhuǎn)移不改變CS,只改變IP;段間轉(zhuǎn)移既改變CS,又改變IP。段內(nèi)轉(zhuǎn)移的三種形式:段內(nèi)直接短轉(zhuǎn)移。其格式是:JMPSHORTOPR段內(nèi)直接近轉(zhuǎn)移。其格式是:JMPOPR段內(nèi)間接轉(zhuǎn)移。其格式是:JMPWORDPTROPR7.3分支結(jié)構(gòu)程序設(shè)計(jì)段內(nèi)直接轉(zhuǎn)移

以當(dāng)前IP指向的地址為基準(zhǔn)地址,加上跟在操作碼后面的相對(duì)位移量D,得到目標(biāo)指令的有效地址EA。 為了便于實(shí)現(xiàn)加法,相對(duì)位移量D以補(bǔ)碼的形式表示位移量DIP+EA段內(nèi)直接轉(zhuǎn)移

8位的相對(duì)位移量(類型為:SHORT),對(duì)應(yīng)的轉(zhuǎn)移范圍是:-128~+127

16位的相對(duì)位移量(類型為:NEAR),對(duì)應(yīng)的轉(zhuǎn)移范圍是:-32768~+32767

例如:JMPNEARADDRJZSHORTADDR

位移量是匯編程序通過(guò)求轉(zhuǎn)向的目標(biāo)指令的有效地址與當(dāng)前IP值之差而的。注意:當(dāng)前IP已經(jīng)指向轉(zhuǎn)移指令的下一條指令段內(nèi)間接轉(zhuǎn)移轉(zhuǎn)向的有效地址是一個(gè)寄存器或是一個(gè)存儲(chǔ)單元的內(nèi)容。這個(gè)寄存器或者存儲(chǔ)單元中的內(nèi)容可以用除立即數(shù)以外的任何一種尋址方式獲得

(IP)

(EA)假設(shè):(DS)=2000H,(BX)=1256H,

(21256H)=3280H.

JMPBX

執(zhí)行該指令后,(IP)=1256H

JMP[BX]

執(zhí)行該指令后,(IP)=(20000H+1256H)=(21256H)

=3280H寄存器尋址方式寄存器間接尋址方式假設(shè):(DS)=2000H,(BX)=1256H,(SI)=528FH

,位移量VAR=2011H

(23267)=3280H,(284F6H)=2450H

JMPVAR[BX]

執(zhí)行該指令后,(IP)=((DS)*16+(BX)+位移量)

=(20000H+1256H+2011H)

=(23267H)=3280H

JMPVAR[BX][SI]

(IP)=((DS)*16+(BX)+(SI)+VAR)

=(20000H+1256H+528FH+2011H)

=(284F6H)=2450H基址變址相對(duì)尋址方式寄存器相對(duì)尋址方式

段間轉(zhuǎn)移應(yīng)用于轉(zhuǎn)移目標(biāo)不在JMP指令所在段的場(chǎng)合,需要給出4字節(jié)的目標(biāo)地址CS:IP。段間轉(zhuǎn)移有兩種形式:

段間直接(遠(yuǎn))轉(zhuǎn)移:JMPFARPTROPR指令直接提供轉(zhuǎn)向的段地址和偏移地址(類型為:FARPTR),例如:JMPFAR

PTROPR

(IP)

OPR的低16位(段內(nèi)偏移地址)(CS)

OPR的高16位(段地址)段間直接(遠(yuǎn))轉(zhuǎn)移段間間接尋址用存儲(chǔ)器中的相鄰兩個(gè)字的內(nèi)容來(lái)取代IP和CS寄存器中的原始內(nèi)容,以達(dá)到段間轉(zhuǎn)移的目的。存儲(chǔ)單元的有效地址EA是由指令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式獲得完成的操作:(IP)(EA)(CS)(EA+2)例JMPDWORDPTR[BX+8]

(BX)=3706H,(DS)=1000HEA=(BX)+8=3706H+8=370EH物理地址=(DS)*16+EA=10000H+370EH=1370EH

………B2H67H05H33H………………1370EH指令執(zhí)行后,(IP)=67B2H,(CS)=3305H2.條件轉(zhuǎn)移指令JX和比較指令CMPJX的格式是:JXOPR,其中OPR是目的地址標(biāo)號(hào)(SHORT屬性)。JX的操作是:滿足條件則(IP)

(IP)+OPR,即跳轉(zhuǎn)到目的地址處執(zhí)行指令;否則不做任何操作(即IP不變,執(zhí)行下一條指令)。說(shuō)明:X為1~3個(gè)字母,表示轉(zhuǎn)移條件。為了得到條件轉(zhuǎn)移指令所需的條件,通常需要先執(zhí)行“比較”指令CMP(CoMPare)7.3分支結(jié)構(gòu)程序設(shè)計(jì)判斷單個(gè)標(biāo)志位狀態(tài)的條件轉(zhuǎn)移指令有10條:CF=1時(shí)轉(zhuǎn)移JC(JumpifCarry)。CF=0時(shí)轉(zhuǎn)移JNC(JumpifNotCarry)。ZF=1時(shí)轉(zhuǎn)移JE/JZ(JumpifEqual,orZero)。ZF=0時(shí)轉(zhuǎn)移JNE/JNZ(JumpifNotEqual,orNotZero)SF=1時(shí)轉(zhuǎn)移JS(JumpifSign)。SF=0時(shí)轉(zhuǎn)移JNS(JumpifNotSign)。OF=1時(shí)轉(zhuǎn)移JO(JumpifOverflow)。OF=0時(shí)轉(zhuǎn)移JNO(JumpifNotOverflow)。PF=1時(shí)轉(zhuǎn)移JP/JPE(JumpifParity,orParityEven)。PF=0時(shí)轉(zhuǎn)移JNP/JPO(JumpifNotParity,orParityOdd)7.3分支結(jié)構(gòu)程序設(shè)計(jì)比較無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令有4條:高于/不低于且不等于(CF=0且ZF=0)轉(zhuǎn)移JA/JNBE。高于或等于/不低于(CF=0或ZF=1)轉(zhuǎn)移JAE/JNB。低于/不高于且不等于(CF=1且ZF=0)轉(zhuǎn)移JB/JNAE。低于或等于/不高于(CF=1或ZF=1)轉(zhuǎn)移JBE/JNA。其中,A表示高于(Above),B表示低于(Below),E表示等于(Equal)。

7.3分支結(jié)構(gòu)程序設(shè)計(jì)比較有符號(hào)數(shù)的條件轉(zhuǎn)移指令有4條:大于/不小于且不等于(ZF=0且SF

OF=0)轉(zhuǎn)移JG/JNLE。大于或等于/不小于(ZF=1或SF

OF=0)轉(zhuǎn)移JGE/JNL。小于/不大于且不等于(ZF=0且SF

OF=1)轉(zhuǎn)移JL/JNGE。小于或等于/不大于(ZF=1或SF

OF=1)轉(zhuǎn)移JLE/JNG。其中,G表示大于(Greater),L表示小于(Less),E表示等于(Egual)。7.3分支結(jié)構(gòu)程序設(shè)計(jì)例7-4求三個(gè)16位無(wú)符號(hào)數(shù)中的最大值DATASEGMENTXDW180Y

DW670ZDW320MAXDW?DATAENDS開始結(jié)束X≥Y?X≥Z?MAX←XYYXYXZNN例7-4求三個(gè)16位無(wú)符號(hào)數(shù)中的最大值CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

(具體操作指令序列)MOVAH,4CHINT21HCODEENDSENDSTART例7-4求三個(gè)16位無(wú)符號(hào)數(shù)中的最大值

(具體操作指令序列)MOVAX,XCMPAX,YJAEAXBIGMOVAX,YAXBIG:CMPAX,ZJAEAXMAXMOVAX,ZAXMAX:MOVMAX,AX開始結(jié)束X≥Y?X≥Z?MAX←XYYXYXZNN例7-5已知三個(gè)帶符號(hào)的8位二進(jìn)制數(shù)x、y、z,將其按升序排序后重新存回x、y、zDATASEGMENTXDB-5Y

DB23ZDB7DATAENDS結(jié)束開始X<Y?YX

YNX<Z?YX

ZNY<Z?YY

ZN例7-5程序主體框架CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX(具體操作指令序列)

EXIT:MOVAH,4CHINT21HCODEENDSENDSTARTMOVAL,XCMPAL,YJLXLYXCHGAL,YXCHGAL,XXLY:CMPAL,ZJLCMPYZXCHGAL,ZXCHGAL,XCMPYZ:MOVAL,YCMPAL,ZJLEXITXCHGAL,ZXCHGAL,Y例7-5具體操作指令序列結(jié)束開始X<Y?YX

YNX<Z?YX

ZNY<Z?YY

ZN根據(jù)是否已知循環(huán)次數(shù),可將循環(huán)分為計(jì)數(shù)循環(huán)和條件判斷循環(huán)。計(jì)數(shù)循環(huán)的循環(huán)次數(shù)是已知的、確定的。一般是將循環(huán)次數(shù)存入計(jì)數(shù)寄存器CX,然后每循環(huán)1次CX減1,當(dāng)CX不為0時(shí),循環(huán)繼續(xù),否則結(jié)束循環(huán)。這種循環(huán)結(jié)構(gòu)常用LOOP指令來(lái)實(shí)現(xiàn)。LOOP指令的格式是:LOOP語(yǔ)句標(biāo)號(hào)。操作是:CX

(CX)–1。若CX

0則IP

(IP)+語(yǔ)句標(biāo)號(hào);否則IP不變(即執(zhí)行LOOP指令的下一條指令)

7.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)條件判斷循環(huán)并不關(guān)心循環(huán)的次數(shù),只關(guān)心進(jìn)入循環(huán)的條件是否滿足。所以這種循環(huán)可以通過(guò)條件轉(zhuǎn)移指令或下列條件循環(huán)指令來(lái)實(shí)現(xiàn)。8086/8088的條件循環(huán)指令有:為零或相等循環(huán)指令LOOPZ/LOOPE(LOOPwhileZero,orEqual)和非零或不相等循環(huán)指令LOOPNZ/LOOPNE(LOOPwhileNonZero,orNotEqual)。LOOPZ/LOOPE指令的格式是:LOOPZ/LOOPE語(yǔ)句標(biāo)號(hào)。操作是:CX

(CX)–1。若CX

0且ZF=1,則IP

(IP)+語(yǔ)句標(biāo)號(hào);否則IP不變。LOOPNZ/LOOPNE指令的格式是:LOOPNZ/LOOPNE語(yǔ)句標(biāo)號(hào)。操作是:CX

(CX)–1。若CX

0且ZF=0,則IP

(IP)+語(yǔ)句標(biāo)號(hào);否則IP不變。7.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)在匯編后得到的目標(biāo)代碼中,LOOP,LOOPZ/LOOPE和LOOPNZ/LOOPNE指令中的操作數(shù)“語(yǔ)句標(biāo)號(hào)”的實(shí)質(zhì)是一個(gè)單字節(jié)的補(bǔ)碼,其值等于循環(huán)控制指令與轉(zhuǎn)移目標(biāo)語(yǔ)句的距離。這些循環(huán)控制指令的執(zhí)行均不影響標(biāo)志位。

7.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例7-6有一個(gè)首地址為ARRAY的M字?jǐn)?shù)組,請(qǐng)編程計(jì)算該數(shù)組內(nèi)容之和,并把結(jié)果存入TOTAL中。程序的數(shù)據(jù)段DATASEGMENTARRAYDW12,13,26,35,71,83MEQU($–ARRAY)/2

TOTALDW?DATAENDS

7.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例7-6有一個(gè)首地址為ARRAY的M字?jǐn)?shù)組,請(qǐng)編程計(jì)算該數(shù)組內(nèi)容之和,并把結(jié)果存入TOTAL中。程序代碼段的核心代碼MOVAX,0MOVCX,M;循環(huán)次數(shù)M送入CXMOVSI,AX;效果等于“MOVSI,0”,但更快STARE_LOOP:ADDAX,ARRAY[SI]ADDSI,2 ;地址加2指向下一個(gè)字型數(shù)據(jù)

LOOPSTART_LOOPMOVTOTAL,AX7.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例7-7將位于數(shù)據(jù)段TEXT地址中的小寫字母,轉(zhuǎn)換成大寫字母,然后存回原地址內(nèi),TEXT內(nèi)容結(jié)束標(biāo)志為“$”開始結(jié)束BXTEXT的偏移地址AL[BX]AL=‘$’?AL<‘a(chǎn)’?AL>‘z’?AL–20HAL,AL[BX]BX+1BXYYYNNNASCII碼中,大于等于‘a(chǎn)’且小于等于‘z’的字母為小寫字母,通過(guò)減32(20H)可將其轉(zhuǎn)換成大寫字母。CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

LEABX,TEXT......EXIT:MOVAH,4CHINT21HCODEENDSENDSSTARTB20:MOVAL,[BX]CMPAL,'$';判斷是否是“結(jié)束符”JEEXIT;是,則結(jié)束CMPAL,'a'JB

B30;在‘a(chǎn)’之下,是大寫字母CMPAL,'z'JA

B30;在‘z’之上,不是字母SUBAL,20H;小寫字母變大寫字母MOV[BX],AL;替換原先小寫字母B30:INCBX;指向下一個(gè)字母,JMPB20例7-8把BLOCK為首地址的數(shù)據(jù)區(qū)中100個(gè)連續(xù)的8位二進(jìn)制數(shù)按正、負(fù)數(shù)分開,分別送到兩個(gè)緩沖區(qū)PLUS_DATA(存正數(shù))和MINUS_DATA(存負(fù)數(shù))中。假設(shè)數(shù)據(jù)中不存在0。判斷正數(shù)的算法:使用TEST指令測(cè)試符號(hào)位,然后判斷ZF標(biāo)志。

TESTAL,10000000B

若為正數(shù),則“與”運(yùn)算結(jié)果為0,ZF=1DATASEGMENT

BLOCKDB1,-2,3,-4,...,100

PLUS_DATADB100DUP(?)

MINUS_DATADB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX......CODEENDSENDSSTARTCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

LEASI,BLOCKLEADI,PLUS_DATALEABX,MINUS_DATAMOVCX,100......CODEENDSENDSSTARTGOON:MOVAL,[SI]TESTAL,10000000BJNZMINUS;轉(zhuǎn)去處理負(fù)數(shù)MOV[DI],AL;處理正數(shù)INCDI;下一正數(shù)的存儲(chǔ)地址JMPAGAINMINUS:MOV[BX],AL;處理負(fù)數(shù)INCBX;下一負(fù)數(shù)的存儲(chǔ)地址AGAIN:INCSI;指向下一待處理的數(shù)據(jù)

LOOPGOON;一個(gè)完整的循環(huán)結(jié)構(gòu)字符串操作指令和重復(fù)前綴8086/8088微處理器提供了5條字符串操作指令:傳送串指令MOVS(MOVeString)、存回串指令STOS(STOreintoString)、取入串指令LODS(LOAdfromString)、掃描串指令SCAS(SCAnString)和比較串指令CMPS(COMpareString)。它們都是單字節(jié)指令,指令執(zhí)行一次只處理一個(gè)字符。要想讓指令連續(xù)處理一個(gè)字符串,可以在指令前面加上“重復(fù)前綴”:REP(重復(fù))、REPE/REPZ(相等/為零重復(fù))或REPNE/REPNZ(不相等/不為零重復(fù))。重復(fù)的次數(shù)由CX中的值決定。7.5字符串操作程序設(shè)計(jì)字符串操作指令和重復(fù)前綴8086/8088微處理器提供了5條字符串操作指令:傳送串指令MOVS(MOVeString)、存回串指令STOS(STOreintoString)、取入串指令LODS(LOAdfromString)、掃描串指令SCAS(SCAnString)和比較串指令CMPS(COMpareString)。它們都是單字節(jié)指令,指令執(zhí)行一次只處理一個(gè)字符。要想讓指令連續(xù)處理一個(gè)字符串,可以在指令前面加上“重復(fù)前綴”:REP(重復(fù))、REPE/REPZ(相等/為零重復(fù))或REPNE/REPNZ(不相等/不為零重復(fù))。重復(fù)的次數(shù)由CX中的值決定。7.6宏、條件匯編與重復(fù)匯編7.7子程序設(shè)計(jì)1.引言如果在一個(gè)程序中的多個(gè)地方、或多個(gè)程序中的多個(gè)地方用到了同一段程序,那么可以將這段程序抽取出來(lái),存放在某一存儲(chǔ)區(qū)域,每當(dāng)需要執(zhí)行這段程序時(shí),就調(diào)用指令轉(zhuǎn)到這段程序去,執(zhí)行完畢,再返回原來(lái)的程序。把抽取出來(lái)的這段程序叫做子程序或過(guò)程,調(diào)用它的程序稱為主程序或調(diào)用程序子程序允許嵌套和遞歸子程序的調(diào)用過(guò)程記錄斷點(diǎn):為了返回到調(diào)用程序的合適地方,轉(zhuǎn)子調(diào)用必須保留返回調(diào)用程序的下一條指令的地址(返回地址)--又叫斷點(diǎn)。即當(dāng)前IP寄存器的值。保護(hù)現(xiàn)場(chǎng):保存有關(guān)通用寄存器的內(nèi)容,子程序返回主程序之前,恢復(fù)這些通用寄存器的內(nèi)容參數(shù)傳遞的方法通過(guò)寄存器傳遞:適于參數(shù)較少時(shí)通過(guò)參數(shù)表傳遞:適合參數(shù)較多的情況通過(guò)堆棧傳遞:適合參數(shù)較多,且子程序有嵌套、遞歸的情況1.引言2.調(diào)用指令和返回指令(1)調(diào)用指令:CALL子程序名/目的地址(2)返回指令:RET[n]7.7子程序設(shè)計(jì)調(diào)用指令格式:CALL子程序名/目的地址功能:段內(nèi)直接近調(diào)用CALL子程序名(NEAR)PUSH(IP)(IP)

(IP)+16位的二進(jìn)制數(shù)段內(nèi)間接近調(diào)用CALLWORDPTR[BX][DI]PUSH(IP)(IP)(EA)段間直接遠(yuǎn)調(diào)用CALL子程序名(FAR)PUSH(CS)PUSH(IP)(IP)目標(biāo)地址中指定的偏移地址(CS)目標(biāo)地址指定的段地址段間間接遠(yuǎn)調(diào)用CALLDWORDPTR[BX]PUSH(CS)PUSH(IP)(IP)(EA)(CS)(EA+2)返回指令RET段內(nèi)近返回(IP)

POP()段間遠(yuǎn)返回(IP)

POP()(CS)

POP()子程序設(shè)計(jì)適合編成子程序的程序一段程序在整個(gè)任務(wù)中被多次使用一段程序在多個(gè)任務(wù)中被多次使用子程序的特點(diǎn)節(jié)省存儲(chǔ)空間增大了時(shí)間開銷子程序的組成框架;程序說(shuō)明BTODPROCFAR(NEAR)

保護(hù)現(xiàn)場(chǎng);將寄存器壓入堆棧核心工作

恢復(fù)現(xiàn)場(chǎng);將堆棧彈回寄存器

RET

;返回BTODENDP1.引言2.調(diào)用指令和返回指令3.子程序的參數(shù)傳送通過(guò)寄存器傳送通過(guò)堆棧傳送通過(guò)地址表傳送7.88086/8088微處理器的其他指令與應(yīng)用1.處理器控制指令清除CF標(biāo)志CLC進(jìn)位有效位CF求反CMC置CF標(biāo)志STC置DF標(biāo)志STD清除DF標(biāo)志CLD置IF標(biāo)志STI清除IF標(biāo)志CLI處理機(jī)暫停HLT等待狀態(tài)WAIT將數(shù)據(jù)傳送給協(xié)處理器ESC保證總線的控制LOCK無(wú)操作NOP1.處理器控制指令2.對(duì)標(biāo)志位的操作

8086/8088微處理器只提供對(duì)標(biāo)志寄存器中DF(第10位)、IF(第9位)和CF(第0位)三個(gè)標(biāo)志位進(jìn)行修改的指令,那么如何修改OF(第11位)、TF(第8位)、SF(第7位)、ZF(第6位)、AF(第4位)、PF(第2位)標(biāo)志位呢?

7.88086/8088微處理器的其他指令與應(yīng)用利用標(biāo)志進(jìn)棧指令PUSHF(PUSHtheFlags)和標(biāo)志出棧指令POPF(POPtheFlags)指令。例如欲清除TF標(biāo)志,可以用如下語(yǔ)句:PUSHF ;將標(biāo)志寄存器的內(nèi)容壓入堆棧MOVBP,SP;棧頂指針?biāo)腿隑P寄存器AND[BP],0FEFFH;將BP指向的主存單元的第8位置成0POPF ;將棧頂單元的內(nèi)容寫入標(biāo)志寄存器欲翻轉(zhuǎn)OF標(biāo)志,可以用如下語(yǔ)句:PUSHF;標(biāo)志位入棧POPAX;標(biāo)志位入AXXORAX,0800H;在AX中將OF翻轉(zhuǎn),其余位不變PUSHAX;修改后的標(biāo)志位入棧POPF ;標(biāo)志位出棧存回標(biāo)志寄存器7.88086/8088微處理器的其他指令與應(yīng)用利用“標(biāo)志寄存器低字節(jié)送AH指令LAHF(LoadAHwithFlags)”和“AH送標(biāo)志寄存器低字節(jié)指令SAHF(StoreAHintoFlags)”。LAHF和SAHF指令都是單字節(jié)指令,執(zhí)行時(shí)間都是4個(gè)時(shí)鐘周期,LAHF指令的執(zhí)行不影響標(biāo)志位,SAHF指令執(zhí)行后低8位標(biāo)志位的值由指令的操作數(shù)決定。例如,欲清除SF標(biāo)志,可以用如下語(yǔ)句:LAHFANDAH,7FH;將標(biāo)志寄存器的第7位置成0SAHF欲將標(biāo)志寄存器低8位清0,可以用如下語(yǔ)句:MOVAH,00HSAHF7.88086/8088微處理器的其他指令與應(yīng)用1.處理器控制指令2.對(duì)標(biāo)志位的操作3.中斷指令在執(zhí)行程序的過(guò)程中,計(jì)算機(jī)會(huì)遇到一些異常情況或特殊請(qǐng)求。此時(shí)處理器將保存當(dāng)前的狀態(tài),轉(zhuǎn)去進(jìn)行必要的處理,處理完畢后返回到程序間斷處繼續(xù)執(zhí)行。這個(gè)過(guò)程叫做中斷。中斷可分為由處理器外部引起的外部中斷、異常情況引起的硬件中斷和“中斷”指令I(lǐng)NT引起的軟件中斷。

7.88086/8088微處理器的其他指令與應(yīng)用3.中斷指令I(lǐng)NT指令的格式是:INTTYPE或INT。其中TYPE為中斷類型號(hào),它是一個(gè)取值范圍在0~255之間的常數(shù)或常數(shù)表達(dá)式,例如INT21H。所有中斷都有一個(gè)編號(hào)——中斷類型號(hào)。類型號(hào)乘以4就是相應(yīng)的中斷服務(wù)程序的入口地址。格式中的INTTYPE為雙字節(jié)指令,執(zhí)行時(shí)間為52個(gè)時(shí)鐘周期;格式中的INT為單字節(jié)指令,隱含的中斷類型號(hào)為3,執(zhí)行時(shí)間為51個(gè)時(shí)鐘周期。INT指令執(zhí)行的

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論