硬件技術(shù)課件Chapter23_第1頁(yè)
硬件技術(shù)課件Chapter23_第2頁(yè)
硬件技術(shù)課件Chapter23_第3頁(yè)
硬件技術(shù)課件Chapter23_第4頁(yè)
硬件技術(shù)課件Chapter23_第5頁(yè)
已閱讀5頁(yè),還剩119頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

二.?dāng)?shù)據(jù)傳送指令存儲(chǔ)器I/O接口輸入設(shè)備I/O接口數(shù)據(jù)總線(xiàn)DB控制總線(xiàn)CB地址總線(xiàn)AB輸入設(shè)備CPU寄存器,存儲(chǔ)器,I/O端口二.?dāng)?shù)據(jù)傳送指令存I/O輸I/O數(shù)據(jù)總線(xiàn)DB控制總線(xiàn)C1數(shù)據(jù)傳送是最基本、最重要的一種操作實(shí)際程序中,使用的比例最高

changePROC

LEASI,num+2MOVCL,num+1MOVCH,0MOVAX,0MOVDI,10next:MULDI

MOVBH,0MOVBL,[SI]ANDBL,0FHADDAX,BXINCSILOOPnextzero:MOVBX,AXRETchangeENDP

匯編子程例:寄存器寄存器寄存器內(nèi)存單元寄存器I/O端口設(shè)置寄存器、內(nèi)存單元的初始值數(shù)據(jù)傳送是最基本、最重要的一種操作changePR2按傳送內(nèi)容,可分為四類(lèi):1.通用數(shù)據(jù)傳送MOV,PUSH,POP,XCHG,XLAT2.地址傳送LEA,LDS,LES3.標(biāo)志傳送PUSHF,POPF,LAHF,SAHF4.輸入輸出傳送IN,OUT(在第五章介紹)

特點(diǎn):1.除POPF、SAHF外,其他傳送指令對(duì)標(biāo)志位均無(wú)影響2.唯一允許以段寄存器做操作數(shù)的指令且只有MOV、PUSH、POP這三條允許按傳送內(nèi)容,可分為四類(lèi):1.通用數(shù)據(jù)傳送MOV,PU31.通用傳送指令

MOV、PUSH、POP、XCHG、XLATreg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data

可實(shí)現(xiàn)1)MOV傳送指令格式MOVdst,src執(zhí)行(dst)←(src)1.通用傳送指令MOV、PUSH、POP、XCHG、XL4例:①reg/mem/segreg←reg通用寄存器/存儲(chǔ)器/段寄存器←通用寄存器

MOVAL,BLMOV[BX],ALMOVDS,AX②reg/segreg←mem通用寄存器/段寄存器←存儲(chǔ)器MOVAL,[BX]MOVDS,[BX+SI]

③reg/mem←segreg通用寄存器/存儲(chǔ)器←段寄存器

MOVBX,CSMOV[BX],DS

④reg/mem←data通用寄存器/存儲(chǔ)器←立即數(shù)MOVAl,9MOVBX,OFFSETbufferMOV[value],0MOVWORDPTR[BX],1例:5MOV指令特點(diǎn)及注意事項(xiàng):雙操作數(shù)指令(注意雙操作指令的特點(diǎn))可進(jìn)行字節(jié)或字傳送不允許存儲(chǔ)器傳送到存儲(chǔ)器MOV[BX],valueMOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],ALMOV指令特點(diǎn)及注意事項(xiàng):6

可對(duì)DS、ES、SS賦值但不允許立即數(shù)直接傳送給段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX

CS不能做目的操作數(shù),不能通過(guò)傳送指令改變CS的值MOVCS,AX可對(duì)DS、ES、SS賦值7

不允許段寄存器傳送到段寄存器

MOVES,DSMOVAX,DSMOVES,AXD:\MASM>DEBUG-A1693:0100MOVES,DS^Error1693:0100MOVAX,DS1693:0102MOVES,AX1693:0104-不允許段寄存器傳送到段寄存器D:\MASM>DEBUG8例編程將CL寄存器的內(nèi)容傳送到200:100H單元中。課外作業(yè):編寫(xiě)程序段,將內(nèi)存200:100H開(kāi)始的一個(gè)字內(nèi)容傳送到地址為800:400H開(kāi)始的內(nèi)存中。MOVAX,200HMOVDS,AX;(DS)=200HMOV[100H

],CL;(02100H)=(CL)編程1:MOVAX,200HMOVDS,AX;(DS)=200HMOVDI,100H;(DI)=100HMOV[DI

],CL;(02100H)=(CL)編程2:MOV[200:100H],CL例編程將CL寄存器的內(nèi)容傳送到200:100H單元92)PUSH入棧操作格式

PUSHsrc執(zhí)行(SP)←(SP)-2(SS:SP)←(src)特點(diǎn):單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字類(lèi)型SS:SP

SS:SP

(src)2)PUSH入棧操作特點(diǎn):SS:SPSS:SP(src)10例:

PUSHAX若執(zhí)行前:

(SS)=2000H(SP)=1002H(SS:SP)=

2010H

(AX)=1234H3B2A10低高20地址SS:SP2000:1002指令執(zhí)行前(AX)=1234h則執(zhí)行后:

(SS)=2000H(SP)=1000H(SS:SP)=1234H(AX)=1234H123410低高20地址SS:SP2000:1000指令執(zhí)行后(AX)=1234h不變減2變不變

例:PUSHAX若執(zhí)行前:113)POP出棧操作特點(diǎn):單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允許是CSmem:字類(lèi)型SS:SP

SS:SP

(dst)格式

POPdst執(zhí)行(dst)←(SS:SP)(SP)←(SP)+23)POP出棧操作特點(diǎn):SS:SPSS:SP(dst)格12若執(zhí)行前:

(SS)=2000H(SP)=1000H(SS:SP)=1234H

(BX)=5678H123410低高20SS:SP2000:1000指令執(zhí)行前地址(BX)=5678h例:

