高校課件微機(jī)原理第三章_第1頁(yè)
高校課件微機(jī)原理第三章_第2頁(yè)
高校課件微機(jī)原理第三章_第3頁(yè)
高校課件微機(jī)原理第三章_第4頁(yè)
高校課件微機(jī)原理第三章_第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)介

多種計(jì)算機(jī)語(yǔ)言比較

機(jī)器語(yǔ)言

用機(jī)器碼表達(dá),例如B8H、C3H。

匯編語(yǔ)言

用指令助記符表達(dá)機(jī)器碼,例如對(duì)應(yīng)于機(jī)器碼B8H、C3H助記符為MOVAX,BX。CPU不一樣,機(jī)器碼不一樣,助記符也不一樣。

高級(jí)語(yǔ)言

語(yǔ)言規(guī)范,可移植。第三章8086/8088指令系統(tǒng)1/127匯編語(yǔ)言指令構(gòu)造語(yǔ)法構(gòu)造符合人類(lèi)語(yǔ)言共同特點(diǎn)——?jiǎng)幼鳎珜?duì)象指令操作碼→動(dòng)作:做什么?指令操作數(shù)→對(duì)象:針對(duì)什么做動(dòng)作?機(jī)器指令:指令二進(jìn)制代碼形式。如89D8H匯編指令:助記符形式指令。如:MOVAX,BX2/127匯編語(yǔ)言指令操作碼助記符:與動(dòng)作一一對(duì)應(yīng)例: MOVAX,BX目/源操作數(shù):操作對(duì)象3/127第三章8086/8088指令系統(tǒng)一、指令格式與尋址方式二、數(shù)據(jù)傳送類(lèi)指令三、算術(shù)運(yùn)算指令四、邏輯運(yùn)算指令五、移位指令六、串操作指令七、控制轉(zhuǎn)移指令八、處理器控制指令4/127一、指令格式與尋址方式

指令(Instruction)是批示CPU執(zhí)行某種操作命令;指令系統(tǒng)(InstructionSet)是某一CPU所能執(zhí)行所有指令集合,也稱(chēng)為指令集;

8086/8088指令系統(tǒng)完全相同。指令是組成程序基礎(chǔ),程序是指令有序組合,CPU執(zhí)行程序就是執(zhí)行一條條指令。1、指令格式2、尋址方式5/1271、指令格式(1)操作碼指定CPU執(zhí)行某種操作,如傳送、運(yùn)算等;(2)操作數(shù)為參與操作數(shù)據(jù),如寄存器中數(shù)據(jù)或內(nèi)存單元中數(shù)據(jù)等。①包括一種操作數(shù)指令稱(chēng)為單操作數(shù)指令;②包括兩個(gè)操作數(shù)指令稱(chēng)為雙操作數(shù)指令;③在指令執(zhí)行過(guò)程中使用操作數(shù),保持原值不變稱(chēng)為源操作數(shù);④不保存原值而將處理成果存入其中稱(chēng)為目標(biāo)操作數(shù)。

操作碼操作數(shù)一條指令一般包括兩部分:操作碼和操作數(shù)。格式:6/1272、尋址方式(AddressingMode)

(1)指令尋址方式指令一般是次序寄存,因此只要通過(guò)對(duì)指令指針I(yè)P自動(dòng)加1,便形成下條指令地址;只有當(dāng)遇到轉(zhuǎn)移指令或調(diào)用指令時(shí),根據(jù)轉(zhuǎn)移目標(biāo)去修改IP或CS。(2)操作數(shù)尋址方式所謂操作數(shù)尋址方式,就是尋找指令中所需操作數(shù)辦法。7/1272、尋址方式(AddressingMode)

給出操作數(shù)也許方式:1)由操作碼隱含地指定2)由指令直接給出操作數(shù)3)寄存于CPU內(nèi)部寄存器中4)寄存于存放器單元內(nèi)。這時(shí)指令中給出是操作數(shù)所在單元地址,或者是產(chǎn)生該地址計(jì)算辦法;5)來(lái)自I/O端口8/1272、尋址方式(AddressingMode)1)由操作碼隱含地指定2)由指令直接給出操作數(shù)3)寄存于CPU內(nèi)部寄存器中4)寄存于存放器單元內(nèi)。5)來(lái)自I/O端口9/127(1)隱含尋址指令中不指明操作數(shù),隱含在操作碼中。如:乘法指令MULBX;(DX,AX)←(AX)×(BX)乘法是雙操作數(shù)指令,但指令中給出單操作數(shù)(BX中數(shù)),另一操作數(shù)隱含在AX中,同樣乘積要寄存地址也是隱含。

其實(shí)該類(lèi)尋址也是背面尋址中某種,上述指令就屬于寄存器尋址。10/127(2)立即(數(shù))尋址

當(dāng)操作數(shù)就在指令中時(shí),稱(chēng)為立即(數(shù))尋址。這種操作數(shù)稱(chēng)為立即數(shù),8位或16位均可。如:①M(fèi)OVAL,12H說(shuō)明:這條指令功能就是將立即數(shù)12H傳送到寄存器AL中。執(zhí)行完該條指令后,AL=12H

這是一條雙操作數(shù)指令。其中:MOV就是操作碼,立即數(shù)12H稱(chēng)為源操作數(shù);寄存器AL稱(chēng)為目標(biāo)操作數(shù)。11/127(2)立即(數(shù))尋址

②MOVAX,1234H說(shuō)明:這條指令功能就是將立即數(shù)1234H傳送到寄存器AX中。執(zhí)行完該條指令后,AX=1234H12/127(3)寄存器尋址(SegmentAddressing)

