指令系統(tǒng) 計(jì)算機(jī)原理_第1頁
指令系統(tǒng) 計(jì)算機(jī)原理_第2頁
指令系統(tǒng) 計(jì)算機(jī)原理_第3頁
指令系統(tǒng) 計(jì)算機(jī)原理_第4頁
指令系統(tǒng) 計(jì)算機(jī)原理_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

指令系統(tǒng)第三章指令系統(tǒng)指令系統(tǒng)基本概念第3.1節(jié)8086尋址方式指令是使計(jì)算機(jī)執(zhí)行某種特定操作的二進(jìn)制編碼

指令系統(tǒng)是所有指令的集合一條指令通常包括兩部分操作碼:規(guī)定所要執(zhí)行的操作類型操作數(shù):所需要處理的數(shù)據(jù)或者數(shù)據(jù)的地址信息獲得數(shù)據(jù)或者數(shù)據(jù)地址信息的方式稱為尋址方式例:MOVAX,1234H

指令中有兩個(gè)操作數(shù),將前者稱為目的操作數(shù),后者稱為源操作數(shù),該指令將1234H傳送到寄存器AX中。尋址方式包括三種:立即數(shù)尋址、寄存器尋址、存儲器尋址一立即數(shù)尋址

指令中直接給出操作數(shù),指令執(zhí)行時(shí)可以立即得到,此時(shí)把操作數(shù)又稱作“立即數(shù)”例:MOVAX,0102H;指令功能:AX0102H,指令代碼:B80201存放在代碼段時(shí),注意高字節(jié)01H存放于高地址中,低字節(jié)02H存放于低字節(jié)單元中

低地址高地址----02H

(低字節(jié))-------B8----01H(高字節(jié))AX02H01HALAH存儲器立即數(shù):是以常量形式出現(xiàn)。常量可以是二進(jìn)制數(shù)(后綴為B或b)、十進(jìn)制數(shù)、十六進(jìn)制數(shù)(后綴為H或h)、字符串(單或雙引號擴(kuò)起的字符,表示相應(yīng)的ASCII碼值)尋址方式二寄存器尋址操作數(shù)放在CPU內(nèi)部的寄存器中,在指令中直接指出寄存器的名字例:INCCX;將CX的內(nèi)容加1

例:MOVAX,BX;AXBX寄存器尋址方式的操作數(shù)存放在CPU的內(nèi)部寄存器reg中.它可以是8位寄存器:AH/AL/BH/BL/CH/CL/DH/DL;也可以是16位寄存器:AX/BX/CX/DX/SI/DI/BP/SP.還可以存放在4個(gè)段寄存器中:CS/DS/ES/SS寄存器尋址方式的操作數(shù)存放于CPU某個(gè)內(nèi)部寄存器,不需要訪問存儲器,執(zhí)行速度較快,是經(jīng)常使用的方法。在雙操作數(shù)的指令中,操作數(shù)之一必須是寄存器尋址得到的。匯編語言在表達(dá)寄存器尋址時(shí)使用寄存器名,其實(shí)質(zhì)就是指它存放的內(nèi)容。AXBX

隱含尋址指令已經(jīng)默認(rèn)是對CPU中的某個(gè)寄存器操作例:DAA ;默認(rèn)對AL進(jìn)行十進(jìn)制加法調(diào)整以上三種方式均直接從CPU內(nèi)部獲得數(shù)據(jù),操作速度快存儲器尋址三存儲器操作數(shù)尋址

操作數(shù)存放在存儲器中時(shí),指令執(zhí)行時(shí)必須通過總線在存儲器中存取操作數(shù)。

執(zhí)行單元EU根據(jù)指令中給出的尋址方式計(jì)算出16位的偏移量,稱為有效地址(EA)送到總線接口單元BIU,經(jīng)過加法器生成20位實(shí)際物理地址,在存儲器讀寫總線周期對存儲器進(jìn)行操作,一般在表示EA時(shí),用[操作數(shù)]表示。由于計(jì)算EA需要時(shí)間,進(jìn)行總線操作比較慢,因此存儲器操作尋址比前三種要慢。物理地址=16d*(段寄存器)+EA段寄存器:CS,DS,SS,ES存儲器操作數(shù)尋址1.直接尋址操作數(shù)放在存儲器中,存儲單元的有效地址直接由指令給出 例:MOVSI,[2000H];SI(2000H,2001H)CPU執(zhí)行單元EU根據(jù)指令的尋址方式計(jì)算出16位的偏移量,稱為有效地址(EA),一般用[有效地址]表示。2.寄存器間接尋址

操作數(shù)一定在存儲器中,存儲單元的有效地址由寄存器指出

寄存器可以為BX、BP、SI、DI,例:MOVAX,[BX]

[BX](BP][SI][DI]EA=

若BX=3000H,則把(3000H,30001H)兩個(gè)單元的數(shù)據(jù)傳送給AXCS代碼段數(shù)據(jù)段堆棧段IPDSSI,DI或BXSSSP或BP配對使用物理地址=16d*DS+EA物理地址=16d*DS+(BX)或(BP)或(SI)或(DI)

若需要對其它段尋址,則必須用前綴指出段寄存器名,又稱“段超越”

例:MOVBL,ES:[SI];BL擴(kuò)展段1000H單元的內(nèi)容

注:IP只能在代碼段尋址,SP只能在堆棧段尋址,不能進(jìn)行段超越3.寄存器相對尋址操作數(shù)的有效地址由寄存器內(nèi)容加上一個(gè)8位或16位的偏移量得到例:MOVAX,[BX+1000H];AXBX+1000H所指向的存儲單元的容

若BX=2000H,則將數(shù)據(jù)段(3000H,3001H)的內(nèi)容傳送給AX

指令也可書寫為:MOVAX,1000H[BX]4.基址變址尋址操作數(shù)的有效地址由基址寄存器和變址寄存器的內(nèi)容相加產(chǎn)生例:MOVAX,[BP+SI];AX(BP+SI)5.相對基址變址尋址

操作數(shù)的有效地址由基址寄存器、變址寄存器和偏移量三者相加產(chǎn)生

例:MOVAX,[BX+SI+1000H]