POPBX123410低高20SS:SP2000:1002指令執(zhí)行后地址(BX)=1234h則執(zhí)行后:

(SS)=2000H(SP)=1002H

(SS:SP)=2010H(BX)=1234H

不變加2變變

若執(zhí)行前:13例:執(zhí)行下列程序段

PUSHAX

PUSHBX

MOVAX,66H③

MOVBX,99H④

POPBX

POPAX

⑥若執(zhí)行前(SS)=3000H(SP)=200EH(SS:SP)=1234H(AX)=0A0BH(BX)=0C0DH3000:200ESS:SP

執(zhí)行前(AX)=0A0B(BX)=0C0D3412執(zhí)行①后3000:200CSS:SP

0B0A3000:200ASS:SP

執(zhí)行②后0D0C0B0A3000:200CSS:SP

執(zhí)行⑤后:(BX)=0C0D0D0C0B0A執(zhí)行③④后(AX)=0066(BX)=0099執(zhí)行③④后(AX)=0066(BX)=00993000:200ASS:SP

執(zhí)行②后0D0C0B0A執(zhí)行⑥后:(AX)=0A0B3000:200ESS:SP

(BX)=0C0D執(zhí)行③④后(AX)=0066(BX)=00990D0C0B0A例:執(zhí)行下列程序段若執(zhí)行前3000:200ESS:SP執(zhí)行14用PUSH往SS段傳送一批數(shù)據(jù)后,再用POP取出時(shí),取出單元的順序與存放時(shí)的順序正好相反,“后進(jìn)先出”⑥POPAX(AX)=0A0B①PUSHAX3000:200ESS:SP

執(zhí)行前3000:200CSS:SP

3000:200ASS:SP

②PUSHBX3000:200ESS:SP

3000:200CSS:SP

0D0C0B0A3412⑤POPBX(BX)=0C0D(AX)=0A0B(BX)=0C0D④MOVAX,0066(BX)=0099③MOVAX,0066

(AX)=0066

用PUSH往SS段傳送一批數(shù)據(jù)后,再用POP取出時(shí),⑥PO15堆棧是一個(gè)內(nèi)存區(qū)域。通常用于存放一些重要數(shù)據(jù),如程序的地址、或是需要恢復(fù)的數(shù)據(jù)。SS:SP

為方便數(shù)據(jù)的存放和恢復(fù),設(shè)置專(zhuān)門(mén)的指針,指向堆棧中要操作的單元。段值由SS給出,偏移地址由SP給出

SS→堆棧段寄存器(stacksegment)SP→堆棧指針寄存器(stackpoint)堆棧的概念stackSS:SP為方便數(shù)據(jù)的存放和恢復(fù),堆棧的概念stack16堆棧操作指令PUSH和POP,對(duì)SS和SP指向的內(nèi)存單元,以“后進(jìn)先出”方式進(jìn)行操作。

PUSH→入棧操作SP減小

POP→出棧操作SP增加

SP指向棧頂,即堆棧的頂部,

編程員通過(guò)設(shè)置堆棧區(qū)域,利用堆棧操作,可方便的進(jìn)行數(shù)據(jù)的存放和恢復(fù)。SS:SP

SS:0000SS:FFFF堆棧未用空間堆棧操作指令PUSH和POP,SS:SPSS:0017堆棧使用的場(chǎng)合用堆棧保存恢復(fù)信息(如上例)子程序的調(diào)用、返回以及中斷調(diào)用、返回(控制轉(zhuǎn)移指令中介紹)用堆棧傳送數(shù)據(jù)(程序設(shè)計(jì)中介紹)堆棧使用的場(chǎng)合18注意事項(xiàng)

堆棧是一重要數(shù)據(jù)結(jié)構(gòu),使用堆棧應(yīng)有明確目的。不亂用堆棧操作,不亂修改堆棧內(nèi)容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET

亂修改SS和SP的內(nèi)容包括亂用BP參與的存儲(chǔ)器操作數(shù)

亂用指令注意事項(xiàng)PUSH、POP、PUSHF、POPF、19PUSH和POP指令只能對(duì)字操作。PUSHALPOPBYTEPTR[BX]

可以對(duì)段寄存器操作但POP不能對(duì)CS操作PUSHDSPUSHCSPOPES

POPCSPUSH和POP指令只能對(duì)字操作。204)XCHG交換指令(自學(xué))

格式

XCHGoprd1,oprd2執(zhí)行

(oprd1)(oprd2)regregregmemmemreg

可實(shí)現(xiàn)4)XCHG交換指令(自學(xué))reg21例XCHGAX,BX字操作執(zhí)行前(AX)=1122H(BX)=3344H執(zhí)行后(AX)=3344H(BX)=1122H

例XCHGAH,BL字節(jié)操作執(zhí)行前(AX)=1122H(BX)=3344H執(zhí)行后(AX)=4422H(BX)=3311H例XCHGAX,BX字操作22XCHGoprd1,oprd2注意事項(xiàng):

雙操作數(shù)指令可進(jìn)行字或字節(jié)操作不允許對(duì)立即數(shù)、段寄存器做操作數(shù)XCHGAX,4

XCHGBX,DSXCHGoprd1,oprd2232.

地址傳送指令LEA、LDS、LESLEA有效地址傳送格式LEAreg,mem執(zhí)行(reg)←mem的EA即寄存器←存儲(chǔ)器操作數(shù)的偏移地址

2.地址傳送指令LEA、LDS、LESLEA有效地址傳送24執(zhí)行后(BX)=1000H注意:

OFFSET是匯編程序提供的一個(gè)操作符,不是CPU的指令LEABX,buffer例

buffer是一個(gè)符號(hào)地址表示的內(nèi)存操作數(shù)(變量)。…...12h34h56h…...buffer內(nèi)存DS:1000h若變量buffer的偏移地址=1000H等價(jià)于MOVBX,OFFSETbuffer執(zhí)行后(BX)=1000H注意:LEA25buffer