當(dāng)操作數(shù)在寄存器中時(shí)為寄存器尋址(或稱(chēng)寄存器直接尋址)。如:

①M(fèi)OVAL,12H說(shuō)明:目標(biāo)操作數(shù)AL即為寄存器尋址。②MOVAX,BX說(shuō)明:這條指令功能就是將寄存器BX內(nèi)容傳送到寄存器AX中。執(zhí)行完該條指令后,AX內(nèi)容和BX內(nèi)容同樣,表達(dá)成AX=BX;13/127存放器尋址(MemoryAddressing)

當(dāng)操作數(shù)在內(nèi)存中時(shí)為內(nèi)存尋址,稱(chēng)其為內(nèi)存操作數(shù)。注意:一條指令中只允許有一種內(nèi)存操作數(shù)!內(nèi)存尋址時(shí),指令中給出是操作數(shù)有效地址EA或產(chǎn)生EA計(jì)算方式。

EA即是邏輯地址中偏移地址,物理地址PA=段基址×16+EA,EA=BX/BP(基址)+SI/DI(變址)+8/16位位移量。14/127內(nèi)存尋址(MemoryAddressing)(4)直接尋址(5)寄存器間接尋址(6)寄存器相對(duì)尋址(7)基址變址尋址(8)相對(duì)基址變址尋址15/127內(nèi)存尋址(4)直接尋址方式操作數(shù)寄存在存放器單元中,由指令直接給出該單元有效地址EA(即16位段內(nèi)偏移量)。例:MOVAX,[0016H]

尋址過(guò)程示意(5)寄存器間接尋址方式

操作數(shù)寄存在存放器單元中,指令給出16位寄存器值就是該單元EA。

例:MOV[BX],CL

尋址過(guò)程示意必須使用BX、BP、SI、DI16/127直接尋址過(guò)程示意圖DS(默認(rèn)段)值0000ES值0000SS值0000CS值0000Bit19430+)0016H:000000000001011020位物理地址……××××MemoryMOVAX,[0016H]AHAL17/127寄存器間接尋址過(guò)程示意圖MOV[BX],CL(設(shè)BX原值為2023H)DS(BX、SI、DI默認(rèn)段)0000ES0000SS(BP默認(rèn)段)0000CS0000Bit19430+)BX:001000000001000020位物理地址……××Memory18/127段寄存器使用規(guī)則直接尋址、使用BX、SI、DI間接尋址使用BP間接尋址堆棧操作源串指針目標(biāo)串指針指令指針默認(rèn)段寄存器DSSSSSDSESCS可加段超越前綴ES:SS:CS:DS:ES:CS:—ES:SS:CS:——固定搭配寄存器SPSIDIIP19/127

段超越前綴段超越前綴形式為:段寄存器名:例如:當(dāng)操作數(shù)在內(nèi)存單元時(shí),系統(tǒng)根據(jù)隱含商定,自動(dòng)將寄存器DS或SS值作為段地址。然而,當(dāng)操作數(shù)段地址不在隱含段寄存器時(shí),能夠使用段超越前綴取代其隱含商定。MOVAX,ES:[BP];段地址在ESMOVAX,CS:[BX][SI];段地址在CS20/127(6)寄存器相對(duì)尋址方式使用基址寄存器(BX或BP)、并帶位移量間接尋址。操作數(shù)EA=BX或BP值+位移量。例:MOVDL,[BP+2]其他等效寫(xiě)法:MOVDL,[BP]2MOVDL,2[BP]21/127MOVDL,[BP+2](設(shè)BP原值為4000H)DS(BX默認(rèn)段)值0000ES值0000SS(BP默認(rèn)段)值0000CS值0000Bit19430BP:0100000000000000+)位移量:000000000000001020位物理地址……××Memory22/127MOV[SI]10,AH(設(shè)SI原值為008CH)DS(SI、DI默認(rèn)段)值0000ES值0000SS值0000CS值0000Bit19430SI:0000000010001100+)位移量:000000000000101020位物理地址……××Memory23/127(7)基址變址尋址有效地址EA由基址寄存器和變址寄存器組成。如:MOVAL,[BX+SI] ;EA=BX+SI或MOVAL,[BX][SI] ;EA=BX+SI通式:例見(jiàn)圖3-5EA=DISI+BPBX注意:求物理地址辦法與內(nèi)存尋址中直接尋址辦法同樣。注意對(duì)應(yīng)段!24/127(8)相對(duì)基址變址尋址方式EA由基址寄存器、變址寄存器和位移量組成。操作數(shù)EA=BX或BP值+SI或DI值+位移量(8位或16位)。例:MOV[BX+DI+4],CX其他等效寫(xiě)法:MOV[BX+DI]4,CXMOV4[BX+DI],CXMOV[BX][DI]4,CXMOV4[BX][DI],CX尋址過(guò)程示意25/127MOV[BX+DI+4],CX(設(shè)BX原值為1000H,DI原值為0300H)DS(BX默認(rèn)段)值0000ES值0000SS(BP默認(rèn)段)值0000CS值0000Bit19430BX:0001000000000000DI:0000001100000000+)位移量:000000000000010020位物理地址……××××MemoryCHCL26/127例題1、指出各指令中源操作數(shù)和目標(biāo)操作數(shù)尋址方式,并說(shuō)明操作數(shù)類(lèi)型(字節(jié)或字?jǐn)?shù)據(jù))。(1)MOVSI,1000H答:源操作數(shù)是立即數(shù)尋址;目操作數(shù)是寄存器尋址;傳送是字?jǐn)?shù)據(jù)。27/127例題(2)MOVBL,[1000H]答:源操作數(shù)是內(nèi)存尋址中直接尋址EA=1000H;目操作數(shù)是寄存器尋址;傳送是字節(jié)數(shù)據(jù)。28/127例題(3)MOV[BX+0100H],CX答:源操作數(shù)是寄存器尋址;目標(biāo)操作數(shù)是內(nèi)存尋址中寄存器相對(duì)尋址,EA=BX+0100H;傳送是字?jǐn)?shù)據(jù)。29/127例題(4)MOVBYTEPTR[BX][SI],100答:源操作數(shù)是立即數(shù)尋址,十進(jìn)制數(shù)100;目操作數(shù)是內(nèi)存尋址中基址變址尋址,EA=BX+SI;傳送是字節(jié)數(shù)據(jù)。說(shuō)明:斜體字是偽指令,表達(dá)是字節(jié)30/127例題(5)MOVAX,[BX+DI+0004H]答:源操作數(shù)是內(nèi)存尋址中相對(duì)基址變址尋址,EA=BX+DI+0004H;目操作數(shù)是寄存器尋址;傳送是字?jǐn)?shù)據(jù)。31/127二、數(shù)據(jù)傳送類(lèi)指令1、通用數(shù)據(jù)傳送指令2、地址傳送指令3、狀態(tài)標(biāo)志傳送指令32/1271、通用數(shù)據(jù)傳送指令(1)MOV指令