;AX(BX+SI+1000H)(BX)(BP)EA=(SI)(DI)+(BX)(BP)(SI)(DI)EA=8位16位+偏移量物理地址=16d*DS+EA物理地址=16d*SS+EA物理地址=16d*DS+EA物理地址=16d*SS+EA相對基址變址在數(shù)組訪問中的應(yīng)用例:若訪問堆棧段中的數(shù)組A[100]時(shí),可以用BP存放棧定地址,用偏移量表示數(shù)組中第一個(gè)元素到棧頂?shù)木嚯x,用變址寄存器SI(或DI)指向具體數(shù)組元素

相對基址變址尋址應(yīng)用(BP)棧頂A(0)A(1)……A(99)偏移量(SI)低地址高地址MOVAX,[BP+SI+偏移量]在C語言中,常使用全局?jǐn)?shù)組,例如定義了一個(gè)全局?jǐn)?shù)組A[3],具有三個(gè)元素,分別為A[0]、A[1]、A[2],實(shí)際上A在編譯時(shí)就轉(zhuǎn)換成具體的在數(shù)據(jù)段中分配的位置,例如1000H,下標(biāo)0、1、2一般就存放在寄存器中,如SI,通過1000H[SI]就可以訪問到具體的數(shù)據(jù)。I/O端口尋址二.I/O端口尋址操作數(shù)在I/O端口中時(shí),必須通過累加器(AX或AL)實(shí)現(xiàn)對端口的訪問1.直接端口尋址—指令直接提供8位端口的地址例:INAL,63H;AL(63H)

端口尋址時(shí),地址可以不需要加[],當(dāng)端口地址可用一個(gè)字節(jié)來表示時(shí),可使用直接端口尋址2.間接端口尋址—由DX寄存器給出16位端口地址例:MOVDX,162HINAX,DXAX(0162H,0163H)

從端口162H讀取一個(gè)字的數(shù)據(jù)傳送到AX中,DX間接表示端口地址比較:MOVAX,DX;AXDXINAX,DX;AX(DX)第3.2節(jié)8086指令格式指令格式指令一般由1~6個(gè)字節(jié)組成,具體格式如下:76543210OPCODEDW76543210MODREGR/M字節(jié)1字節(jié)2字節(jié)3字節(jié)4LOWDISP或DATAHIGHDISP或DATA字節(jié)5字節(jié)6LOWDATAHIGHDATA1.字節(jié)1OPCODE:指令操作碼

D:操作數(shù)傳輸方向(立即數(shù)指令和串操作指令除外)D=0,Reg為源操作數(shù)

D=1,Reg為目的操作數(shù)

W:操作數(shù)字節(jié)長度

W=0,字節(jié)操作

W=1,字操作指令操作方式尋址方式字節(jié)3~字節(jié)6DISP:存儲器操作數(shù)地址偏移量,長度由MOD字段定義DATA:指令中的立即數(shù)指令格式字節(jié)2,尋址方式MOD:尋址方式字段00=存儲器方式,指令中無偏移量01=存儲器方式,指令中有8位偏移量10=存儲器方式,指令中有16位偏移量11=寄存器方式,指令中無偏移量Reg:寄存器編碼字段000=AL/AX 100=AH/SP001=CL/CX 101=CH/BP010=DL/DX 110=DH/SI011=BL/BX 111=BH/DIR/M:寄存器/存儲器字段指令格式R/M:寄存器/存儲器字段在MOD=11,寄存器模式下,R/M給出第二個(gè)操作數(shù)的寄存器編碼在MOD≠11,存儲器模式下,R/M給出計(jì)算有效地址的方法R/MW=0W=1R/MMOD=00MOD=01MOD=10000ALAX000BX+SIBX+SI+D8BX+SI+D16001CLCX001BX+DIBX+DI+D8BX+DI+D16010DLDX010BP+SIBP+SI+D8BP+SI+D16011BLBX011BP+DIBP+DI+D8BP+DI+D16100AHSP100SISI+D8SI+D16101CHBP101DIDI+D8DI+D16110DHSI110直接地址BP+D8BP+D16111BHDI111BXBX+D8BX+D16MOD=11MOD≠11有效地址計(jì)算方法字節(jié)3~字節(jié)6DISP:存儲器操作數(shù)地址偏移量,長度由MOD字段定義DATA:指令中的立即數(shù)例:MOVAX,[BX]

指令碼為:8B0710001011

00000111b

D:D=1W:W=1MOD:00REG:000R/M:111[BX]AX存儲器方式偏移量018086指令介紹第3.3節(jié)8086指令介紹8086CPU共有133條指令,根據(jù)操作性質(zhì),可分為:傳輸指令算術(shù)運(yùn)算指令邏輯運(yùn)算和移位指令串操作指令控制轉(zhuǎn)移指令操作數(shù)的符號表示DST:目的操作數(shù)SRC:源操作數(shù)TARGET:循環(huán)、轉(zhuǎn)移和調(diào)用指令中的目的操作數(shù)操作數(shù)的符號表示操作數(shù)的符號表示REG:寄存器操作數(shù),字節(jié)或字REG8:8位寄存器操作數(shù),字節(jié)REG16:16位寄存器操作數(shù),字MEM:存儲器操作數(shù),字節(jié)或字MEM8:8位存儲器操作數(shù),字節(jié)MEM16:16位存儲器操作數(shù),字MEM32:32位存儲器操作數(shù),雙字ACC:累加器AL或AXSEG_REG:段寄存器IMM:立即操作數(shù),字節(jié)或字IMM8:立即操作數(shù),字節(jié)IMM16:立即操作數(shù),字SHORT_LABEL:短標(biāo)號,8位偏移量NEAR_LABLE:近標(biāo)號,16位地址或偏移量FAR_LABLE:遠(yuǎn)標(biāo)號,32位地址數(shù)據(jù)傳送類指令(一)通用數(shù)據(jù)傳送指令MOVDST,SRC操作:DSTSRC說明:DST和SRC的組合關(guān)系是:REG/MEMIMMREG/MEMREGREG/MEMSEG_REGCS和IP不能做目的操作數(shù)不能在兩個(gè)存儲單元之間直接傳送MOV指令不改變源操作數(shù),不影響FLAG的狀態(tài)標(biāo)志數(shù)據(jù)位數(shù)由寄存器決定或用說明符指出(如例所示)SS修改后,下一條指令執(zhí)行完才檢測中斷,修改SS和SP一定要連續(xù)進(jìn)行例:合法指令:MOVAX,[SI];AX←(SI)MOVAL,[SI];AL←(SI)MOVDS,AX;DS←AXMOVAX,DS;AX←DSMOVSI,2000H;SI←2000HMOV[SI],20H;(SI)←20HMOVSI,[2000H];SI←(2000H)MOVSI,[SI+6];SI←(SI+6)MOVBX,AX;BX←AX非法指令:MOV[SI],[2000H]MOVCS,BXMOVDS,2000H傳送類指令(二)堆棧操作SP總是指向棧頂,即最后壓入堆棧的信息單元PUSHSRC進(jìn)棧指令操作:SPSP-2,(SP+1,SP)SRC具體指令:PUSHREG16PUSHSEG_REGPUSHMEM16POPDST出棧指令操作:DST(SP+1,SP),SPSP+2具體指令:POPREG16POPSEG_REGPOPMEM16說明:堆棧操作以字為單位,按后進(jìn)先出原則存儲數(shù)據(jù)