1A2B3C4D、、、、、、例

將buffer為首的4個(gè)字節(jié)內(nèi)存內(nèi)容相加,存放在A(yíng)L中。MOVAX,SEGbufferMOVDS,AX

LEABX,bufferMOVCX,4MOVAL,0exit:ADDAL,[BX]INCBXDECCX;(cx)=(cx)-1JNZexit;ZF≠0,轉(zhuǎn)至exit說(shuō)明:1)操作符SEG的作用是取變量的段地址。執(zhí)行完前兩條指令后,(DS)=buffer的段值2)操作符OFFSET的作用是取變量的偏移地址執(zhí)行完LEABX,buffer,(BX)為buffer的偏移地址,

3)操作數(shù)[BX]是以DS為段值,BX為偏移值的內(nèi)存單元buffer1A2B3C4D、、、、、、例將b26LEAreg,mem特點(diǎn)及注意事項(xiàng):目的操作數(shù)reg應(yīng)是16位通用寄存器LEAES,[BX]LEAAL,bufferLEA6,[BX+SI]LEA[DI],buffer源操作數(shù)應(yīng)是存儲(chǔ)器操作數(shù)LEABX,AX傳送的是內(nèi)存單元的有效地址,與其內(nèi)容無(wú)關(guān)?!?..12h34h56h…...buffer內(nèi)存LEAreg,mem…...buffer內(nèi)存273.標(biāo)志傳送PUSHF、POPF、LAHF、SAHFSS:SP

SS:SP

(PSW)2)POPF標(biāo)志出棧格式POPF執(zhí)行(PSW)←(SS:SP)(SP)←(SP)+2SS:SP

SS:SP

(PSW)1)PUSHF標(biāo)志入棧格式PUSHF執(zhí)行(SP)←(SP)-2(SS:SP)←(PSW)3.標(biāo)志傳送PUSHF、POPF、LAHF、SAHF28特點(diǎn)及注意事項(xiàng):無(wú)操作數(shù)的形式,操作數(shù)隱含為(PSW)PUSHFAXPOPFCXPUSHF和POPF用于標(biāo)志信息的保存和恢復(fù)特點(diǎn)及注意事項(xiàng):29三.算術(shù)運(yùn)算指令指令分類(lèi):三.算術(shù)運(yùn)算指令指令分類(lèi):30特點(diǎn):帶符號(hào)數(shù)用補(bǔ)碼表示如MOVAX,-1等價(jià)于MOVAX,0FFFFh

對(duì)加、減運(yùn)算,不區(qū)分無(wú)符號(hào)數(shù)、帶符號(hào)數(shù)(參見(jiàn)第一章例)對(duì)乘、除運(yùn)算,區(qū)分無(wú)符號(hào)數(shù)、帶符號(hào)數(shù)可進(jìn)行字節(jié)或字操作影響狀態(tài)標(biāo)志十進(jìn)制運(yùn)算方法(不做重點(diǎn),講義中做了簡(jiǎn)單介紹)當(dāng)數(shù)據(jù)用壓縮或非壓縮BCD碼表示時(shí),為使運(yùn)算的結(jié)果仍為BCD碼表示,需對(duì)結(jié)果進(jìn)行調(diào)整。

十進(jìn)制運(yùn)算=二進(jìn)制運(yùn)算+十進(jìn)制調(diào)整

特點(diǎn):31BCD碼(BinaryCodedDecimal)

用二進(jìn)制編碼表示十進(jìn)制數(shù)。常用8421BCD碼,與十進(jìn)制數(shù)碼對(duì)應(yīng)關(guān)系:例48的BCD碼為(01001000)BCD

BCD碼(BinaryCodedDecimal)32根據(jù)在內(nèi)存的存放形式,分壓縮BCD碼和非壓縮BCD碼1)壓縮BCD碼一字節(jié)存放2個(gè)BCD碼。

如2148的壓縮BCD碼為:(00100001

01001000)壓縮BCD在內(nèi)存中占2字節(jié)2)非壓縮BCD碼一字節(jié)存放1個(gè)BCD碼。

如2148的非壓縮BCD碼為:(00000010

00000001

00000100

00001000)

非壓縮BCD

在內(nèi)存中占4字節(jié)根據(jù)在內(nèi)存的存放形式,分壓縮BCD碼和非壓縮BCD碼33當(dāng)數(shù)據(jù)用壓縮或非壓縮BCD碼表示時(shí),為使運(yùn)算的結(jié)果仍為BCD碼表示,需對(duì)結(jié)果進(jìn)行調(diào)整。

十進(jìn)制運(yùn)算=二進(jìn)制運(yùn)算+十進(jìn)制調(diào)整例

(00001000)

壓縮BCD

+(00001001)

壓縮BCD

=(00010111)

壓縮BCD計(jì)算機(jī)計(jì)算過(guò)程看作壓縮BCD0000100008+0000100109

0001000111

二進(jìn)制運(yùn)算十進(jìn)制調(diào)整+00000110