(2)PUSH和POP指令(3)交換指令XCHG(4)換碼指令XLAT33/127(1)MOV指令

是基本傳送類(lèi)指令,實(shí)現(xiàn)字或字節(jié)數(shù)據(jù)復(fù)制。指令格式:MOVdst,src指令功能:將源操作數(shù)src,傳送到目標(biāo)操作數(shù)dst中。如:MOV

AL,12H功能:執(zhí)行指令就是將立即數(shù)12H傳送到AL中,執(zhí)行完指令后AL=12H。34/127(1)MOV指令MOV傳送類(lèi)指令能夠?qū)崿F(xiàn)六種形式傳送:①立即數(shù)送寄存器;如:MOVBX,1122H;BX=1122H②立即數(shù)送存放單元;如:MOV[BX],1122H;將1122H送到EA=BX內(nèi)存單元中。35/127(1)MOV指令③通用寄存器之間傳送;如:MOVBX,AX ;BX=AX

MOVAL,AH ;AL=AH④通用寄存器和段寄存器之間傳送;如:MOVDS,AX ;DS=AX

MOVAX,ES ;AX=ES36/127(1)MOV指令⑤通用寄存器和存放單元之間傳送;如:MOVAL,[BX];將EA=BX內(nèi)存單元;內(nèi)容送寄存器ALMOV[1400H],BX;將BX內(nèi)容送;EA=1400內(nèi)存單元⑥段寄存器和存放單元之間傳送。如:MOV[1400H],CS;將CS內(nèi)容送EA=1400;內(nèi)存單元

MOVDS,[BX] ;將EA=BX內(nèi)存單元內(nèi)容;送DS37/127例題設(shè)DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令執(zhí)行后值。(1)MOVAX,1352HAX=?答:AX=1352H38/127設(shè)DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令執(zhí)行后值。(2)MOVAX,[1352H]AX=?答:EA=1352H,DS=1000H,內(nèi)存單元地址=DS×10H+EA=11352H,因此,AX=26FFH39/127設(shè)DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令執(zhí)行后值。(3)MOV0150H[BX],CH(11350H)=?(11351H)=?答:由于EA=BX+0150H=1350H,CH=33H,內(nèi)存單元地址=DS×10H+1350H=11350H,因此,(11350H)=33H,(11351H)=3CH40/127設(shè)DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21350H)=88H,(21351H)=51H,求下列各指令執(zhí)行后值。(4)MOVAX,0150H[BP]AX=?答:由于EA=BP+0150H=1350H,內(nèi)存單元地址=SS×10H+1350H=21350H因此,AX=5188H41/127使用MOV注意點(diǎn)(1)兩個(gè)操作數(shù)類(lèi)型必須一致;(2)兩個(gè)操作數(shù)不能同步為存放器操作數(shù);(3)不能用CS做目標(biāo)操作數(shù);(4)不允許用立即數(shù)做目標(biāo)操作數(shù);(5)不允許用立即數(shù)直接向段寄存器傳送數(shù)據(jù);(6)不允許在段寄存器之間直接傳送數(shù)據(jù);傳送指令不影響標(biāo)志位!42/127兩個(gè)操作數(shù)不能同步都是存放器操作數(shù)

如圖所示,假如想將(21233H)內(nèi)容傳送到(21235H),必須通過(guò)寄存器中轉(zhuǎn)。通過(guò)兩條指令實(shí)現(xiàn):MOVAH,[1233]21233H20230H目前數(shù)據(jù)段A1H21235HFFH內(nèi)存單元地址內(nèi)存單元內(nèi)容21234HAH…………FFHFFHMOV[1235],AH43/127(2)PUSH和POP指令(堆棧操作指令)