POP出棧操作時(shí),CS不能為目的操作數(shù)

例:PUSHBXPUSHCSPUSH[SI]

PUSH1000錯(cuò)誤例:POPAXPOPESPOP[SI]

POPCS錯(cuò)誤3堆棧的應(yīng)用主要用于子程序調(diào)用或中斷子程序的現(xiàn)場保護(hù)和恢復(fù),以及參數(shù)傳遞等。例1、保護(hù)現(xiàn)場

fun:

PUSHDSPUSHESPUSHAXPUSHBX;處理部分(先進(jìn)后出)POPBXPOPAXPOPESPOPDSRET例2、用堆棧交換數(shù)據(jù)PUSHAXPUSHBXPOPAXPOPBX堆棧的應(yīng)用2/4/2023傳送類指令(三)交換指令XCHG指令格式:XCHGDST,SRC操作:DSTSRC說明:兩個(gè)操作數(shù)必須有一個(gè)在寄存器中,可在寄存器之間、寄存器與存儲器之間交換信息,目的操作數(shù)DST不能為CS具體指令:XCHGREG,REGXCHGREG,MEMXCHGMEM,REG

例:XCHGAL,byteptr[2000H];AL(2000H)XCHGAX,DX

XCHGAX,CS錯(cuò)誤傳送類指令(四)I/O端口傳送指令I(lǐng)N輸入指令操作:AL/AX(PORT)/(DX),其中PORT為8位直接端口地址,DX為16為地址.具體指令:IN AL,PORTIN AX,PORTIN AL,DXIN AX,DXOUT輸出指令操作:(PORT)/(DX)

AL/AX,PORT為8位直接端口地址,DX為16為地址.具體指令:OUTPORT,ALOUTPORT,AXOUTDX,ALOUTDX,AX說明:I/O端口地址有直接尋址和間接尋址(通過DX)兩種尋址方式對I/O端口操作必須通過累加器AX或AL來完成例:INAL,20HINAX,60HINAL,DXINAX,DX

INAL,160H錯(cuò)誤例:OUT20H,ALOUT80H,AXOUTDX,AL

OUT200H,AX錯(cuò)誤例:MOVDX,160H

INAX,DX

例:MOVDX,160H

OUTAX,DX

傳送類指令(五)換碼指令XLAT換碼指令具體指令:XLAT操作:AL(BX+AL)例:MOVAL,1MOVBX,1000HXLAT ;將存儲單元1001H的內(nèi)容送給AL結(jié)果:AL=31H30H31H34HMemory1000H傳送類指令(六)有效地址(EA)傳送指令LEA(LoadEffectiveAddress)取有效地址指令具體指令:LEAREG16,SRC操作:REG16SRC的有效地址說明:該指令將源操作數(shù)的有效地址送給寄存器例:MSGdb30H31H32H33H ;定義數(shù)據(jù)

LEABX,MSG;將MSG的偏移地址送BXMOVDX,MSG ;DH=31H,DL=30H

;低位在前,高位在后

30H31H32H33HMSG傳送類指令LDS(LoadDSWithPointer)地址指針?biāo)图拇嫫骱虳S具體指令:LDSREG16,MEM32操作:REG16(MEM32),DS(MEM32+2)說明:將源操作數(shù)的4個(gè)字節(jié),分別傳送到指定的寄存器和DS中例:LDSBX,[1000H]結(jié)果:將(1000H,1001H)內(nèi)容送BX,將(1002H,1003H)內(nèi)容送DSLES(LoadESWithPointer)地址指針?biāo)图拇嫫骱虴S具體指令:LESREG16,MEM32操作:REG16(MEM32),ES(MEM32+2)說明:將源操作數(shù)的4個(gè)字節(jié),分別傳送到指定的寄存器和ES中(七)標(biāo)志寄存器傳送指令LAHF(LoadAHwithFlag)

標(biāo)志送AH格式:LAHF操作:AH←標(biāo)志寄存器的低八位SAHF(StoreAHintoFlag)AH送標(biāo)志寄存器格式:SAHF操作:標(biāo)志寄存器的低八位←AHPUSHF(PushtheFlag)

標(biāo)志寄存器進(jìn)棧格式:PUSHF操作:SP←SP-2,(SP+1,SP)←FLAG棧以字為單位POPF(PoptheFlag)標(biāo)志寄存器出棧格式:POPF操作:FLAG←(SP+1,SP),SP←SP+2注:傳送類指令除了SAHF和POPF外都不影響標(biāo)志寄存器1514131211109876543210

ODITSZAPC算術(shù)類指令算術(shù)類指令(一)加法指令A(yù)DD加法格式:ADDDST,SRC操作:DST←SRC+DST具體指令A(yù)DDREG,REGADDREG,MEMADDMEM,REGADDREG,IMMADDMEM,IMM例:ADDAL,DLADDAL,[BX+DI+1000H]ADD[SI],DXADDAX,1000HADD[BP+SI],1000HADD[SI],[DI]錯(cuò)誤算術(shù)類指令A(yù)DC(AddWithCarry)帶進(jìn)位加法格式:ADCDST,SRC操作:DST←SRC+DST+CF具體指令:ADC