0001011117當(dāng)數(shù)據(jù)用壓縮或非壓縮BCD碼表示時(shí),例(00001000341.加法運(yùn)算指令

ADD、ADC為雙操作數(shù)指令I(lǐng)NC為單操作數(shù)指令除INC指令不影響CF外,6個(gè)狀態(tài)標(biāo)志均據(jù)結(jié)果設(shè)置ADC帶進(jìn)位加法,實(shí)現(xiàn)字以上運(yùn)算1.加法運(yùn)算指令A(yù)DD、ADC為雙操作數(shù)指令A(yù)DC帶進(jìn)位35CFA1H

1100111110100001+62A0H+0110001010100000111111111113241H0011001001000001例1編程完成

CFA1H+62A0H(做過(guò)的隨堂作業(yè))MOVDX,0CFA1HADDDX,62A0H執(zhí)行后:(DX)=3241HCF=1,OF=0,SF=0,ZF=0(注意CF和OF的判斷方法)CFA1H1100111110136三組指令執(zhí)行后的結(jié)果均為:(AL)=0FDH,CF=0,OF=0,SF=1,ZF=0MOVAL,0F1HADDAL,0CHMOVAL,241ADDAL,12

MOVAL,-15ADDAL,12第一章中的例題F1H+0CHFDH二進(jìn)制運(yùn)算241+12253看作無(wú)符號(hào)數(shù)(-15)+12

(-3)看作帶符號(hào)數(shù)B0F1040C、、、、、、第一條指令第二條指令三組機(jī)器碼相同:對(duì)加、減運(yùn)算,CPU計(jì)算時(shí)不區(qū)分無(wú)符號(hào)數(shù)、帶符號(hào)數(shù)三組指令執(zhí)行后的結(jié)果均為:MOVAL,0F37例2

INCAL執(zhí)行前(AL)=FFH

執(zhí)行后:(AL)=00HCF=不變,OF=0,ZF=1,SF=0FFH+01H11

00H例2INCAL執(zhí)行后:FFH38

01FFH+0001H110200H

例3

value是一個(gè)字變量OFFSETvalue=1000H(DS)=2000H,(21000H)=01FFHvalueFF21000H

01執(zhí)行前value0021000H

02執(zhí)行后執(zhí)行后:(21000H)=0200HCF=不變,OF=0,ZF=0,SF=0注意是內(nèi)存單元內(nèi)容加1,而非地址加1INCvalue或?qū)懗?INC[value]01FFH例3value是一個(gè)字變量val39例4將buffer為首的4個(gè)字節(jié)內(nèi)存內(nèi)容相加,存放在A(yíng)L中。

buffer1AB7C5D6若編程如下,MOVCX,4MOVAL,0exit:ADDAL,[buffer]

INCbufferDECCXJNZexit不能實(shí)現(xiàn),為什么?…...MOVCX,4

LEABX,bufferMOVAL,0exit:ADDAL,[BX]

INCBXDECCXJNZexit實(shí)現(xiàn)的是1A+1B+1C+1D指令I(lǐng)NCbuffer將buffer指向的內(nèi)容加1,而不是地址buffer加1例4將buffer為首的4個(gè)字節(jié)內(nèi)存內(nèi)容相加,存放在A(yíng)L40例5兩雙字相加0002F365H+0005E024H=?MOVAX,0F365H①ADDAX,0E024H

②MOVBX,0002H③ADCBX,0005H④

0002

F365H+

0005

E024H

0008

D389H結(jié)果存放在:0008D389(BX)(AX)執(zhí)行完①、②:(AX)=D389HCF=1,OF=0,SF=1,ZF=0

執(zhí)行完③、④:(BX)=0008HCF=0,OF=0,SF=0,ZF=0分析:8086/8088只能按字節(jié)或字相加。位數(shù)在字以上的操作數(shù),先加低位,再加高位,加高位時(shí)加入從低位產(chǎn)生的進(jìn)位。例5兩雙字相加0002F365H+0005412.減法運(yùn)算指令SUB、SBB、

CMP為雙操作數(shù),DEC、NEG為單操作數(shù)SBB為帶進(jìn)位減法除DEC不影響CF標(biāo)志外,6個(gè)狀態(tài)標(biāo)志均據(jù)結(jié)果置位NEG求補(bǔ)運(yùn)算,等價(jià)于用0減去操作數(shù)。其對(duì)標(biāo)志位的影響,由0減去該操作數(shù)的過(guò)程決定。2.減法運(yùn)算指令SUB、SBB、

CMP為雙操作數(shù),DE42例1

編程完成2D04H–3AB0H執(zhí)行后:(AX)=0F254HCF=1,OF=0,SF=1,ZF=02D04H0010110100000100-3AB0H-001110101011000011111111111F254H1111001001010100MOVAX,2D04HSUBAX,3AB0H

借位例1編程完成2D04H–3AB0H執(zhí)行后:43例2

value是一個(gè)字節(jié)變量OFFSETvalue=1000H(DS)=2000H,(21000H)=00HDECvalue

執(zhí)行后:(21000H)=0FFHCF=不變,OF=0,ZF=0,SF=1注意是內(nèi)存單元內(nèi)容減1,而非地址減1

00H-01H11FFH

例2value是一個(gè)字節(jié)變量注意是內(nèi)存單元內(nèi)容減1,44例3

MOVAH,80HNEGAH00H00000000B

-80H-10000000B1180H10000000B執(zhí)行后:

(AL)=80HCF=1,OF=1,ZF=0,SF=1例3MOVAH,80H45例4用指令完成兩雙字相減運(yùn)算05467A70H

-F001A543HMOVAX,7A70HSUBAX,A543HMOVBX,0546HSBBBX,0F001H例4用指令完成兩雙字相減運(yùn)算05467A70HMO46CMPoprd1,oprd2;(oprd1)-(oprd2)①據(jù)ZF判斷兩數(shù)是否相等CMPA,BZF=1兩數(shù)相等,A=B;ZF=0兩數(shù)不等,A≠B②據(jù)ZF和CF判斷兩無(wú)符號(hào)數(shù)關(guān)系CF=1A低于BCF=0A高于等于BCF=1或ZF=1A低于等于BCF=0且ZF=0A高于B利用CMP執(zhí)行后的標(biāo)志值,比較兩操作數(shù)之間的關(guān)系比較指令CMP,進(jìn)行兩操作數(shù)相減操作,但只影響標(biāo)志值,不影響操作數(shù)(減的結(jié)果不保存)CMPoprd1,oprd247

CMPAX,BX;比較JAEabove;高于等于則跳轉(zhuǎn)XCHGAX,BX;低于則交換above:、、、例將AX和BX中較大的無(wú)符號(hào)數(shù),存于A(yíng)X中CMP48CMPA,B③用ZF、SF和OF判斷兩帶符號(hào)數(shù)關(guān)系

OF=0,不溢出情況,