堆棧段是用來(lái)保存數(shù)據(jù)和地址一種存放區(qū)。堆棧段寄存器用SS表達(dá),堆棧段棧頂指針是SP(隱含)。SS:SP由于堆棧段只有一種出入口,堆棧操作按先入后出方式工作。①入棧指令PUSH②出棧指令POP不影響標(biāo)志位!44/127堆棧操作入棧:先修改棧頂指針(SP減1),將入棧數(shù)據(jù)高字節(jié)存入棧頂;再次修改指針(SP減1),將低字節(jié)存入棧頂,SP指向棧頂,在入棧前基礎(chǔ)上-2。出棧:先將棧頂單元內(nèi)容存入目標(biāo)字低字節(jié)中,修改棧頂指針(SP加1);再將目前棧頂單元內(nèi)容存入目標(biāo)字高字節(jié)中,并修改指針(SP加1),SP指向棧頂,在出棧前基礎(chǔ)上+2。45/127①入棧指令PUSH指令格式:PUSHsrc指令功能:SP←SP-1(隱含操作),將字?jǐn)?shù)據(jù)src高字節(jié)送到EA=SP堆棧段內(nèi),SP←SP-1,將字?jǐn)?shù)據(jù)src低字節(jié)送到EA=SP堆棧段內(nèi);如:PUSHAX46/127①入棧指令PUSH指令PUSHAX執(zhí)行情況47/127②出棧指令POP指令格式:POPdst指令功能:先將棧頂單元EA=SP內(nèi)容存入目標(biāo)字低字節(jié)中,修改棧頂指針(SP+1);再將目前棧頂單元內(nèi)容存入目標(biāo)字高字節(jié)中,并修改指針(SP+1),SP指向棧頂,在出棧前基礎(chǔ)上+2。如:POPAX48/127出棧操作示例設(shè)有(SS)=3200H,(SP)=07FEH(SP)=(SP)+1→32800HPOPAX(SP)=(SP)+1→327FFH(SP)=07FEH→327FEH……Stack10H5CH(SP)=0800H(AX)=105CHAHAL49/127設(shè)DS=1000H,SS=2023H,AX=1A2BH,BX=1200H,CX=339AH,BP=1200H,SP=1352H,SI=1354H,(11350H)=0A5H,(11351H)=3CH,(11352H)=0FFH,(11353H)=26H,(11354H)=52H,(11355H)=0E7H,(126A4H)=9DH,(126A5H)=16H,(21352H)=88H,(21353H)=51H,求下列各指令執(zhí)行后值。(1)POPAXAX=?SP=?答:出棧指令先傳送字?jǐn)?shù)據(jù),由于SP=1352H,SS=2023H,字地址=SS×10H+SP=21352H,因此,AX=5188H,再修改SP=SP+2=1354H50/127(3)XCHG指令指令格式:XCHGdst,src指令功能:dstsrc,8位、16位均可如:XCHGAX,BXXCHGCL,[BX+DI]不影響標(biāo)志位!注意:①交換能夠在通用寄存器之間,通用寄存器與存放單元之間。②不能使用段寄存器和立即數(shù)。③不能在兩個(gè)存放單元之間進(jìn)行。51/127指令格式:XLAT[數(shù)據(jù)表首地址標(biāo)號(hào)]

;AL←[BX+AL]

指令功能:完成一種字節(jié)查表轉(zhuǎn)換。它將數(shù)據(jù)段中偏移地址為BX與AL寄存器之和存放單元內(nèi)容送入AL寄存器。在使用該指令時(shí),應(yīng)首先在數(shù)據(jù)段中建立一種長(zhǎng)度不大于256B表格,表首地址置于BX中,AL中寄存查找對(duì)象在表中相對(duì)于表首距離。指令執(zhí)行后,所查找對(duì)象存于AL中,BX內(nèi)容保持不變。(4)換碼指令(查表指令)XLAT(Translate)52/127指令形式XLAT[數(shù)據(jù)表首地址標(biāo)號(hào)]應(yīng)用舉例TABDB0,1,4,9,16,25,36,49,64,81 ;數(shù)據(jù)段中以TAB為首地址定義字

;節(jié)表,數(shù)目≤255……MOVBX,OFFSETTABMOVAL,4XLATTAB指令執(zhí)行后,(AL)=16。分析運(yùn)算符:求地址實(shí)現(xiàn)什么功能?53/1272、地址傳送指令

地址傳送指令主要用來(lái)將地址指針裝入有關(guān)寄存器。(1)裝入有效地址指令(2)裝入數(shù)據(jù)段寄存器指令(3)裝入附加段寄存器54/127(1)裝入有效地址指令(LoadEffectiveAddress)

指令格式:LEAdst,src指令功能:dst(通用寄存器)←EASrC這條指令用來(lái)將源操作數(shù)(內(nèi)存操作數(shù))有效地址EA裝入通用寄存器。源操作數(shù)必須是存放單元地址,目標(biāo)操作數(shù)必須是16位通用寄存器。傳送地址不是數(shù)據(jù)。不影響標(biāo)志位。①LEAAX,[1000H]執(zhí)行指令后,AX=1000H;②LEAAX,[BX]執(zhí)行指令后,AX=BX;(注意區(qū)分:MOVAX,[BX])55/127(2)裝入數(shù)據(jù)段寄存器指令

(LoadDataSegmentRegister)

指令格式:LDSdst,src例:已知DS=1000H,(11500H)=2345H,(11502H)=ABCDH請(qǐng)問(wèn),執(zhí)行指令LDSSI,[1500H],SI=?DS=?答:源操作數(shù)1500H偏移地址對(duì)應(yīng)物理地址為1000H×10H+1500H=11500H,將低字2345H送給SI,將ABCDH送給DS,因此SI=2345H,DS=ABCDH56/127(2)裝入數(shù)據(jù)段寄存器指令