REG,REG

ADC

REG,MEM

ADC

MEM,REG

ADC

REG,IMM

ADC

MEM,IMMINC(Increment)加1格式:INCDST操作:DST←DST+1具體指令:INC

REGINC

MEM說明:INC指令影響除CF以外的所有狀態(tài)標(biāo)志例:

ADCAX,DXADCAL,[BX+DI+1000H]ADC[SI],DXADCAX,1000HADC[BP+SI],1000HADC[SI],[DI]錯(cuò)誤加法類指令影響FLAG的狀態(tài)標(biāo)志例:INCCXINC[2000H]算術(shù)類指令帶進(jìn)位加法指令A(yù)DC應(yīng)用舉例——實(shí)現(xiàn)多字節(jié)的加法運(yùn)算例:有2個(gè)4字節(jié)無符號數(shù)分別存放在數(shù)據(jù)段2000H和3000H開始的單元中,低位在前,高位在后,將兩數(shù)相加,結(jié)果存放在2000H開始的單元中

MOVSI,2000H ;SI指向第一個(gè)數(shù)首地址

MOVDI,3000H ;DI指向第二個(gè)數(shù)首地址

MOVAX,[SI] ;取第一個(gè)數(shù)的低16位到AXADDAX,[DI] ;兩個(gè)數(shù)的低16位相加

MOV[SI],AX ;低16位相加結(jié)果送2000H和2001H單元

MOVAX,[SI+2] ;取第一個(gè)數(shù)高16位

ADCAX,[DI+2] ;兩個(gè)數(shù)高16位連同進(jìn)位位相加

MOV[SI+2],AX ;高16位相加結(jié)果送2003H和2004H單元算術(shù)類指令(二)減法指令SUB(Subtract)減法格式:SUBDST,SRC操作:DST←DST

-

SRC具體指令SUB

REG,REGSUB

REG,MEMSUB

MEM,REGSUB

REG,IMMSUB

MEM,IMM例:SUBAL,DLSUBAL,[BX+DI+1000H]SUB[SI],DXSUBAX,1000HSUB[BP+SI],1000HSUB[SI],[DI]錯(cuò)誤算術(shù)類指令SBB(SubtractWithBorrow)帶借位減法格式:SBBDST,SRC操作:DST←DST

-

SRC-CF具體指令:SBB

REG,REGSBB

REG,MEMSBB

MEM,REGSBB

REG,IMMSBB

MEM,IMMDEC(Decrement)減1格式:DECDST操作:DST←DST–1具體指令:DEC

REGDEC

MEM說明:DEC指令影響除CF以外的所有狀態(tài)標(biāo)志例:

SBBAX,DXSBBAL,[BX+DI+1000H]SBB[SI],DXSBBAX,1000HSBB[BP+SI],1000HSBB[SI],[DI]錯(cuò)誤例:

DECCXDEC[2000H]減法類指令影響FLAG的狀態(tài)標(biāo)志算術(shù)類指令NEG求補(bǔ)運(yùn)算格式:NEGDST操作:DST←模-DST說明:求指令中給出的操作數(shù)的補(bǔ)碼具體指令:NEG

REGNEG

MEM說明:字節(jié)的模為100H,字的模為10000HCMP比較指令格式:CMPDST,SRC操作:DST-SRC具體指令:CMP

REG,REGCMP

REG,MEMCMP

MEM,REGCMP

REG,IMMCMP

MEM,IMM**說明:做減法操作,僅影響標(biāo)志位,不保存結(jié)果例:

NEGAL;將AL中的數(shù)取補(bǔ)碼

NEG[2000H]例:

CMPAX,DXCMPAL,[BX+DI+1000H]CMP[SI],DXCMPAX,1000HCMP[BP+SI],1000H算術(shù)類指令(三)乘法指令MUL(unsignedMultiple)無符號數(shù)乘法格式:MULSRC操作:AX←AL*SRC或

{DX,AX}←AX*SRC具體指令:MULREGMULMEMIMUL(signedMultiple)有符號數(shù)乘法格式:IMULSRC操作:AX←AL*SRC或{DX,AX}←AX*SRC具體指令:IMULREGIMULMEM例:

MULBLMULwordptr[2000H]例:

IMULBLIMULword

ptr[SI]算術(shù)類指令例:將2個(gè)32位無符號數(shù)DAT1和DAT2相乘,結(jié)果保存在64位無符號數(shù)Result中

DAT1HDAT1L*DAT2HDAT2L(DAT1L2L)H(DAT1L2L)L(DAT1H2L)H(DAT1H2L)L(DAT2H1L)H(DAT2H1L)L(DAT2H1H)H(DAT2H1H)L+(SI)(SI+2)(SI+4)(SI+6)LEASI,RESULT數(shù)據(jù)存儲單元Result算術(shù)類指令LEASI,RESULTSUBAX,AXMOV[SI+4],AXMOV[SI+6],AXMOVAX,DATA1MULDATA2MOV[SI],AXMOV[SI+2],DXMOVAX,DATA1+2MULDATA2ADD[SI+2],AXADC[SI+4],DXADC[SI+6],0MOVAX,DATA1MULDATA2+2ADD[SI+2],AXADC[SI+4],DXADC[SI+6],0MOVAX,DATA1+2MULDATA2+2ADD[SI+4],AXADC[SI+6],DXResultData1Data2SI+0SI+1SI+2SI+3SI+4SI+5SI+6SI+7(四)除法指令DIV(unsignedDivide)無符號數(shù)除法格式:DIVSRC操作:AL←AX/SRC(取商),AH←AX%SRC(取余數(shù))

;字節(jié)除法

AX←{DX,AX}/SRC(取商),DX←{DX,AX}%SRC(取余數(shù));字除法具體指令:DIVREGDIVMEMIDIV(signedDivide)有符號數(shù)除法格式:IDIVSRC操作:AL←AX/SRC(取商),

AH←AX%SRC(取余數(shù));字節(jié)除法