SF=0,A≥BSF=1,A<BOF=0,SF=0A≥BOF=0,SF=1A<BOF=1,SF=1A>BOF=1,SF=0A<B0-

1正-負(fù)=負(fù),結(jié)果SF=1,OF=11但,正>負(fù),知A>B

1-0負(fù)-正=正,結(jié)果SF=0,OF=10但,負(fù)<正,知A<B

OF=1,溢出情況,(由符號(hào)位可決定是否溢出)CMPA,BOF=0,不溢出情況,OF=0,SF=049結(jié)合ZF,得到結(jié)論:邏輯運(yùn)算:思考:可否只用ZF和SF判斷兩符號(hào)數(shù)關(guān)系?結(jié)合ZF,得到結(jié)論:邏輯運(yùn)算:思考:50例將AX和BX中較大的帶符號(hào)數(shù),存于A(yíng)X中

CMPAX,BX;比較

JGE

great;大于等于則跳轉(zhuǎn)XCHGAX,BX;小于則交換great:、、、例將AX和BX中較大的帶符號(hào)數(shù),存于A(yíng)X中513.乘法指令無(wú)符號(hào)數(shù)乘法帶符號(hào)數(shù)乘法3.乘法指令無(wú)符號(hào)數(shù)乘法帶符號(hào)數(shù)乘法52MULsrcIMULsrc單操作數(shù)指令源操作數(shù)(乘數(shù))類(lèi)型決定操作類(lèi)型目的操作數(shù)(被乘數(shù))隱含。字節(jié)乘AL字乘AX字節(jié)相乘的結(jié)果存放在A(yíng)X中字相乘的結(jié)果存放在DX、AX中MUL用于無(wú)符號(hào)數(shù)運(yùn)算IMUL用于帶符號(hào)數(shù)運(yùn)算MULsrc53

影響CF和OF,對(duì)其他條件碼無(wú)定義(不確定)指令MUL字節(jié)相乘,AH=0,CF=OF=0,否則CF=OF=1字相乘,DX=0,CF=OF=0,否則CF=OF=1

對(duì)指令I(lǐng)MUL字節(jié)相乘,AH=0或AH=FFH,CF=OF=0,否則CF=OF=1字相乘,DX=0或DX=FFFFH,CF=OF=0,否則CF=OF=1影響CF和OF,對(duì)其他條件碼無(wú)定義(不確定)54例(AL)=0B4H,(BL)=11H指令中源操作數(shù)為字節(jié)類(lèi)型,故是字節(jié)操作①M(fèi)ULBL②IMULBL看作無(wú)符號(hào)數(shù)(AL)=180D(BL)=17D180×17=3060D=0BF4H執(zhí)行MULBL后:(AX)=0BF4H看作帶符號(hào)數(shù)(AL)=-76D(BL)=17D(-76)×17=-1292D=0FAF4H執(zhí)行IMULBL后:(AX)=0FAF4H例(AL)=0B4H,(BL)=11H55例(AX)=0FFFFH,(BX)=0FFFFH指令中源操作數(shù)為字類(lèi)型,故是字操作①M(fèi)ULBX執(zhí)行MULBX后:(DX)=0FFFEH(AX)=0001H看作無(wú)符號(hào)數(shù)(AX)=(BX)=6553565535×65535=4294836225=0FFFE0001H②IMULBX看作帶符號(hào)數(shù)(AX)=(BX)=-1(-1)×(-1)=1=00000001H執(zhí)行IMULBX后:

(DX)=0000H(AX)=0001H例(AX)=0FFFFH,(BX)=0FF564.除法指令(自學(xué))4.除法指令(自學(xué))57單操作數(shù)指令源操作數(shù)(除數(shù))類(lèi)型決定指令操作類(lèi)型目的操作數(shù)(被除數(shù))隱含字節(jié)操作在A(yíng)X中;字操作在DX,AX中除的結(jié)果,字節(jié)操作在A(yíng)X中;字操作在DX,AX中除法指令對(duì)所有條件碼位均無(wú)定義下列情況自動(dòng)轉(zhuǎn)入0中斷處理:(1)除數(shù)為0(2)字節(jié)操作,商的范圍超出字節(jié)范圍字操作時(shí),商的范圍超出字范圍單操作數(shù)指令58除法指令舉例例(AX)=0501H,(BL)=0C6H

(1)DIVBL(2)IDIVBL看作無(wú)符號(hào)數(shù)看作帶符號(hào)數(shù)(AL)=1281D(AL)=1281D(BL)=198D(BL)=-58D1281/198商=6D1281/(-58)商=-22D=0EAH余數(shù)=93D=5DH余數(shù)=5D

執(zhí)行DIVBL后:執(zhí)行IDIVBL后:(AX)=5D06H(AX)=05EAH除法指令舉例595.符號(hào)擴(kuò)展指令(自學(xué))5.符號(hào)擴(kuò)展指令(自學(xué))60無(wú)操作數(shù)格式操作數(shù)隱含字節(jié)操作,源在A(yíng)L,目的在A(yíng)X字操作,源在A(yíng)X,目的在DX,AX對(duì)條件碼無(wú)影響符號(hào)擴(kuò)展指令應(yīng)對(duì)帶符號(hào)數(shù)操作擴(kuò)展后,表示的數(shù)值大小不變,只是位數(shù)發(fā)生變化8位16位16位32位應(yīng)用場(chǎng)合:除法指令中,使被除數(shù)滿(mǎn)足要求。字節(jié)操作,被除數(shù)為16位字操作,被除數(shù)為32位加減運(yùn)算中,使兩操作數(shù)類(lèi)型一致如:字與字節(jié)相加、減時(shí)如:雙字與字之間的相加、減時(shí)無(wú)操作數(shù)格式61符號(hào)擴(kuò)展指令舉例例

CBW執(zhí)行前(AL)=01H,(AH)=0FFH執(zhí)行后(AL)=01H,(AH)=00H例