(LoadDataSegmentRegister)

指令格式:LDSdst,src

指令功能:這條指令用來(lái)將源操作數(shù)指定內(nèi)存中雙字?jǐn)?shù)據(jù)(4個(gè)字節(jié)),低位字裝入目標(biāo)操作數(shù)(通用寄存器,目標(biāo)操作數(shù)必須是16位通用寄存器),高位字裝入數(shù)據(jù)段寄存器DS。源操作數(shù)必須是存放單元地址,目標(biāo)操作數(shù)必須是16位通用寄存器。57/127(3)裝入附加段寄存器

(LoadExtraSegmentRegister)

指令格式:LESdst,src指令功能:src給出是有效地址,低字送dst,高字送ES。此指令與LDS指令功能基本相同,不一樣是高字送ES,而不是DS。58/1273、狀態(tài)標(biāo)志傳送指令(1)標(biāo)志位裝入寄存器AH指令(2)寄存器AH送標(biāo)志寄存器指令(3)標(biāo)志寄存器進(jìn)棧指令(4)標(biāo)志寄存器出棧指令59/127(1)標(biāo)志位裝入寄存器AH指令不影響標(biāo)志位。ZFSFCF×AF×PF×指令格式:LAHF指令功能:將標(biāo)志寄存器低8位送AH。即60/127(2)寄存器AH送標(biāo)志寄存器指令

指令格式:SAHF指令功能:將寄存器AH值送標(biāo)志寄存器低字節(jié)。即設(shè)置SF、ZF、AF、PF和CF值。ZFSFCF×AF×PF×61/127(3)標(biāo)志寄存器進(jìn)棧指令指令格式:PUSHF指令功能:SP←SP-2;將16位標(biāo)志寄存器值入棧;不影響標(biāo)志位。62/127(4)標(biāo)志寄存器出棧指令指令格式:POPF指令功能:先將EA=SP所指內(nèi)存字送標(biāo)志寄存器;SP+2→SP。標(biāo)志位發(fā)生變化。63/127數(shù)據(jù)傳送指令小結(jié)源、目操作數(shù)長(zhǎng)度必須一致。源、目操作數(shù)不能同步是存放器操作數(shù)。源、目操作數(shù)不能同步是段寄存器。立即數(shù)和代碼段寄存器CS不能作目標(biāo)操作數(shù)。當(dāng)目操作數(shù)是段寄存器時(shí),源操作數(shù)不能是立即數(shù)。能夠使用段寄存器指令:MOV、PUSH、POP。除XCHG指令外,其他數(shù)傳指令僅變化目標(biāo)操作數(shù),源操作數(shù)保持不變。除SAHF、POPF指令外,其他數(shù)傳指令執(zhí)行不影響標(biāo)志位。對(duì)所有指令都適用!64/127三、算術(shù)運(yùn)算指令1、加法運(yùn)算指令2、減法運(yùn)算指令3、乘法運(yùn)算指令4、除法運(yùn)算指令65/1271、加法運(yùn)算指令(1)加法指令A(yù)DD(2)帶進(jìn)位加法指令A(yù)DC(3)加1指令I(lǐng)NC(4)壓縮BCD碼加法調(diào)整指令DAA(5)非壓縮BCD碼加法調(diào)整指令A(yù)AA66/127(1)加法指令A(yù)DD指令格式:ADDdst,src指令功能:(dst)←

(dst)+(src)所有標(biāo)志位隨運(yùn)算成果發(fā)生變化。如:

①ADDAX,3A5FH;AX+3A5FH→AX②ADDAL,[BX];將EA=BX內(nèi)存單元;內(nèi)容+AL→AL③ADD[BX],AX;將EA=BX內(nèi)存內(nèi)容;+AX→該內(nèi)存單元67/127(2)帶進(jìn)位加法指令A(yù)DC指令格式:ADCdst,src指令功能:(dst)←(dst)+(src)+CF所有標(biāo)志位隨運(yùn)算成果變化。如:①ADCAX,BX;AX←

AX+BX+CF②ADCAL,[BX];將EA=BX內(nèi)存單元;內(nèi)容+AL+CF→AL③ADC[BX],AX;將EA=BX內(nèi)存內(nèi)容+AX;+CF→該內(nèi)存單元68/127例1

設(shè)原AL=79H,BH=0B3H,求執(zhí)行指令A(yù)DDAL,BH后,AL=?BH=?各個(gè)標(biāo)志位值?解:79H=01111001B+)B3H=10110011B00101100B1因此,AL=00101100B=2CH,BH=0B3HSF=0,ZF=0,AF=0,PF=0,CF=1,OF=0。69/127例2求兩個(gè)雙字?jǐn)?shù)據(jù)相加。假設(shè)數(shù)據(jù)1在DX(高字)和AX(低字)內(nèi),為12345678H,數(shù)據(jù)2在BX(高字)和CX(低字)內(nèi),為6789ABCDH。解:由于8086/8088指令只能進(jìn)行字/字節(jié)運(yùn)算,因此對(duì)于雙字必須分兩步進(jìn)行。70/127求兩個(gè)雙字?jǐn)?shù)據(jù)相加。數(shù)據(jù)1在DX(高字)和AX(低字)內(nèi),為12345678H,數(shù)據(jù)2在BX(高字)和CX(低字)內(nèi),為6789ABCDH。解:由于8086/8088指令只能進(jìn)行字/字節(jié)運(yùn)算,因此對(duì)于雙字必須分兩步進(jìn)行。第一步,低字和低字相加:

ADDAX,CXAX=5678H+)CX=ABCDHAX=0245HCF=171/127第二步,高字和高字相加,同步考慮低字之和向高字進(jìn)位:ADCDX,BXDX=1234HBX=6789H+)CF=1DX=79BEHCF=0因此雙字之和是79BE0245H,CF=072/127解:因此,本題要求雙字相加,由兩條指令完成:ADDAX,CXADCDX,BX73/127(3)加1指令I(lǐng)NC指令格式:INCdst指令功能:(dst)←(dst)+1CF不受影響,其他標(biāo)志位隨運(yùn)算成果變化。如:①I(mǎi)NCAX;AX+1→AX②INCCL;CL←

CL+1③INC[BX];將EA=BX內(nèi)存單元內(nèi)容;+1→該內(nèi)存單元74/127(4)壓縮BCD碼加法調(diào)整指令DAA指令格式:DAA指令功能:對(duì)AL中壓縮BCD數(shù)加法成果自動(dòng)調(diào)整,分兩種情況進(jìn)行:①當(dāng)AL低4位>9或AF=1時(shí),AL+06H→AL,1→AF;②當(dāng)AL高4位>9或CF=1時(shí),AL+60H→AL,1→CF。成果影響AF、CF、PF、SF和ZF,對(duì)OF無(wú)定義。75/127例題已知兩個(gè)(十進(jìn)制數(shù))壓縮BCD碼AL=38H和BL=24H,對(duì)其求和。解:第一步ADDAL,BL38BCD=00111000B+)24BCD=00100100B01011100B(=5CH)62BCD顯然,執(zhí)行加法指令與實(shí)際成果不符合。76/127例題解:第二步DAA ;注意隱含操作, ;只對(duì)AL進(jìn)行調(diào)整01011100B(=5CH,則低4位>9)0110B(=06H)01100010B(=62H即為62BCD)+)

因此,對(duì)于壓縮BCD碼,在進(jìn)行加法運(yùn)算后,必須緊跟一條調(diào)整指令DAA,以確保計(jì)算成果正確。77/127例題兩個(gè)十進(jìn)制數(shù)78和56,對(duì)其求和。解:因此,對(duì)兩個(gè)壓縮BCD碼進(jìn)行加法,需要如下兩條指令完成:MOVAL,78HMOVBL,56HADDAL,BLDAA;對(duì)AL進(jìn)行調(diào)整78/127(5)非壓縮BCD碼加法調(diào)整指令A(yù)AA

指令格式:AAA指令功能:對(duì)AL中兩個(gè)非壓縮BCD碼加法成果進(jìn)行調(diào)整,使之成為正確成果。隱含操作數(shù)為AL和AH。調(diào)整辦法:當(dāng)AL低4位>9或AF=1時(shí),①AL+06H→AL,②將AL高4位清零,③AF置1,CF置1,AH+1→AH。

不然,僅將AL高4位清零。指令只影響AF和CF。對(duì)于非壓縮BCD碼,在進(jìn)行加法運(yùn)算后,必須緊跟一條調(diào)整指令A(yù)AA,以確保運(yùn)算成果正確性。79/127例:AL=00001001,CL=00001000執(zhí)行:ADDAL,CL;AL=00010001,AAA;希望得到AL=00000111,AH=0000000180/1272、減法指令(1)減法指令SUB(2)帶借位減法指令SBB(3)減1指令DEC(4)求補(bǔ)指令NEG(5)比較指令(6)壓縮BCD碼減法調(diào)整指令DAS(7)非壓縮BCD碼減法調(diào)整指令A(yù)AS81/127(1)減法指令SUB指令格式:SUBdst,src指令功能:(dst)←(dst)-(src)例如:①SUBAX,3A5FH;(AX)←(AX)-3A5FH②SUBAL,[BX];將AL-(EA=BX)內(nèi)存;單元內(nèi)容→AL③ADD[BX],AX;將EA=BX內(nèi)存內(nèi)容-AX;→該內(nèi)存單元82/127(2)帶借位減法指令SBB指令格式:SBBdst,src指令功能:(dst)←(dst)-(src)-CF如:SUBAL,BL;(AL)←(AL)-(BL)-CF83/127(3)減1指令DEC指令格式:DECdst指令功能:(dst)←(dst)-1

如:DECAX;(AX)←(AX)-184/127(4)求補(bǔ)指令NEG(取相反數(shù)指令)指令格式:NEGdst指令功能:(dst)←0-(dst)。影響所有狀態(tài)標(biāo)志SF、ZF、AF、PF、CF、OF

例如:NEGAX;設(shè)原AX=1122H,;執(zhí)行指令后AX=0-1122H ;AX=0EEDEH85/127

實(shí)質(zhì)上,NEG指令相稱(chēng)于將目操作數(shù)固定為0值SUB指令;執(zhí)行成果即取原數(shù)相反數(shù)。

特例:-18(80H)和-32768(8000H)執(zhí)行NEG指令內(nèi)容不變,但溢出標(biāo)志OF置1。由于執(zhí)行成果+128和+32768超出8位或16位帶符號(hào)數(shù)表達(dá)范圍。86/127(5)比較指令CMP指令格式:CMPdst,src指令功能:(dst)-(src),僅影響標(biāo)志位。見(jiàn)表3-3注意:目標(biāo)操作數(shù)和源操作數(shù)不發(fā)生變化。如:①CMPAH,00H;AH與0比較,成果影響標(biāo)志位②CMPAX,[BX];AX與EA=BX內(nèi)存單元字;比較,成果影響標(biāo)志位。87/12788/127(6)壓縮BCD碼減法調(diào)整指令DAS