AX←{DX,AX}/SRC(取商),DX←{DX,AX}%SRC(取余數(shù));字除法具體指令:IDIVREGIDIVMEM算術(shù)類指令例:

DIVBX;{DX,AX}/BX,商→AX,余數(shù)→DX

DIVwordptr[1000H];{DX,AX}/(1000H,1001H),

商→AX,余數(shù)→DX例:IDIVBX;{DX,AX}/BX,商→AX,余數(shù)→DXIDIVbyteptr[2000H];AX/(2000H),商→AL,

余數(shù)→AH算術(shù)類指令CBW(ConvertBytetoWord)字節(jié)擴(kuò)展為字命令格式:CBW操作:將AL擴(kuò)展為AX擴(kuò)展方法:使用最高位進(jìn)行擴(kuò)展若AL的最高位為0,則擴(kuò)展后AH全為0若AL的最高位為1,則擴(kuò)展后AH全為1CWD(ConvertWordtoDoubleWord)字?jǐn)U展為雙字命令格式:CWD操作:將AX擴(kuò)展為{DX,AX},擴(kuò)展后DX為高16位擴(kuò)展方法:使用最高位進(jìn)行擴(kuò)展若AX的最高位為0,則擴(kuò)展后DX全為0若AX的最高位為1,則擴(kuò)展后DX全為1CBW和CWD說明

CBW和CWD只對有符號數(shù)進(jìn)行擴(kuò)展,無符號數(shù)的擴(kuò)展只需使用MOV指令將其前面AH或DX全部清0。算術(shù)類指令(五)BCD碼調(diào)整指令

8086CPU中沒有專用的BCD碼運(yùn)算指令,是使用二進(jìn)制指令進(jìn)行BCD碼運(yùn)算,然后再用BCD碼調(diào)整指令對二進(jìn)制運(yùn)算結(jié)果進(jìn)行調(diào)整,重新得到BCD碼結(jié)果。例:DAA調(diào)整規(guī)則為:低4位>9或AF=1,則結(jié)果加06H高4位>9或CF=1,則結(jié)果再加上60H壓縮格式BCD碼調(diào)整指令:DAA;對加法運(yùn)算結(jié)果AL進(jìn)行調(diào)整

DAS;對減法運(yùn)算結(jié)果AL進(jìn)行調(diào)整非壓縮格式BCD碼調(diào)整指令:AAA;加法調(diào)整指令

AAS;減法調(diào)整指令

AAM;乘法調(diào)整指令

AAD;除法調(diào)整指令例:下列程序段執(zhí)行后AL=?,CF=?MOV AL,89HADD AL,43HDAA (89H+43H=0CCH,顯然低四位和高四位都大于9,所以計(jì)算結(jié)果0CCH加上66H,即為AL=32H,CF=1)邏輯類指令邏輯類指令(一)邏輯運(yùn)算指令A(yù)ND“與”運(yùn)算命令格式:ANDDST,SRC操作:DSTDST&SRC具體指令:ANDREG,REGANDREG,MEMANDMEM,REGANDREG,IMMANDMEM,IMM

NOT“非”運(yùn)算命令格式:NOTDST操作:DSTDST取反具體指令:

NOTREGNOTMEM邏輯類指令OR“或”運(yùn)算命令格式:ORDST,SRC操作:DSTDST|SRC具體指令:ORREG,REGORREG,MEMORMEM,REGORREG,IMMORMEM,IMMXOR“異或”運(yùn)算命令格式:XORDST,SRC操作:DSTDST^SRC具體指令:XORREG,REGXORREG,MEMXORMEM,REGXORREG,IMMXORMEM,IMMTEST測試命令格式:TESTDST,SRC操作:DST&SRC(邏輯與),僅影響標(biāo)志位,不保存結(jié)果具體指令:TESTREG,REGTESTREG,IMMTESTREG,MEMTESTMEM,IMMTESTMEM,REG邏輯類指令邏輯運(yùn)算指令常見用法清0操作數(shù):XORAX,AX,不僅把AX清0,而且影響狀態(tài)標(biāo)志,至少CF=0,ZF=1(MOVAX,0不影響標(biāo)志位)把某幾位取反:用XOR指令,把要取反的位和1異或,不變的位和0異或。(例:XORAL,80H;將AL最高位取反)清0或置位某幾位:用AND指令清0,用OR指令置位;要清0的位就與0,要置1的位就或1。

例:清0MOVAL,33H ;’3’的ASCII碼

ANDAL,0FH ;將高4位清0

置1MOVAL,9ORAL,30H ;得到9的ASCII碼

邏輯類指令(二)邏輯移位操作命令SHL邏輯左移指令格式:SHLDST,count操作:操作數(shù)整體左移,每次的最高位移到CF,空余位補(bǔ)0說明:count可以為1,也可為CL,做移位計(jì)數(shù)具體指令:SHLREG,1SHLREG,CLSHLMEM,1SHLMEM,CL注:1)移位數(shù)目大于1時(shí),必需用CL表示;

2)所有邏輯移位操作的具體指令均類似CF0DSTMSBLSBSHR邏輯右移指令格式:SHRDST,count操作:操作數(shù)整體右移,最低位到CF,空余位補(bǔ)0SAL算術(shù)左移指令格式:SALDST,count說明:該指令與SHL邏輯左移指令完全一致SAR算術(shù)右移指令格式:SARDST,count操作:操作數(shù)整體右移,最低位到CF,空余位用符號位補(bǔ)注:1)邏輯移位適用于無符號數(shù),算術(shù)移位適用于有符號數(shù)2)移位指令常用來做乘以2或除以2的操作