CWD執(zhí)行前(AX)=0FF00H,(DX)=0011H執(zhí)行后(AX)=0FF00H,(DX)=0FFFFH例

(AL)=0FFH,將其內(nèi)容擴(kuò)展至(AX)中

看作無(wú)符號(hào)數(shù)為255,

若用MOVAH,0H(AX)=00FFH=255D若用CBW(AX)=0FFFFH=65535≠原數(shù)故,對(duì)無(wú)符號(hào)數(shù)的擴(kuò)展不能用符號(hào)擴(kuò)展指令對(duì)無(wú)符號(hào)數(shù)的擴(kuò)展,直接給高位賦0。符號(hào)擴(kuò)展指令舉例62二.?dāng)?shù)據(jù)傳送指令存儲(chǔ)器I/O接口輸入設(shè)備I/O接口數(shù)據(jù)總線(xiàn)DB控制總線(xiàn)CB地址總線(xiàn)AB輸入設(shè)備CPU寄存器,存儲(chǔ)器,I/O端口二.?dāng)?shù)據(jù)傳送指令存I/O輸I/O數(shù)據(jù)總線(xiàn)DB控制總線(xiàn)C63數(shù)據(jù)傳送是最基本、最重要的一種操作實(shí)際程序中,使用的比例最高

changePROC

LEASI,num+2MOVCL,num+1MOVCH,0MOVAX,0MOVDI,10next:MULDI

MOVBH,0MOVBL,[SI]ANDBL,0FHADDAX,BXINCSILOOPnextzero:MOVBX,AXRETchangeENDP

匯編子程例:寄存器寄存器寄存器內(nèi)存單元寄存器I/O端口設(shè)置寄存器、內(nèi)存單元的初始值數(shù)據(jù)傳送是最基本、最重要的一種操作changePR64按傳送內(nèi)容,可分為四類(lèi):1.通用數(shù)據(jù)傳送MOV,PUSH,POP,XCHG,XLAT2.地址傳送LEA,LDS,LES3.標(biāo)志傳送PUSHF,POPF,LAHF,SAHF4.輸入輸出傳送IN,OUT(在第五章介紹)

特點(diǎn):1.除POPF、SAHF外,其他傳送指令對(duì)標(biāo)志位均無(wú)影響2.唯一允許以段寄存器做操作數(shù)的指令且只有MOV、PUSH、POP這三條允許按傳送內(nèi)容,可分為四類(lèi):1.通用數(shù)據(jù)傳送MOV,PU651.通用傳送指令

MOV、PUSH、POP、XCHG、XLATreg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data

可實(shí)現(xiàn)1)MOV傳送指令格式MOVdst,src執(zhí)行(dst)←(src)1.通用傳送指令MOV、PUSH、POP、XCHG、XL66例:①reg/mem/segreg←reg通用寄存器/存儲(chǔ)器/段寄存器←通用寄存器

MOVAL,BLMOV[BX],ALMOVDS,AX②reg/segreg←mem通用寄存器/段寄存器←存儲(chǔ)器MOVAL,[BX]MOVDS,[BX+SI]

③reg/mem←segreg通用寄存器/存儲(chǔ)器←段寄存器

MOVBX,CSMOV[BX],DS

④reg/mem←data通用寄存器/存儲(chǔ)器←立即數(shù)MOVAl,9MOVBX,OFFSETbufferMOV[value],0MOVWORDPTR[BX],1例:67MOV指令特點(diǎn)及注意事項(xiàng):雙操作數(shù)指令(注意雙操作指令的特點(diǎn))可進(jìn)行字節(jié)或字傳送不允許存儲(chǔ)器傳送到存儲(chǔ)器MOV[BX],valueMOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],ALMOV指令特點(diǎn)及注意事項(xiàng):68

可對(duì)DS、ES、SS賦值但不允許立即數(shù)直接傳送給段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX

CS不能做目的操作數(shù),不能通過(guò)傳送指令改變CS的值MOVCS,AX可對(duì)DS、ES、SS賦值69

不允許段寄存器傳送到段寄存器

MOVES,DSMOVAX,DSMOVES,AXD:\MASM>DEBUG-A1693:0100MOVES,DS^Error1693:0100MOVAX,DS1693:0102MOVES,AX1693:0104-不允許段寄存器傳送到段寄存器D:\MASM>DEBUG70例編程將CL寄存器的內(nèi)容傳送到200:100H單元中。課外作業(yè):編寫(xiě)程序段,將內(nèi)存200:100H開(kāi)始的一個(gè)字內(nèi)容傳送到地址為800:400H開(kāi)始的內(nèi)存中。MOVAX,200HMOVDS,AX;(DS)=200HMOV[100H

],CL;(02100H)=(CL)編程1:MOVAX,200HMOVDS,AX;(DS)=200HMOVDI,100H;(DI)=100HMOV[DI

],CL;(02100H)=(CL)編程2:MOV[200:100H],CL例編程將CL寄存器的內(nèi)容傳送到200:100H單元712)PUSH入棧操作格式

PUSHsrc執(zhí)行(SP)←(SP)-2(SS:SP)←(src)特點(diǎn):單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字類(lèi)型SS:SP

SS:SP

(src)2)PUSH入棧操作特點(diǎn):SS:SPSS:SP(src)72例:

PUSHAX若執(zhí)行前:

(SS)=2000H(SP)=1002H(SS:SP)=

2010H

(AX)=1234H3B2A10低高20地址SS:SP2000:1002指令執(zhí)行前(AX)=1234h則執(zhí)行后:

(SS)=2000H(SP)=1000H(SS:SP)=1234H(AX)=1234H123410低高20地址SS:SP2000:1000指令執(zhí)行后(AX)=1234h不變減2變不變

例:PUSHAX若執(zhí)行前:733)POP出棧操作特點(diǎn):單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允許是CSmem:字類(lèi)型SS:SP

SS:SP

(dst)格式