指令格式:DAS指令功能:對(duì)兩個(gè)壓縮BCD碼十進(jìn)制數(shù)用SUB或SBB相減后成果(在AL中)進(jìn)行調(diào)整。在AL中得到正確壓縮BCD十進(jìn)制數(shù)成果。(類(lèi)似DAA)執(zhí)行該指令影響標(biāo)志位AF、CF、PF、SF、ZF.89/12790/127(7)非壓縮BCD碼減法調(diào)整指令A(yù)AS指令格式:AAS指令功能:對(duì)AL中兩個(gè)非壓縮BCD碼相減成果進(jìn)行調(diào)整。只影響AF和CF。(類(lèi)似DAA)91/127應(yīng)用時(shí)DAS、AAS指令必須緊跟在SUB或SBB之后。92/127例題

寫(xiě)出執(zhí)行下列計(jì)算指令序列。其中X,Y,Z,R,W均為寄存16位帶符號(hào)數(shù)單元地址。Z←W+(Z-X)解:MOVAX,[X];將EA=X內(nèi)存字?jǐn)?shù)據(jù)送入AXSUB[Z],AX;將EA=Z內(nèi)存字?jǐn)?shù)據(jù)減AX后;再送回該內(nèi)存。MOVAX,[W];將EA=W內(nèi)存字?jǐn)?shù)據(jù)送AXADD[Z],AX;求得成果93/1273、乘法指令(1)無(wú)符號(hào)數(shù)乘法指令MUL(2)帶符號(hào)數(shù)乘法指令I(lǐng)MUL(3)非壓縮BCD碼乘法調(diào)整指令94/127(1)無(wú)符號(hào)數(shù)乘法指令MUL指令格式:MULsrc指令功能:AX

←(src)×AL(src是字節(jié)數(shù)據(jù))

DX,AX

←(src)×AX(src是字?jǐn)?shù)據(jù))如:MULBL ;BL×AL→AXMULBX ;BX×AX→DX,AXMULBYTEPTR[SI];將EA=SI內(nèi)存單元;內(nèi)容(字節(jié))×AL→AXMULWOEDPTR[DI+50H];將EA=DI+50H內(nèi)存單元;內(nèi)容(字)×AX→DX,AX(2)帶符號(hào)數(shù)乘法指令I(lǐng)MUL

指令格式:IMULsrc

指令功能:當(dāng)參與運(yùn)算數(shù)據(jù)是帶符號(hào)數(shù)時(shí),用此命令,所有

指令功能與MUL相同。95/127①注意隱含操作?、诜秶簾o(wú)符號(hào)數(shù)0~255(字節(jié))或0~65535(字);帶符號(hào)數(shù)-128~+127(字節(jié))或-32768~+32767(字)③乘法指令執(zhí)行成果只對(duì)CF、OF故意義,其他標(biāo)志位無(wú)定義。字節(jié)運(yùn)算時(shí):其成果超出字節(jié)長(zhǎng)度成為字((AH)≠0),CF和OF置“1”;字運(yùn)算時(shí):成果超出字長(zhǎng)度成為雙字((DX)≠0),CF和OF置“1”。這樣就能夠用OF及CF來(lái)檢查和判斷字節(jié)或字操作成果。96/127(3)非壓縮BCD碼乘法調(diào)整指令指令格式:AAM指令功能:對(duì)AX內(nèi)兩個(gè)非壓縮BCD碼相乘成果進(jìn)行調(diào)整。①BCD碼總是當(dāng)無(wú)符號(hào)數(shù),非壓縮BCD碼十進(jìn)制數(shù)相乘只能用MUL(不用IMUL),AAM只能跟在MUL后。②兩個(gè)非壓縮BCD碼相乘,成果寄存在AX中,但只有AL中為有效數(shù)字(最大為81)。