SHL、SAL用來乘以2,SHR、SAR用來除以2例:MOVCL,5;若執(zhí)行前(DI)=64HSAR[DI],CL;執(zhí)行后(DI)=03H,相當(dāng)于100/32=3CF0DSTMSBLSBCF0DSTMSBLSBCFDSTMSBLSBCFDST000000110五次CFDST000110010二次CFDST001100100一次CFDST000001100四次CFDST000011001三次邏輯類指令ROL循環(huán)左移指令格式:ROLDST,count操作:操作數(shù)整體左移,最高位移到CF,最低位用原來最高位補(bǔ)ROR循環(huán)右移指令格式:RORDST,count操作:操作數(shù)整體右移,最低位移到CF,最高位用原來最低位補(bǔ)RCL帶進(jìn)位的循環(huán)左移指令格式:RCLDST,count操作:類似ROL循環(huán)左移,但CF加入到循環(huán)圈中RCR帶進(jìn)位的循環(huán)右移指令格式:RCRDST,count操作:類似ROR循環(huán)左移,但CF加入到循環(huán)圈中CFDSTMSBLSBCFDSTMSBLSBCFDSTMSBLSBCFDSTMSBLSB串操作類指令串操作類指令對內(nèi)存中一個(gè)連續(xù)區(qū)域的字符串或數(shù)據(jù)操作,允許兩個(gè)操作數(shù)均為MEM操作數(shù),分為5種:MOVS(MoveString)串傳送(MOVSB,MOVSW)STOS(StoreintoString)存數(shù)據(jù)到串中(STOSB,STOSW)LODS(LoadfromString)從串中取數(shù)據(jù)(LODSB,LODSW)CMPS(CompareString)串比較(CMPSB,CMPSW)SCAS(ScanString)串掃描(SCASB,SCASW)串操作說明每次完成一個(gè)字節(jié)或一個(gè)字的操作,B表示字節(jié),W表示字多次操作需用重復(fù)前綴,如REP,重復(fù)次數(shù)由CX決定默認(rèn)DS:SI指向源操作數(shù),ES:DI指向目的操作,即ES:[DI]←DS:[SI],SI←SI±2,DI←DI±2SI、DI自動變化,DF指示變化方向

DF=0,SI、DI作增量變化,B:+1,W:+2DF=1,SI、DI作減量變化,B:-1,W:-2重復(fù)前綴(CX又稱作計(jì)數(shù)器)REP每執(zhí)行一次串指令,CX減1;直到CX=0,重復(fù)執(zhí)行結(jié)束REPE/REPZ每執(zhí)行一次串指令,CX減1;只要CX=0或ZF=0,重復(fù)執(zhí)行結(jié)束(理解“當(dāng)數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串相等(ZF=1)”,則繼續(xù)比較)REPNE/REPNZ每執(zhí)行一次串指令,CX減1;只要CX=0或ZF=1,重復(fù)執(zhí)行結(jié)束(理解“當(dāng)數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串不相等(ZF=0)”,則繼續(xù)比較)MOVS串傳送指令格式:MOVSB或MOVSW操作:MOVSB:ES:[DI]←DS:[SI],SI←SI±1,DI←DI±1MOVSW:ES:[DI]←DS:[SI],SI←SI±2,DI←DI±2說明:使用前綴REP,可完成多次數(shù)據(jù)傳送例:MOVCX,12REPMOVSB;將存儲器DS:[SI]里的數(shù)據(jù)連續(xù)傳送12個(gè)字節(jié)到

ES:[DI]中串操作類指令STOS存入串指令格式:STOSB或STOSW操作:STOSB:ES:[DI]←AL,DI←DI±1STOSW:ES:[DI]←AX,DI←DI±2說明:可使用REP前綴LODS從串中取數(shù)據(jù)指令格式:LODSB或LODSW操作:LODSB:AL←DS:[SI],SI←SI±1LODSW:AX←DS:[SI]

,SI←SI±2SCAS串掃描指令格式:SCASB或SCASW操作:在數(shù)據(jù)中查找AL或AX中的內(nèi)容

SCASB:AL-

ES:[DI],DI←DI±1SCASW:AX-

ES:[DI],DI←DI±2說明:可使用REPE/REPZ或REPNE/REPNZ,僅影響標(biāo)志位串操作類指令CMPS串比較指令格式:CMPSB或CMPSW操作:兩個(gè)MEM操作數(shù)的比較,源操作數(shù)-目的操作數(shù)

CMPSB:DS:[SI]-

ES:[DI],SI←SI±1,DI←DI±1CMPSW:DS:[SI]-

ES:[DI],SI←SI±2,DI←DI±2說明:可使用REPE/REPZ或REPNE/REPNZ,該指令只影響標(biāo)志位,不保存結(jié)果條件重復(fù)前綴說明REPE/REPZ相等或?yàn)?時(shí)重復(fù)操作:若CX≠0且ZF=1(相等)時(shí)繼續(xù)執(zhí)行,否則退出REPNE/REPNZ不相等或不等于0時(shí)重復(fù)操作:若CX≠0且ZF=0(不相等)時(shí)繼續(xù)執(zhí)行,否則退出例:MOVCX,0CHREPZCMPSB;當(dāng)數(shù)據(jù)串沒有結(jié)束(CX≠0),并且串相等(ZF=1),則繼續(xù)串操作類指令例1:將1000H開始的10個(gè)字節(jié)移動到2000H開始的單元MOV SI,1000H;置源操作數(shù)起始地址MOV DI,2000H;置目的操作數(shù)起始地址MOV AX,DS;將DS賦給ES,使ES:DI指向2000H開始單元MOVES,AXMOVCX,0AH;初始化CX為10,移動10個(gè)字節(jié)CLD ;使DF=0,使地址作增量變化REPMOVSB;ES:[DI]←DS:[SI],SI←SI+1,DI←DI+1,CX←CX

-1,CX是否為0INT3;斷點(diǎn)指令串操作類指令MOV SI,1012H;置源操作數(shù)結(jié)束地址MOV DI,1014H;置目的操作數(shù)結(jié)束地址PUSH DS;將DS賦給ES,使ES:[DI]指向1014H單元POP ESMOVCX,0AH;初始化CX為10,移動10個(gè)字STD ;使DF=1,使地址作減量變化REPMOVSW;ES:[DI]←DS:[SI],SI←SI-2,

DI←DI-2,CX←CX

-1,CX是否為0INT3;斷點(diǎn)指令例2:將1000H開始的10個(gè)字移動到1002H開始的單元去控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令該類指令是能夠使程序執(zhí)行流程發(fā)生改變的指令,分為5種:無條件轉(zhuǎn)移和條件轉(zhuǎn)移指令子程序調(diào)用和返回指令循環(huán)控制指令中斷指令處理器控制指令指令需要尋找轉(zhuǎn)移地址或調(diào)用地址,將此種尋址方式稱為程序?qū)ぶ贩绞蕉蝺?nèi)直接轉(zhuǎn)移方式—指令中直接給出跳轉(zhuǎn)的相對偏移量