POPdst執(zhí)行(dst)←(SS:SP)(SP)←(SP)+23)POP出棧操作特點(diǎn):SS:SPSS:SP(dst)格74若執(zhí)行前:

(SS)=2000H(SP)=1000H(SS:SP)=1234H

(BX)=5678H123410低高20SS:SP2000:1000指令執(zhí)行前地址(BX)=5678h例:

POPBX123410低高20SS:SP2000:1002指令執(zhí)行后地址(BX)=1234h則執(zhí)行后:

(SS)=2000H(SP)=1002H

(SS:SP)=2010H(BX)=1234H

不變加2變變

若執(zhí)行前:75例:執(zhí)行下列程序段

PUSHAX

PUSHBX

MOVAX,66H③

MOVBX,99H④

POPBX

POPAX

⑥若執(zhí)行前(SS)=3000H(SP)=200EH(SS:SP)=1234H(AX)=0A0BH(BX)=0C0DH3000:200ESS:SP

執(zhí)行前(AX)=0A0B(BX)=0C0D3412執(zhí)行①后3000:200CSS:SP

0B0A3000:200ASS:SP

執(zhí)行②后0D0C0B0A3000:200CSS:SP

執(zhí)行⑤后:(BX)=0C0D0D0C0B0A執(zhí)行③④后(AX)=0066(BX)=0099執(zhí)行③④后(AX)=0066(BX)=00993000:200ASS:SP

執(zhí)行②后0D0C0B0A執(zhí)行⑥后:(AX)=0A0B3000:200ESS:SP

(BX)=0C0D執(zhí)行③④后(AX)=0066(BX)=00990D0C0B0A例:執(zhí)行下列程序段若執(zhí)行前3000:200ESS:SP執(zhí)行76用PUSH往SS段傳送一批數(shù)據(jù)后,再用POP取出時(shí),取出單元的順序與存放時(shí)的順序正好相反,“后進(jìn)先出”⑥POPAX(AX)=0A0B①PUSHAX3000:200ESS:SP

執(zhí)行前3000:200CSS:SP

3000:200ASS:SP

②PUSHBX3000:200ESS:SP

3000:200CSS:SP

0D0C0B0A3412⑤POPBX(BX)=0C0D(AX)=0A0B(BX)=0C0D④MOVAX,0066(BX)=0099③MOVAX,0066

(AX)=0066

用PUSH往SS段傳送一批數(shù)據(jù)后,再用POP取出時(shí),⑥PO77堆棧是一個(gè)內(nèi)存區(qū)域。通常用于存放一些重要數(shù)據(jù),如程序的地址、或是需要恢復(fù)的數(shù)據(jù)。SS:SP

為方便數(shù)據(jù)的存放和恢復(fù),設(shè)置專(zhuān)門(mén)的指針,指向堆棧中要操作的單元。段值由SS給出,偏移地址由SP給出

SS→堆棧段寄存器(stacksegment)SP→堆棧指針寄存器(stackpoint)堆棧的概念stackSS:SP為方便數(shù)據(jù)的存放和恢復(fù),堆棧的概念stack78堆棧操作指令PUSH和POP,對(duì)SS和SP指向的內(nèi)存單元,以“后進(jìn)先出”方式進(jìn)行操作。

PUSH→入棧操作SP減小

POP→出棧操作SP增加

SP指向棧頂,即堆棧的頂部,

編程員通過(guò)設(shè)置堆棧區(qū)域,利用堆棧操作,可方便的進(jìn)行數(shù)據(jù)的存放和恢復(fù)。SS:SP

SS:0000SS:FFFF堆棧未用空間堆棧操作指令PUSH和POP,SS:SPSS:0079堆棧使用的場(chǎng)合用堆棧保存恢復(fù)信息(如上例)子程序的調(diào)用、返回以及中斷調(diào)用、返回(控制轉(zhuǎn)移指令中介紹)用堆棧傳送數(shù)據(jù)(程序設(shè)計(jì)中介紹)堆棧使用的場(chǎng)合80注意事項(xiàng)

堆棧是一重要數(shù)據(jù)結(jié)構(gòu),使用堆棧應(yīng)有明確目的。不亂用堆棧操作,不亂修改堆棧內(nèi)容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET

亂修改SS和SP的內(nèi)容包括亂用BP參與的存儲(chǔ)器操作數(shù)

亂用指令注意事項(xiàng)PUSH、POP、PUSHF、POPF、81PUSH和POP指令只能對(duì)字操作。PUSHALPOPBYTEPTR[BX]

可以對(duì)段寄存器操作但POP不能對(duì)CS操作PUSHDSPUSHCSPOPES

POPCSPUSH和POP指令只能對(duì)字操作。824)XCHG交換指令(自學(xué))

格式

XCHGoprd1,oprd2執(zhí)行

(oprd1)(oprd2)regregregmemmemreg

可實(shí)現(xiàn)4)XCHG交換指令(自學(xué))reg83例XCHGAX,BX字操作執(zhí)行前(AX)=1122H(BX)=3344H執(zhí)行后(AX)=3344H(BX)=1122H

例XCHGAH,BL字節(jié)操作執(zhí)行前(AX)=1122H(BX)=3344H執(zhí)行后(AX)=4422H(BX)=3311H例XCHGAX,BX字操作84XCHGoprd1,oprd2注意事項(xiàng):

雙操作數(shù)指令可進(jìn)行字或字節(jié)操作不允許對(duì)立即數(shù)、段寄存器做操作數(shù)XCHGAX,4

XCHGBX,DSXCHGoprd1,oprd2852.

地址傳送指令LEA、LDS、LESLEA有效地址傳送格式LEAreg,mem執(zhí)行(reg)←mem的EA即寄存器←存儲(chǔ)器操作數(shù)的偏移地址

2.地址傳送指令LEA、LDS、LESLEA有效地址傳送86執(zhí)行后(BX)=1000H注意:

OFFSET是匯編程序提供的一個(gè)操作符,不是CPU的指令LEABX,buffer例