調(diào)整過(guò)程:AL/10,將商(十位數(shù))放AH中,余數(shù)(個(gè)位數(shù))放AL中。例3-297/1274、除法指令(1)無(wú)符號(hào)數(shù)除法指令DIV(2)帶符號(hào)數(shù)除法指令I(lǐng)DIV(3)字節(jié)擴(kuò)展指令CBW(4)字?jǐn)U展成雙字指令CWD(5)非壓縮BCD碼除法調(diào)整指令A(yù)AD98/127(1)無(wú)符號(hào)數(shù)除法指令DIV指令格式:DIVsrc指令功能:兩個(gè)無(wú)符號(hào)數(shù)相除:①src是字節(jié)數(shù)據(jù),AX/(src)→AL(商),AH(余數(shù))②src是字?jǐn)?shù)據(jù),DX,AX/(src)→AX(商),DX(余數(shù))99/127(2)帶符號(hào)數(shù)除法指令I(lǐng)DIV指令格式:IDIVsrc指令功能:兩個(gè)帶符號(hào)數(shù)相除:①src是字節(jié)AX/(src)→AL(商),AH(余數(shù))②src是字DX,AX/(src)→AX(商),DX(余數(shù))100/127除法指令使用需要說(shuō)明:①源操作數(shù)不允許使用立即尋址方式。能夠?yàn)橥ㄓ眉拇嫫骰虼娣牌?。②除法指令?zhí)行后,標(biāo)志位無(wú)定義。③除數(shù)為零時(shí),則產(chǎn)生一種0類(lèi)型中斷。④8086/8088除法要求被除數(shù)位數(shù)是除數(shù)2倍,字節(jié)除法時(shí)被除數(shù)16位,字除法被除數(shù)32位。不然,無(wú)符號(hào)數(shù)將高位補(bǔ)零;符號(hào)數(shù)將按被除數(shù)符號(hào)位進(jìn)行擴(kuò)展:正數(shù)高位部分補(bǔ)0,負(fù)數(shù)高位部分補(bǔ)1。為此,8086/8088提供專(zhuān)門(mén)符號(hào)擴(kuò)展指令。101/127(3)字節(jié)擴(kuò)展指令CBW指令格式:CBW指令功能:將AL擴(kuò)展到AX(為除法指令做準(zhǔn)備)。①當(dāng)AL最高位是0,則AH=00H;②當(dāng)AL最高位是1,則AH=0FFH。102/127(4)字?jǐn)U展成雙字指令CWD指令格式:CWD指令功能:將AX擴(kuò)展到DX,AX(為除法指令做準(zhǔn)備):①當(dāng)AX最高位是0,則DX=0000H;②當(dāng)AX最高位是1,則DX=0FFFFH。例3-3103/127(5)非壓縮BCD碼除法調(diào)整指令A(yù)AD指令格式:AAD指令功能:對(duì)AX中非壓縮BCD碼被除數(shù)進(jìn)行調(diào)整,確保成果正確(在除法指令DIV前)。同乘法不一樣,十進(jìn)制除法運(yùn)算指令要先進(jìn)行調(diào)整,再按二進(jìn)制進(jìn)行除法運(yùn)算。調(diào)整:(AL)←(AH)×10+(AL)(AH)←00104/127應(yīng)用舉例:36÷9=4MOVAX,0306H;AX中是兩個(gè)非壓縮BCD碼MOVBL,9AAD ;(AH)×10+(AL)=0024H→(AX) ;(SF)=0,(ZF)=0,(PF)=1DIVBL ;(AL)=4,(AH)=0105/127四、邏輯運(yùn)算指令1、“與”運(yùn)算指令A(yù)ND2、“或”運(yùn)算指令OR3、異或”運(yùn)算指令XOR5、測(cè)試指令TEST106/1271、“與”運(yùn)算指令A(yù)ND指令格式:ANDdst,src指令功能:(dst)∧(src)→(dst)

對(duì)源操作數(shù)和目標(biāo)操作數(shù)按位進(jìn)行“與”運(yùn)算,影響標(biāo)志位(AF無(wú)定義,CF=0,其他視詳細(xì)情況)。如:①ANDAL,80H;AL∧80H→AL②ANDAX,[BX];將EA=BX內(nèi)存單元字;內(nèi)容∧AX→AX107/1272、“或”運(yùn)算指令OR指令格式:ORdst,src指令功能:(dst)∨(src)→(dst)

對(duì)源操作數(shù)和目標(biāo)操作數(shù)按位進(jìn)行“或”運(yùn)算,影響標(biāo)志位(AF無(wú)定義,CF=0,其他視詳細(xì)情況)。如:①ORAL,01H;AL∨01H→AL②ORAX,[BX];將EA=BX內(nèi)存單元字;內(nèi)容∧AX→AX108/1273、“非”運(yùn)算指令NOT指令格式:NOTdst指令功能:dst→dst

對(duì)目標(biāo)操作數(shù)按位進(jìn)行“非”運(yùn)算,不影響標(biāo)志位。如:①NOTAL;AL→AL②NOTWORDPTR[BX];將EA=BX內(nèi)存單元;字按位求反后送回;該內(nèi)存單元109/1274、“異或”運(yùn)算指令XOR指令格式:XORdst,src指令功能:(dst)⊕(src)→(dst)對(duì)源操作數(shù)和目操作數(shù)按位進(jìn)行“異或”運(yùn)算,影響標(biāo)志位(AF無(wú)定義,CF=0,其他視具體情況)。如:XORAX,AX;AX清零110/1275、測(cè)試指令TEST指令格式:TESTdst,src指令功能:(dst)∧(src)對(duì)源操作數(shù)和目操作數(shù)按位進(jìn)行“與”運(yùn)算,影響標(biāo)志位(AF無(wú)定義,CF=0,其他視具體情況),但結(jié)果不改變?cè)春湍坎僮鲾?shù)。此指令通常與條件轉(zhuǎn)移指令配合使用。如:TESTAL,80H ;測(cè)試D7=1?(ZF=1說(shuō)明D7=0,ZF=0說(shuō)明D7=1)111/127五、移位指令1、邏輯/算術(shù)移位指令2、循環(huán)移位指令移位操作類(lèi)指令能夠?qū)ψ止?jié)或字中各位進(jìn)行算術(shù)移位、邏輯移位或循環(huán)移位。

112/127邏輯左移SHL(shiftlogicalleft

)邏輯右移SHR(shiftlogicalright)算術(shù)左移SAL(Shiftarithmeticleft

)算術(shù)右移SAR(Shiftarithmeticright

)能夠進(jìn)行字節(jié)操作,也能夠進(jìn)行字操作。1、邏輯/算術(shù)移位指令113/127格式:

SAL/SAR/SHL/SHR操作數(shù),1;移1位SAL/SAR/SHL/SHR操作數(shù),CL;移位(CL)次,移1位以上應(yīng)現(xiàn)將次數(shù)放入CL。

移位之后變化操作數(shù)內(nèi)容,但CL值不變!允許操作數(shù)類(lèi)型:通用寄存器、存放器114/127算術(shù)左移指令SALCF0MSB

LSBCF0MSB

LSBCFMSB

LSBCFMSB

溫馨提示

  • 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)論