目標(biāo)轉(zhuǎn)移地址=IP+偏移量(8位或16位)偏移量為8位,稱為短跳轉(zhuǎn),跳轉(zhuǎn)范圍:-128~+127個(gè)單元偏移量為16位,稱為近跳轉(zhuǎn),跳轉(zhuǎn)范圍:-32768~+32767個(gè)單元例:JMP1000H ;轉(zhuǎn)移地址的偏移量由指令給出控制轉(zhuǎn)移類指令段內(nèi)間接轉(zhuǎn)移方式—轉(zhuǎn)移地址在寄存器或內(nèi)存單元中例:JMP CX ;轉(zhuǎn)移地址由CX給出,執(zhí)行時(shí)將CX值賦給IPJMP [1000H];轉(zhuǎn)移地址存放在(1000H,1001H)單元中段間直接轉(zhuǎn)移方式—指令中直接給出轉(zhuǎn)移地址的段地址和偏移量例:JMP 2000H:0100H ;執(zhí)行時(shí),2000H賦給CS,0100H賦給IP注:段間直間轉(zhuǎn)移又稱作遠(yuǎn)跳轉(zhuǎn),該種方式為程序提供了從一個(gè)代碼段轉(zhuǎn)移到另一個(gè)代碼段的方法段間間接轉(zhuǎn)移方式—轉(zhuǎn)移地址的段地址和偏移量在內(nèi)存單元中例:JMPDWORDPTR[SI](SI,SI+1)存放偏移地址,賦給IP,(SI+2,SI+3)存放段地址,賦給CS控制轉(zhuǎn)移類指令(一)無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令JMPTARGET

無條件直接轉(zhuǎn)移指令可以跳轉(zhuǎn)到內(nèi)存中任何程序段,有四種形式例: JMP 1000H ;段內(nèi)直接轉(zhuǎn)移

JMP CX ;段內(nèi)間接轉(zhuǎn)移

JMP 2000H:0100H ;段間直接轉(zhuǎn)移

JMP DWORDPTR[SI] ;段間間接轉(zhuǎn)移說明:段內(nèi)間接轉(zhuǎn)移和段間轉(zhuǎn)移只用于無條件指令

實(shí)際使用時(shí)多采用符號地址,如:

JMPAAA……AAA:MOVAL,3……注:符號AAA在此稱為標(biāo)號,代表其對應(yīng)的指令所在的地址控制轉(zhuǎn)移類指令條件轉(zhuǎn)移指令根據(jù)判斷條件,決定是否跳轉(zhuǎn),條件轉(zhuǎn)移指令都是段內(nèi)短跳轉(zhuǎn)根據(jù)單個(gè)標(biāo)志進(jìn)行跳轉(zhuǎn)的指令JS ;SF=1,則跳轉(zhuǎn)JNS ;SF=0,則跳轉(zhuǎn)JO ;OF=1,則跳轉(zhuǎn)JNO ;OF=0,則跳轉(zhuǎn)JP ;PF=1,則跳轉(zhuǎn)JNP ;PF=0,則跳轉(zhuǎn)JZ ;ZF=1,則跳轉(zhuǎn)JNZ ;ZF=0,則跳轉(zhuǎn)JC ;CF=1,則跳轉(zhuǎn)JNC ;CF=0,則跳轉(zhuǎn)根據(jù)CX中的值進(jìn)行跳轉(zhuǎn)的指令

JCXZ ;CX=0,則跳轉(zhuǎn)控制轉(zhuǎn)移類指令根據(jù)無符號數(shù)比較結(jié)果進(jìn)行跳轉(zhuǎn)的指令助記符:A:大于;B:小于;E:等于JA(JNBE) ;大于,即不小于等于,則跳轉(zhuǎn)JAE(JNB) ;大于等于,即不小于,則跳轉(zhuǎn),同JNCJE ;等于,即結(jié)果為0,則跳轉(zhuǎn),同JZJB(JNAE) ;小于,即不大于等于,則跳轉(zhuǎn),同JCJBE(JNA) ;小于等于,即不大于,則跳轉(zhuǎn),CF|ZF=1根據(jù)有符號數(shù)比較結(jié)果進(jìn)行跳轉(zhuǎn)的指令助記符:G:大于;L:小于;E:等于JG(JNLE) ;大于,即不小于等于,則跳轉(zhuǎn)JGE(JNL) ;大于等于,即不小于,則跳轉(zhuǎn)JE ;等于,與無符號數(shù)比較時(shí)相同JL(JNGE) ;小于,即不大于等于,則跳轉(zhuǎn)JLE(JNG) ;小于等于,即不大于,則跳轉(zhuǎn)注:根據(jù)比較結(jié)果跳轉(zhuǎn)時(shí),必須區(qū)分有符號數(shù)和無符號數(shù),如:

11111111b與00000000b比較,如果把它們看作無符號數(shù)前者大于后者(255>0),但是把它們看作帶符號數(shù)前者小于后者(-1<0).控制轉(zhuǎn)移類指令(二)子程序調(diào)用和返回指令CALLTARGET子程序調(diào)用指令類似轉(zhuǎn)移指令,也有4種形式CALL1000H ;段內(nèi)直接轉(zhuǎn)移,調(diào)用地址在指令中給出CALL AX ;段內(nèi)間接轉(zhuǎn)移,調(diào)用地址在AX中給出CALL 2000H:0200H;段間直接轉(zhuǎn)移,指令中直接給出調(diào)用

;地址的段地址和偏移量CALLDWORDPTR[DI];段間間接轉(zhuǎn)移,調(diào)用地址在內(nèi)存單元中執(zhí)行該指令時(shí),會將下一條指令的地址壓入堆棧,該地址稱為返回地址段內(nèi)調(diào)用:只將返回地址的偏移量壓入堆棧段間調(diào)用:將返回地址的段地址和偏移量壓入堆棧,先壓CS,后壓IP實(shí)際使用時(shí)CALL指令后面直接跟子程序名,例:

CALLDISP

DISPprocAAA:MOVAL,3…….……retDISPendp注:執(zhí)行CALL時(shí),會將AAA所代表的地址壓入堆??刂妻D(zhuǎn)移類指令RET—子程序返回指令,應(yīng)與調(diào)用指令相對應(yīng)

執(zhí)行時(shí),從堆棧頂部彈出返回地址段內(nèi)返回:僅從堆棧頂部彈出返回地址偏移量

IP←(SP),SP←

SP

+

2段間返回:從堆棧頂部彈出返回地址的段地址和偏移量

IP←(SP),SP←

SP

+

2;CS←(SP),SP←

SP

+

2RETIMM16—帶立即數(shù)(0-FFFFH范圍的任何偶數(shù))返回指令執(zhí)行時(shí),從堆棧頂部彈出返回地址,再使SP加上立即數(shù),例:RET4控制轉(zhuǎn)移類指令(三)循環(huán)控制指令循環(huán)控制指令均是段內(nèi)短跳轉(zhuǎn)LOOPTARGET—循環(huán)指令,循環(huán)次數(shù)由CX決定

執(zhí)行時(shí),CX先減1,然后判斷計(jì)數(shù)值CX是否為0;若不為0,則轉(zhuǎn)移到標(biāo)號處執(zhí)行;若等于0,順序執(zhí)行后面的指令。例:

MOVCX,10;設(shè)置循環(huán)次數(shù)為10次

AAA:LOOPAAA ;CX減1,若不為0,則循環(huán)

……;后續(xù)處理LOOPZ/LOOPETARGET—條件循環(huán)指令

LOOPZ和LOOPE是同一條指令的不同助記符,執(zhí)行時(shí),在LOOP指令的基礎(chǔ)上,還需判斷ZF,若CX!=0且ZF=1則循環(huán)LOOPNZ/LOOPNETARGET

執(zhí)行時(shí),在LOOP指令的基礎(chǔ)上,還需判斷ZF

若CX!=0且ZF=0則循環(huán)控制轉(zhuǎn)移類指令循環(huán)調(diào)用指令說明循環(huán)指令不影響狀態(tài)標(biāo)志,即CX減為0時(shí)不影響FLAG如果目標(biāo)位置超出短跳轉(zhuǎn)的范圍,則用JMP輔助完成循環(huán)例:126C:0100MOVCX,0010H126C:0103MOVAX,CX…… ;循環(huán)體中程序

CMPBX,AX126C:0203LOOPZ0207H126C:0205JMP0209H126C:0207JMP0103H126C:0209…… ;循環(huán)體以后的程序12

(五)中斷指令和中斷返回指令I(lǐng)NTn—中斷調(diào)用指令

8086指令系統(tǒng)為程序員提供軟件中斷,利用INTn指令實(shí)現(xiàn)

執(zhí)行時(shí),依次將FLAG,當(dāng)前CS和IP(即斷點(diǎn)地址)壓入堆棧,并清除標(biāo)志寄存器的IF和TF標(biāo)志,執(zhí)行中斷類型碼為n的中斷程序。IRET

—中斷返回指令

執(zhí)行時(shí),從堆棧中依次彈出斷點(diǎn)地址的IP、CS和FLAGINTO—溢出中斷指令

執(zhí)行時(shí),判斷OF,若為1,則執(zhí)行中斷指令I(lǐng)NT4,否則無操作(六)控制指令標(biāo)志處理指令CLC/STC/CMC對CF清0/置位/取反CLD/STD 對DF清0/置位CLI/STI 對IF清0/置位控制轉(zhuǎn)移類指令處理器控制指令NOP—空操作指令,占用一個(gè)字節(jié)的機(jī)器碼,不執(zhí)行任何操作HLT—Halt,停機(jī)指令,該指令使處理器處于停機(jī)狀態(tài),以便等待一次外部中斷到來WAIT—等待指令,該指令使處理器處于空轉(zhuǎn)狀態(tài),也可用來等待外部中斷的到來ESC—Escape,換碼指令,用作前綴,例:ESCMEM

其中MEM指出一個(gè)存儲單元,ESC指令把該存儲單元的內(nèi)容送到數(shù)據(jù)總線去。LOCK—封鎖指令,用作前綴該指令與其他指令聯(lián)合,用來維持總線的封鎖信號直到與其聯(lián)合的指令執(zhí)行完為止。控制轉(zhuǎn)移類指令80386擴(kuò)充指令介紹第3.4節(jié)80386擴(kuò)充指令介紹

80386為32位CPU,具有獨(dú)立的32位數(shù)據(jù)線(D31~D0)和34位地址線(A31~A2,/BE0~/BE3),可尋址4GB存儲空間,內(nèi)部寄存器多為32位一.80386的內(nèi)部寄存器1.通用寄存器

80386有8個(gè)32位通用寄存器:

EAXEBXECXEDXESPEBPESIEDI

為與8086兼容,每個(gè)寄存器低16位可獨(dú)立訪問:

AXBXCXDXSPBPSIDI

前4個(gè)寄存器的低8位和高8位又可獨(dú)立訪問

AHALBHBLCHCLDHDL2.32位指令指針寄存器EIP

低16位取名IP,可獨(dú)立訪問3.32位標(biāo)志寄存器EFLAG

增加了部分標(biāo)志EIPIP0151631EAXAX0151631AHALEBXBXBHBLECXCXCHCLEDXDXDHDLESPSPEBPBPESISIEDIDIEIPIP03180386擴(kuò)充指令介紹4.段寄存器:80386內(nèi)部設(shè)置了6個(gè)16位段寄存器CSDSSSESFSGS二.80386尋址方式在8086尋址方式基礎(chǔ)上,80386的所有通用寄存器既可作為基址寄存器,也可作為變址寄存器(ESP除外),存放地址。

EA=基址+變址×比例因子+位移量

比例因子可以為:1、2、4或8,位移量可以為8位、16位或32位例:MOVECX,[EAX+EDX*4+1000H]三.

80386擴(kuò)充指令

—1.數(shù)據(jù)傳送指令1)使用MOV指令時(shí),兩操作數(shù)位數(shù)必須相同,若不同,則用M

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論