buffer是一個(gè)符號(hào)地址表示的內(nèi)存操作數(shù)(變量)。…...12h34h56h…...buffer內(nèi)存DS:1000h若變量buffer的偏移地址=1000H等價(jià)于MOVBX,OFFSETbuffer執(zhí)行后(BX)=1000H注意:LEA87buffer

1A2B3C4D、、、、、、例

將buffer為首的4個(gè)字節(jié)內(nèi)存內(nèi)容相加,存放在A(yíng)L中。MOVAX,SEGbufferMOVDS,AX

LEABX,bufferMOVCX,4MOVAL,0exit:ADDAL,[BX]INCBXDECCX;(cx)=(cx)-1JNZexit;ZF≠0,轉(zhuǎn)至exit說(shuō)明:1)操作符SEG的作用是取變量的段地址。執(zhí)行完前兩條指令后,(DS)=buffer的段值2)操作符OFFSET的作用是取變量的偏移地址執(zhí)行完LEABX,buffer,(BX)為buffer的偏移地址,

3)操作數(shù)[BX]是以DS為段值,BX為偏移值的內(nèi)存單元buffer1A2B3C4D、、、、、、例將b88LEAreg,mem特點(diǎn)及注意事項(xiàng):目的操作數(shù)reg應(yīng)是16位通用寄存器LEAES,[BX]LEAAL,bufferLEA6,[BX+SI]LEA[DI],buffer源操作數(shù)應(yīng)是存儲(chǔ)器操作數(shù)LEABX,AX傳送的是內(nèi)存單元的有效地址,與其內(nèi)容無(wú)關(guān)?!?..12h34h56h…...buffer內(nèi)存LEAreg,mem…...buffer內(nèi)存893.標(biāo)志傳送PUSHF、POPF、LAHF、SAHFSS:SP

SS:SP

(PSW)2)POPF標(biāo)志出棧格式POPF執(zhí)行(PSW)←(SS:SP)(SP)←(SP)+2SS:SP

SS:SP

(PSW)1)PUSHF標(biāo)志入棧格式PUSHF執(zhí)行(SP)←(SP)-2(SS:SP)←(PSW)3.標(biāo)志傳送PUSHF、POPF、LAHF、SAHF90特點(diǎn)及注意事項(xiàng):無(wú)操作數(shù)的形式,操作數(shù)隱含為(PSW)PUSHFAXPOPFCXPUSHF和POPF用于標(biāo)志信息的保存和恢復(fù)特點(diǎn)及注意事項(xiàng):91三.算術(shù)運(yùn)算指令指令分類(lèi):三.算術(shù)運(yùn)算指令指令分類(lèi):92特點(diǎn):帶符號(hào)數(shù)用補(bǔ)碼表示如MOVAX,-1等價(jià)于MOVAX,0FFFFh

對(duì)加、減運(yùn)算,不區(qū)分無(wú)符號(hào)數(shù)、帶符號(hào)數(shù)(參見(jiàn)第一章例)對(duì)乘、除運(yùn)算,區(qū)分無(wú)符號(hào)數(shù)、帶符號(hào)數(shù)可進(jìn)行字節(jié)或字操作影響狀態(tài)標(biāo)志十進(jìn)制運(yùn)算方法(不做重點(diǎn),講義中做了簡(jiǎn)單介紹)當(dāng)數(shù)據(jù)用壓縮或非壓縮BCD碼表示時(shí),為使運(yùn)算的結(jié)果仍為BCD碼表示,需對(duì)結(jié)果進(jìn)行調(diào)整。

十進(jìn)制運(yùn)算=二進(jìn)制運(yùn)算+十進(jìn)制調(diào)整

特點(diǎn):93BCD碼(BinaryCodedDecimal)

用二進(jìn)制編碼表示十進(jìn)制數(shù)。常用8421BCD碼,與十進(jìn)制數(shù)碼對(duì)應(yīng)關(guān)系:例48的BCD碼為(01001000)BCD

BCD碼(BinaryCodedDecimal)94根據(jù)在內(nèi)存的存放形式,分壓縮BCD碼和非壓縮BCD碼1)壓縮BCD碼一字節(jié)存放2個(gè)BCD碼。

如2148的壓縮BCD碼為:(00100001

01001000)壓縮BCD在內(nèi)存中占2字節(jié)2)非壓縮BCD碼一字節(jié)存放1個(gè)BCD碼。

如2148的非壓縮BCD碼為:(00000010

00000001

00000100

00001000)

非壓縮BCD

在內(nèi)存中占4字節(jié)根據(jù)在內(nèi)存的存放形式,分壓縮BCD碼和非壓縮BCD碼95當(dāng)數(shù)據(jù)用壓縮或非壓縮BCD碼表示時(shí),為使運(yùn)算的結(jié)果仍為BCD碼表示,需對(duì)結(jié)果進(jìn)行調(diào)整。

十進(jìn)制運(yùn)算=二進(jìn)制運(yùn)算+十進(jìn)制調(diào)整例

(00001000)

壓縮BCD

+(00001001)

壓縮BCD

=(00010111)

壓縮BCD計(jì)算機(jī)計(jì)算過(guò)程看作壓縮BCD0000100008+0000100109

0001000111

二進(jìn)制運(yùn)算十進(jìn)制調(diào)整+00000110

0001011117當(dāng)數(shù)據(jù)用壓縮或非壓縮BCD碼表示時(shí),例(00001000961.加法運(yùn)算指令

ADD、ADC為雙操作數(shù)指令I(lǐng)NC為單操作數(shù)指令除INC指令不影響CF外,6個(gè)狀態(tài)標(biāo)志均據(jù)結(jié)果設(shè)置ADC帶進(jìn)位加法,實(shí)現(xiàn)字以上運(yùn)算1.加法運(yùn)算指令A(yù)DD、ADC為雙操作數(shù)指令A(yù)DC帶進(jìn)位97CFA1H

1100111110100001+62A0H+0110001010100000111111111113241H

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論