CH3-8086指令系統(tǒng)-陳裕國_第1頁
CH3-8086指令系統(tǒng)-陳裕國_第2頁
CH3-8086指令系統(tǒng)-陳裕國_第3頁
CH3-8086指令系統(tǒng)-陳裕國_第4頁
CH3-8086指令系統(tǒng)-陳裕國_第5頁
已閱讀5頁,還剩146頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章

8086指令系統(tǒng)

3.1概述3.2尋址方式 3.38086指令系統(tǒng)

練習題、作業(yè)題3.1概述

一、指令與指令系統(tǒng)指令:控制計算機完成某種操作的命令指令系統(tǒng):處理器所能識別的所有指令的集合指令的兼容性:同一系列機的指令都是兼容的。接下頁二、指令格式指令中應包含的信息:運算數(shù)據(jù)的來源運算結果的去向執(zhí)行的操作接下頁指令格式操作碼[操作數(shù)],[操作數(shù)]執(zhí)行何種操作目標操作數(shù)源操作數(shù)參加操作的數(shù)據(jù)或數(shù)據(jù)存放的地址接下頁指令格式:

零操作數(shù)指令:操作碼單操作數(shù)指令:操作碼操作數(shù)雙操作數(shù)指令:操作碼操作數(shù),操作數(shù)多操作數(shù)指令:三操作數(shù)及以上接下頁三、指令中的操作數(shù)立即數(shù)寄存器存儲器表征參加操作的數(shù)據(jù)本身表征數(shù)據(jù)存放的地址接下頁立即數(shù)操作數(shù)立即數(shù)只能作為源操作數(shù)。其本身是參加操作的數(shù)據(jù),可以是8位或16位。例:MOVAX,1234HMOVBL,22H立即數(shù)無法作為目標操作數(shù)立即數(shù)可以是無符號或帶符號數(shù),其數(shù)值應在可取值范圍內。接下頁寄存器操作數(shù):參加運算的數(shù)存放在指令給出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH接下頁存儲器操作數(shù)參加運算的數(shù)存放在存儲器的某一個或某兩個單元中表現(xiàn)形式:[]立即數(shù)或寄存器接下頁存儲器操作數(shù)例例:MOVAX,[1200H]MOVAL,[1200H]22H11H1200H偏移地址AHAL┇

接下頁四、指令字長與機器字長指令字長:由操作碼的長度、操作數(shù)地址長度、操作數(shù)個數(shù)決定;機器字長:計算機能夠直接處理的二進制數(shù)的位數(shù)。接下頁五、指令的執(zhí)行速度指令的字長影響指令的執(zhí)行速度(常用指令的執(zhí)行時間見表3-4)對不同的操作數(shù),指令執(zhí)行的時間不同:

存儲器快!立即數(shù)寄存器接下頁六、CISC和RISC指令系統(tǒng)CISC指令系統(tǒng)指令的功能強,種類多,高級語言和機器語言間的距離縮?。恢噶钕到y(tǒng)復雜,難使用。RISC指令系統(tǒng)指令功能較弱,種類少,格式簡單;多數(shù)指令在一個計算機周期內完成;對存儲器的結構和存取速度要求較高。返回一、指令格式二、尋址方式立即尋址寄存器尋址內存尋址例題3.2尋址方式返回一條指令通常包括兩部分:操作碼和操作數(shù)。格式:(1)操作碼指定CPU執(zhí)行哪一種操作,如傳送、運算等;(2)操作數(shù)為參與操作的數(shù)據(jù),如寄存器中的數(shù)據(jù)或內存單元中的數(shù)據(jù)等。一、指令格式返回操作碼操作數(shù)

指令中用于說明操作數(shù)所在地址的方法稱為尋址方式(AddressingMode)。

二、尋址方式返回

當操作數(shù)就在指令中時,稱為立即(數(shù))尋址;這種操作數(shù)稱為立即數(shù),8位或16位。操作數(shù)直接在指令中,緊跟在操作碼后,作為指令的一部分放在碼段中。如圖

例:MOVAX,2058H

說明:這條指令的功能就是將立即數(shù)2058H傳送到寄存器AX中。執(zhí)行完該條指令后,(AX)=2058H(或表示成AX=2058H);

立即尋址接下頁立即尋址返回

當操作數(shù)在寄存器中時為寄存器尋址(或稱寄存器直接尋址)。如①MOVAL,12H說明:目的操作數(shù)AL即為寄存器尋址;②MOVAL,AH

說明:這條指令的功能就是將寄存器AH的內容傳送到寄存器AL中。執(zhí)行完該條指令后,AL的內容和AH的內容一樣(或AL=AH);寄存器尋址返回

當操作數(shù)在內存中時為內存尋址,稱其為內存操作數(shù)。一條指令中只允許有一個內存操作數(shù)!

內存尋址時,指令中給出的是操作數(shù)的有效地址EA或產生EA的計算方式。而EA即是邏輯地址中的偏移地址。對BX、SI、DI默認在DS段中;對BP默認在SS段中。①直接尋址②寄存器間接尋址③基址/變址相對尋址④基址變址尋址⑤基址變址相對尋址內存尋址返回EA由指令中直接給出的16位位移量單獨構成時稱為內存儲尋址中的直接尋址。16位偏移量應帶有方括號。如:①MOVAX,[3100H]

說明:根據(jù)指令EA=3100H,段地址即取當前數(shù)據(jù)段DS(設DS=6000H),20位物理地址=DS×10H+3100H=63100H,該指令的功能就是將內存單元(63100H)的字內容3050H傳送到寄存器AX中,當執(zhí)行該指令后,AX=3050HH①直接尋址返回

EA的內容由寄存器內容給出,稱為內存尋址中的寄存器間接尋址。寄存器應帶有方括號。如:①MOVAL,[BX]②MOVAX,[SI]③MOVAX,[DI]例:MOVBX,[DI]其中(DS)=6000H,(DI)=2000H,(62000H)=50A0H指令執(zhí)行后:(BX)=50A0H

②寄存器間接尋址返回EA由指令中給出的基址寄存器/變址寄存器和位移量組成。

例:MOVAX,COUNT[BP]

MOVAX,[COUNT+BP]或

MOVAX,COUNT+[BP]

COUNT為16位位移量。指令執(zhí)行前:(SS)=5000H, (BP)=3000H, COUNT=2040H, (AX)=1234H指令執(zhí)行后:EA=5040H PA=55040H (55040H)=5548H (AX)=5548H③基址/變址相對尋址返回

EA由基址寄存器和變址寄存器組成。如:MOVAL,[BX+SI]或MOVAL,[BX][SI]則,EA=BX+SIPA=10H×(DS)+BX+SIMOVAL,[BP+SI]或MOVAL,[BP][SI]則,EA=BP+SI

PA=10H×(SS)+BP+SI④基址變址尋址返回

由基址寄存器、變址寄存器和位移量組成。如MOVAX,MASK[BX][DI]MOVAX,MASK[BX+DI]MOVAX,[MASX+BX+DI]執(zhí)行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H執(zhí)行指令后:EA=2A7AHPA=32A7AH(AX)=4050H⑤基址變址相對尋址返回1、指出各指令中源操作數(shù)和目的操作數(shù)的尋址方式,并說明操作數(shù)的類型(字節(jié)或字數(shù)據(jù))。(1)MOVAX,[BX](2)MOVAX,[BX+DI+0004H]答:(1)源操作數(shù)是內存尋址中的寄存器間接尋址,EA=BX;目的操作數(shù)是寄存器尋址;傳送的是字數(shù)據(jù)。(2)源操作數(shù)是內存尋址中的相對基址變址尋址,EA=BX+DI+0004H;目的操作數(shù)是寄存器尋址;傳送的是字數(shù)據(jù)。例題返回一、數(shù)據(jù)傳送類指令二、算術運算指令三、邏輯運算指令四、移位指令五、串操作指令六、控制轉移指令七、處理器控制指令3.38086指令系統(tǒng)返回通用數(shù)據(jù)傳送指令地址傳送指令狀態(tài)標志傳送指令一、數(shù)據(jù)傳送類指令返回(1)MOV指令(注意點)(2)PUSH和POP指令(3)XCHG指令通用數(shù)據(jù)傳送指令返回

是基本傳送類指令,實現(xiàn)字或字節(jié)數(shù)據(jù)的復制。用來實現(xiàn):寄←→寄、CPU←→存儲器、PU←→I/O之間的數(shù)據(jù)傳送。這是一種最基本最重要的操作。指令格式:MOVdst,src指令功能:將源操作數(shù)src,傳送到目的操作數(shù)dst中。如:MOV

AL,12H功能:執(zhí)行指令就是將立即數(shù)12H傳送到AL中,執(zhí)行完指令后AL=12H。MOV指令接下頁

MOV傳送類指令可以實現(xiàn)六種形式的傳送:①立即數(shù)送寄存器;如:MOVBX,1122H;BX=1122H②立即數(shù)送存儲單元;如:MOV[BX],1122H;將1122H送到EA=BX的內存單元中MOV指令接下頁③通用寄存器之間的傳送;如:MOVBX,AX;BX=AX

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

MOVAX,ES;AX=ESMOV指令接下頁⑤通用寄存器和存儲單元之間的傳送;如:MOVAL,[BX];將EA=BX的內存單元的內容送AL

MOV[1400H],BX;將BX的內容送EA=1400的內存單元⑥段寄存器和存儲單元之間的傳送。如:MOV[1400H],CS;

MOVDS,[BX];MOV指令返回(1)兩個操作數(shù)的類型必須一致;MOV AL,AH正確MOV AL,AX錯誤(2)兩個操作數(shù)不能同時都是存儲器操作數(shù)

MOV [BX],[BX+100H]錯誤

(3)不能用CS做目的操作數(shù); MOV AX,CS正確MOV CS,AX錯誤MOV指令注意點接下頁(4)不允許用立即數(shù)做目的操作數(shù);

MOV 1000H,AX錯誤(5)不允許用立即數(shù)直接向段寄存器傳送數(shù)據(jù); MOV DS,5000H錯誤

MOVAX,5000H正確MOV DS,AX(6)不允許在段寄存器之間直接傳送數(shù)據(jù);

MOV DS,CS錯誤

傳送指令不影響標志位!MOV指令注意點返回

用來保存數(shù)據(jù)和地址的一個存儲區(qū),稱為堆棧區(qū)。堆棧區(qū)的段地址用SS表示,堆棧棧頂指針是SP(隱含),SP的初值規(guī)定了堆棧區(qū)的大小。數(shù)據(jù)有進棧/出棧,棧頂位置會發(fā)生變化,堆棧指針SP隨數(shù)據(jù)進棧/出棧發(fā)生變化,堆棧操作的“進?!?、“出棧”按先入后出的方式工作。①入棧指令PUSH②出棧指令POP不影響標志位!

注意點PUSH和POP指令(堆棧操作指令)返回

指令格式:PUSHsrc功能:SP-2→SP(隱含操作);將字數(shù)據(jù)src送到EA=SP的堆棧段內;例:PUSHAX設AX=1020HPUSH指令(進棧操作指令)接下頁

PUSH指令(進棧操作指令)返回

指令格式:POPdst功能:將EA=SP的字送到目的操作dst中。

SP+2→SP例:POPBXPOP指令(出棧操作指令)接下頁

POP指令(出棧操作指令)返回

堆棧指令使用時應注意兩點:

①堆棧操作總是按字進行

②不能從棧頂彈出一個字給CS堆棧操作指令注意點返回

指令格式:XCHGdst,src指令功能:dstsrc

如:XCHGAX,BXXCHGCL,[BX+DI]不影響標志位!XCHG指令返回

地址傳送指令主要用來將地址指針裝入有關寄存器。(1)裝入有效地址指令(2)裝入數(shù)據(jù)段寄存器指令(3)裝入附加段寄存器地址傳送指令返回

這條指令用來將源操作數(shù)(內存)的有效地址EA裝入通用寄存器。不影響標志位。格式:LEAdst,src功能:EASRC→dst(通用寄存器)如:①LEAAX,[1000H]執(zhí)行指令后,AX=1000H。②LEAAX,[BX]執(zhí)行指令后,AX=BX。注意區(qū)別:MOVAX,[BX]裝入有效地址指令返回

這條指令用來將內存中的雙字數(shù)據(jù)(4個字節(jié))裝入通用寄存器和數(shù)據(jù)段寄存器DS。

格式:LDSdst,src功能:src給出的是有效地址,低字送dst,高字送DS。例:設DS=1000H,(11500H)=2345H,(11502H)=ABCDH執(zhí)行指令LDSSI,[1500H],SI=?DS=?答:SI=2345H,DS=ABCDH裝入數(shù)據(jù)段寄存器指令返回

這條指令用來將內存中的雙字數(shù)據(jù)裝入通用寄存器和附加段寄存器。格式:LESdst,src功能:src給出的是有效地址,低字送dst,高字送ES。裝入附加段寄存器返回(1)LAHF、SAHF指令(2)PUSHF、POPF指令狀態(tài)標志傳送指令返回指令格式及操作:

LAHF

;FLAGS中的5個標志位傳送給AH的對應位。

SAHF

;動作方向與LAHF的動作方向相反。LAHF指令操作示意圖LAHF、SAHF指令返回

格式:PUSHF

功能:SP-2→SP;標志寄存器的值入棧;格式:POPF

功能:先將EA=SP所指內存的字送標志寄存器;SP+2→SP

不影響標志位。

PUSHF和POPF指令用于保護和恢復標志寄存器內容PUSHF、POPF指令返回加法運算指令減法運算指令乘法運算指令除法運算指令

二、算術運算指令返回(1)加法指令ADD(2)帶進位加法指令ADC(3)加1指令INC(4)壓縮的BCD碼加法調整指令DAA(5)非壓縮的BCD碼加法調整指令AAA加法運算指令返回

指令格式:ADDdst,src指令功能:(dst)+(src)→(dst)

所有標志位隨運算結果發(fā)生變化。

無符號數(shù)和有符號數(shù)加法都采用ADD指令.加法指令ADD接下頁例:設原AL=79H,BH=0B3H求執(zhí)行指令ADDAL,BH后,AL=?BH=?各個標志位的值?解:79H=01111001B121+121+)B3H=10110011B+179+(-77)100101100B300+44所以,AL=00101100B=2CH,BH=0B3HSF=0,ZF=0,AF=0,CF=1,OF=0,PF=0.加法指令ADD返回

指令格式:ADCdst,src指令功能:(dst)+(src)+CF→(dst)所有標志位隨運算結果變化。如:①ADCAX,BX;AX+BX+CF→AX②ADCAL,[BX];將EA=BX的內存單元的;內容+AL+CF→AL③ADC[BX],AX;將EA=BX的內存內容+AX;+CF→該內存單元帶進位加法指令ADC接下頁例:求兩個雙字數(shù)據(jù)相加.數(shù)據(jù)1在DX(高字)和AX(低字)內,為12345678H,數(shù)據(jù)2在BX(高字)和CX(低字)內,為6789ABCDH.解:因為8086/8088的指令只能進行字/字節(jié)運算,所以對于雙字必須分兩步進行.第一步,低字和低字相加:

ADDAX,CXAX=5678H+)CX=ABCDHAX=0245HCF=1帶進位加法指令ADC接下頁第二步,高字和高字相加,同時考慮低字之和向高字進位:

ADCDX,BXDX=1234HBX=6789H+)CF=1DX=79BEHCF=0所以雙字之和是79BE0245H,CF=0帶進位加法指令ADC返回

指令格式:INCdst指令功能:(dst)+1→(dst)CF不受影響,其他標志位隨運算結果變化。如①INCAX;AX+1→AX②INCCL;CL+1→CL

特例:MOVAX,0FFFFH;AX=FFFFHINCAX;AX=0000H,CF不變加1指令INC返回

指令格式:DAA指令功能:對AL中的壓縮BCD數(shù)加法結果調整,分兩種情況進行.①當AL低4位>9或AF=1時,AL+06H→AL,1→AF;②當AL的高4位>9或CF=1時,AL+60H→AL,1→CF壓縮的BCD碼加法調整指令DAA接下頁已知兩個壓縮BCD碼AL=38H和BL=24H,對其求和.解:第一步ADDAL,BL38BCD=00111000B+)24BCD=00100100B62BCD01011100B(=5CH)

顯然,執(zhí)行加法指令與實際結果不符合壓縮的BCD碼加法調整指令DAA接下頁第二步DAA(注意隱含操作,只對AL)01011100B(=5CH,則低4位>9)+)0110B(=06H)01100010B(=62H即為62BCD)

所以,對于壓縮BCD碼,在進行加法運算后,必須緊跟一條調整指令DAA.壓縮的BCD碼加法調整指令DAA返回

指令格式:AAA指令功能:對AL中的兩個非壓縮BCD碼加法結果進行調整.如AL的低4位>9或AF=1,則:①(AL)←(AL)+6,(AH)←(AH)+1,AF←1②(AL)←((AL)∧0FH)③CF←AF否則(AL)←((AL)∧0FH)例:8+9=17MOVAL,08HADDAL,09H;AL=11HAF=1AAA;AL=07HCF=1非壓縮的BCD碼加法調整指令AAA返回(1)減法指令SUB(2)帶借位的減法指令SBB(3)減1指令DEC(4)壓縮BCD碼減法調整指令DAS(5)非壓縮BCD碼減法調整指令AAS(6)求補指令NEG(7)比較指令CMP減法運算指令返回

指令格式:SUBdst,src指令功能:(dst)-(src)→(dst)所有標志位隨運算結果發(fā)生變化。減法指令SUB返回

指令格式:SBBdst,src指令功能:(dst)-(src)-CF→(dst)SBB主要用于多字節(jié)減法,CF此處含義表借位。帶借位的減法指令SBB返回

指令格式:DECdst指令功能:(dst)-1→(dst)CF不受影響,其他標志位隨運算結果變化。例1:MOVAL,8AHDECAL;AL=89H

特例:MOVAL,00HDECAL;AL=FFH減1指令DEC返回

指令格式:DAS指令功能:對AL中兩個壓縮的BCD碼相減后的結果進行調整.調整操作為:若AL的低4位>9或AF=1,則:(AL)←(AL)-6,且AF←1若AL的高4位>9或CF=1,則:(AL)←(AL)-60H,且CF←1壓縮BCD碼減法調整指令DAS返回

指令格式:AAS指令功能:對AL中兩個非壓縮BCD碼相減的結果進行調整.調整操作為:若AL的低4位>9或AF=1,則:①(AL)←(AL)-6,(AH)←(AH)-1,AF←1②(AL)←((AL)∧0FH)③CF←AF否則:(AL)←((AL)∧0FH)非壓縮BCD碼減法調整指令AAS接下頁例:16-8=?MOVAX,0106HSUBAL,08H;AH=01H,AL=FEH00000110B;AF=1,CF=1-00001000B11111110BAAS;AH=0,AL=08H,CF=1,AF=1-00000110B11111000B

∧000011111B000010000B非壓縮BCD碼減法調整指令AAS返回

指令格式:NEGdst

指令功能:0-(dst)→(dst)例:NEGAL;對AL中的數(shù)取補碼若(AL)=0,執(zhí)行后(AL)=0,CF=0若(AL)=FCH,執(zhí)行后(AL)=04H,CF=1FCH是-4的補碼,執(zhí)行后(AL)=04,故利用NEG指令可得到負數(shù)的絕對值。如果操作數(shù)的值為80H(-128)或8000H(-32768),則執(zhí)行求補指令后,結果不變,但OF=1。本指令對6個標志位均有影響.求補指令NEG返回

指令格式:CMPdst,src

指令功能:(dst)-(src),影響標志位.注意:目的操作數(shù)不發(fā)生變化.

如何根據(jù)標志位來判斷兩個操作數(shù)的比較結果呢?⑴若兩個所比較的數(shù)相等,則比較后ZF=1,否則ZF=0。這樣根據(jù)ZF就可判斷兩個數(shù)是否相等。比較指令CMP接下頁

⑵若兩個數(shù)不相等,如何根據(jù)標志位來判斷誰大誰小呢?分兩種情況考慮:

①比較的是兩個無符號數(shù)

若CF=0,則被減數(shù)大,因大數(shù)減小數(shù)無須借位.

若CF=1,則被減數(shù)小。

比較指令CMP接下頁

②比較的是兩個有符號數(shù)

若兩個數(shù)都是正數(shù)或負數(shù)時,相減不溢出(即OF=0),可用SF來判斷,若SF=0,表示被減數(shù)大,SF=1則反之。若比較的數(shù)中有一個為正,另一個為負,此時不能單看SF,還需考慮OF,判別條件:OF=0時,若SF=0被減數(shù)大;若SF=1減數(shù)大.OF=1時,若SF=1被減數(shù)大;若SF=0減數(shù)大.

也可歸納為:OF⊕SF=0時(或SF=OF),被減數(shù)大.OF⊕SF=1時(或SF=OF),減數(shù)大.比較指令在使用時,一般在其后緊跟一條條件轉移指令,判斷比較結果的轉向。比較指令CMP接下頁

例如有符號數(shù)比較結果的條件轉移指令:

JG/JNLE;大于轉移,條件OF⊕SF=0,且ZF=0

JLE/JNG;小于或等于轉移,條件OF⊕SF=1或ZF=1

例:比較AL、BL、CL中帶符號數(shù)的大小,將最小數(shù)放在AL中。程序段如下:

CMPAL,BL;AL和BL比較

JNGBBB;若AL≤BL,則轉

XCHGAL,BL;若AL>BL,則交換BBB:CMPAL,CL;AL和CL比較

JNGCCC;若AL≤CL,則轉

XCHGAL,CL;若AL>CL,則交換CCC:INT

20H;返回DOS比較指令CMP返回(1)無符號數(shù)乘法指令MUL(2)帶符號數(shù)乘法指令IMUL(3)非壓縮BCD碼乘法調整指令乘法運算指令返回

指令格式:MULsrc指令功能:(src)×AL→AX(src是字節(jié)數(shù)據(jù))(src)×AX→DX,AX(src是字數(shù)據(jù))如:MULBL;BL×AL→AXMULBX;BX×AX→DX,AXMULBYTEPTR[SI];將EA=SI的內存單元的內容×AL→AX無符號數(shù)乘法指令MUL返回

指令格式:IMULsrc指令功能:(src)×AL→AX(src是字節(jié)數(shù)據(jù))(src)×AX→DX,AX(src是字數(shù)據(jù))參加運算的數(shù)據(jù)是帶符號數(shù),結果用帶符號數(shù)補碼表示帶符號數(shù)乘法指令IMUL接下頁例:若AL=96H,BL=12H;①MULBL;②IMULBL執(zhí)行指令后①

AX=0A8CH;②AX=F88CH分析:

①AL=96H,BL=12H;96H×12H=0A8CH

②AL=96H,AL的真值為『96H』補=-6AH

BL=12H,BL的真值為+12H;(-6AH)×(+12H)=-774H;(-774H)補=(1000011101110100B)補

=1111100010001100B=F88CH乘法指令MUL

、IMUL返回

指令格式:AAM

指令功能:對AX內兩個非壓縮BCD碼相乘結果進行調整

例:要求進行如下十進制乘法運算:7*8=?

可編程如下:MOVAL,07H;(AL)=07H MOVCL,08H;(CL)=08HMULCL;(AX)=0038HAAM;(AH)=05H,(AL)=06H

所得結果為非組合的BCD碼。該指令影響標志位PF、SF、ZF,對其余標志位無定義非壓縮BCD碼乘法調整指令返回(1)無符號數(shù)除法指令DIV(2)帶符號數(shù)除法指令IDIV(3)字節(jié)擴展指令CBW(4)字擴展成雙字指令CWD(5)非壓縮BCD碼除法調整指令AAD除法運算指令返回指令格式:DIVsrc指令功能:兩個無符號數(shù)相除:①src是字節(jié)AX/(src)→AL(商),AH(余數(shù))②src是字DX,AX/(src)→AX(商),DX(余數(shù))無符號數(shù)除法指令DIV返回指令格式:IDIVsrc指令功能:兩個帶符號數(shù)相除:①src是字節(jié)AX/(src)→AL(商),AH(余數(shù))②src是字DX,AX/(src)→AX(商),DX(余數(shù))

商及余數(shù)均為有符號數(shù),且余數(shù)符號總是與被除數(shù)符號相同。帶符號數(shù)除法指令IDIV接下頁例:①

若AX=9FF0H,BL=F7H;

執(zhí)行指令DIVBL后,AX=BDA5H例:②若AX=D99FH,BL=9FH;

執(zhí)行指令IDIVBL后,AX=E465H分析:

AX=D99FH,AX的真值為『D99FH』補=-2661H

BL=9FH,BL的真值為-61H;(-2661H)÷(-61H)商65H,余-1CH=E4H;除法指令DIV

、IDIV返回指令格式:CBW指令功能:將AL擴展到AX(為除法指令做準備).①當AL的最高位是0,則AH=00H;②當AL的最高位是1,則AH=0FFH.字節(jié)擴展指令CBW返回指令格式:CWD指令功能:將AX擴展到DX,AX(為除法指令做準備).①當AX的最高位是0,則DX=0000H;②當AX的最高位是1,則DX=0FFFFH.字擴展成雙字指令CWD返回指令格式:AAD指令功能:對AX中非壓縮BCD碼的被除數(shù)進行調整,保證結果正確.(在除法指令DIV前).非壓縮BCD碼除法調整指令AAD返回“與”運算指令AND“或”運算指令OR“非”運算指令NOT“異或”運算指令XOR測試指令TEST三、邏輯運算指令返回指令格式:ANDdst,src指令功能:(dst)∧(src)→(dst)

按位進行,影響標志位(AF除外)

例:MOVAL,5AHANDAL,0FH;AL=0AH“與”運算指令AND返回指令格式:ORdst,src指令功能:(dst)∨(src)→(dst)按位進行,影響標志位(AF除外)例:MOVAL,5AHORAL,0FH;AL=5FH“或”運算指令OR返回指令格式:NOTdst指令功能:dst→dst例:MOVAL,5AHNOTAL;AL=A5H“非”運算指令NOT返回指令格式:XORdst,src指令功能:(dst)⊕(src)→(dst)按位進行,影響標志位(AF除外)

例:MOVAL,5AHXORAL,0FH;AL=55H“異或”運算指令XOR返回指令格式:TESTdst,src指令功能:(dst)∧(src)影響標志位,不改變操作數(shù)例:若AX=9FF0H,BX=4000H;

執(zhí)行指令TESTAX,BX后,

AX=9FF0H,BX=4000H;ZF=1

測試指令TEST返回移位次數(shù)Count=1,直接寫入指令;大于1時,應送入CL預先設定。邏輯移位指令算術移位指令循環(huán)移位指令通過進位位循環(huán)移位指令例題四、移位指令返回

邏輯移位的特點是移出的位進入進位位CF,空出的位用“0”填入。①邏輯左移指令指令格式:SHLdst,count

指令功能:例:MOVAL,9EH;AL=9EH=10011110B

SHLAL,1;CF=1,AL=00111100B=3CH邏輯移位指令接下頁②邏輯右移指令指令格式:SHRdst,count指令功能:例:MOVAL,9EH;AL=9EH=10011110BMOVCL,2

SHRAL,CL;CF=1,AL=00100111B=27H邏輯移位指令返回①算術左移指令指令格式:SALdst,count指令功能:與邏輯左移指令功能完全相同。二進制數(shù)據(jù)左移一位相當于乘2。例:MOVAL,24H;AL=24H=00100100B=36

SALAL,1;AL=01001000B=48H=72SALAL,1;AL=10010000B=90H=144算術移位指令接下頁②算術右移指令指令格式:SARdst,count

指令功能:最高位保持不變,其他各位右移二進制數(shù)據(jù)右移一位相當于除2。例:MOVAL,84H;AL=84H=10000100B;(X)補=10000100BX=-1111100B=-7CHSARAL,1;AL=11000010B;(X)補=11000010BX=-0111110B=-3EH算術移位指令返回①循環(huán)左移指令指令格式:ROLdst,count指令功能:循環(huán)移位指令接下頁②循環(huán)右移指令指令格式:RORdst,count指令功能::循環(huán)移位指令返回①通過進位位循環(huán)左移指令指令格式:RCLdst,count指令功能:通過進位位循環(huán)移位指令接下頁②通過進位位循環(huán)右移指令指令格式:RCRdst,count

指令功能:通過進位位循環(huán)移位指令返回例:ASCII碼→BCD碼35H→05H33H→03H

(1)ANDAL,OFH;

(2)SUBAL,30H;

例題返回串傳送指令——MOVS串比較指令——CMPS串掃描指令——SCAS從串取指令——LODS存入串指令——STOS五、串操作指令返回

指令格式及操作:

MOVSoprd1,oprd2;將源串地址中的字/字節(jié)送到目的串地址中(常用于段超越場合)。

MOVSB(字節(jié)) MOVSW(字)注意:

1)不影響標志位。

2)常與REP前綴指令配合使用。串傳送指令——MOVS接下頁例:將2000H:1200H地址開始的100個字節(jié)傳送到6000H:0000H開始的內存單元中去。

movax,2000h movds,ax ;設定源串段基址

movax,6000h moves,ax ;設定目的串段基址

movsi,1200h ;設定源串偏移地址

movdi,0 ;設定目的傳偏移地址

movcx,100 ;串長度送CX cld ;確定地址指針增量方向

repmovsb ;執(zhí)行串操作指令串傳送指令——MOVS返回指令格式及操作:

CMPSoprd1,oprd2

;將源、目的串地址中的字/字節(jié)進行比較(相減),結果不送目標地址。

CMPSB CMPSW注意:

1)影響標志位。

2)常與REPZ/REPE、REPNZ/REPNE配合使用,用來檢查兩字符串是否相等。串比較指令——CMPS接下頁例:比較兩個字符串是否相同,并找出其中第一個不相等字符的地址,將該地址送BX,不相等的字符送AL。兩個字符串的長度均為200字節(jié),M1為源串首地址,M2為目的串首地址。 lea si,M1 lea di,M2 mov cx,200 cld repe cmpsb 串比較指令——CMPS返回and cx,0ffh jz stop dec si mov bx,si mov al,[si]stop: hlt 指令格式及操作:

SCASoprd

;將AL/AX中的值與oprd字/字節(jié)相相減,結果不送目標地址,自動修改指針。

SCASB SCASW

注意:

1)影響標志位。

2)常與REPZ/REPE、REPNZ/REPNE配合使用,用來在一個字符串中搜索特定的關鍵字。串掃描指令——SCAS接下頁例:在ES段中從2000H單元開始存放了10個字符,尋找其中有無字符’A’。若有則記下搜索次數(shù),放入DATA1單元,‘A’的地址放DATA2單元。 movdi,2000h movbx,di movcx,0ah mov al,‘A’ cld repnzscasb and cx,0ffffh jz found串掃描指令——SCAS返回movdi,0 jmpdone found:decdi

mov data2,di

inc di sub di,bxdone: mov data1,di指令格式及操作:

LODSsrc;將源操作數(shù)送到AL或AX中,并根據(jù)DF修改指針。(常用于段超越場合)。

LODSB LODSW

注意:

1)不影響標志位。

2)一般不帶重復前綴。從串取指令——LODS返回指令格式及操作:

STOSdest

;將AL或AX中的內容送到目的地址中,并根據(jù)DF修改指針。

STOSB STOSW注意:

1)不影響標志位。

2)常與REP前綴配合,給內存中一連續(xù)區(qū)域置相同值。存入串指令——STOS返回控制轉移類指令的尋址方式無條件轉移指令條件轉移指令循環(huán)控制指令過程調用和返回指令六、控制轉移類指令返回

指令執(zhí)行順序是由代碼段寄存器CS和指令指針寄存器IP確定的。執(zhí)行順序程序時,BIU(總線接口部件)每取一字節(jié)指令,IP就自動加1,指向下一指令字節(jié)??刂妻D移類指令的目的就是通過改變CS、IP,實現(xiàn)對程序流向的控制。(1)段內轉移(2)段間轉移控制轉移指令的尋址方式返回又稱近轉移。①“NEAR”指明在同一段的轉移,IP的值被改變。②“SHORT”指明在同一段內更短距離的轉移。(-128~+127)段內轉移返回又稱遠轉移?!癋AR”指明要轉到另一個邏輯段執(zhí)行程序,CS和IP都被修改。段間轉移返回指令格式:JMPdst指令功能:使程序無條件地轉移到dst指明的目的地址去執(zhí)行。不影響標志位。由于8086/8088CPU的內存是分段的,故JMP指令分成4種情況。無條件轉移指令接下頁

①段內直接轉移JMP其直接轉向的目標地址由指令給出,根據(jù)給定的位移量是8位還是16位分成如下兩種情況:

位移量轉移范圍

匯編語言中格式

8位

-128~+127

JMPSHORTOPRD

16位-32768~+32767JMPNEARPTROPRD例:JMP0120H;直接轉向0120HJMPSHORTLPI;轉向LPIJMPNEARPTRBBB;轉向BBB這種轉移只在段內,代碼段寄存器CS內容不變無條件轉移指令接下頁

②段內間接轉移轉移的目標地址由寄存器或存儲單元的內容給出。例:JMPSI若指令執(zhí)行前,(SI)=1200H則指令執(zhí)行后,(IP)=1200H,于是轉向1200H無條件轉移指令接下頁

例:JMP[BX+DI]若指令執(zhí)行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=2350H則指令執(zhí)行后:(IP)=2350H在匯編語言中,這種存儲器尋址通常寫成:JMPWORDPTR[BX+DI]表示所取得的目標地址是一個字有效地址。無條件轉移指令接下頁

③段間直接轉移

采用這種尋址方式,指令直接提供了要轉移的段地址和偏移地址。

例:JMP2000:1000H

執(zhí)行時,(IP)←1000H,(CS)←2000H

在匯編中,則在符號地址前加操作符FAR

PTR來表示,例:JMP

FAR

PTR

BBB無條件轉移指令接下頁

④段間間接轉移

將指定的存儲單元中兩個相鄰的字內容送IP及CS。

例如:JMP

DWORDPTR[SI]

設指令執(zhí)行前:(DS)=4000H,(SI)=1212H,

(41212H)=1000H,(41214H)=4A00H

則指令執(zhí)行后:(IP)=1000H,(CS)=4A00H,程序轉到4B000H繼續(xù)執(zhí)行指令。

例中DWORDPTR,在匯編語言中表示雙字操作符。

JMP指令對標志位無影響。無條件轉移指令返回

條件轉移指令是根據(jù)上一條指令執(zhí)行后的標志位的狀態(tài)來決定程序是否轉移。當條件成立時,便轉向指令中給出的目標地址;當條件不成立時,程序按順序執(zhí)行。所有的條件轉移指令,規(guī)定只能以本指令為中心的-128~+127字節(jié)范圍內轉移。

指令格式:Jccdst8

指令功能:當轉移條件cc成立時,轉移到目的地址去執(zhí)行;否則按順序執(zhí)行。不影響標志位。

轉移條件cc

例題條件轉移指令返回以標志位的狀態(tài)作為轉移條件

轉移條件cc接下頁助記符轉移條件助記符轉移條件JZ/JEZF=1JNZ/JNEZF=0JSSF=1JNSSF=0JOOF=1JNOOF=0JP/JPEPF=1JNP/JPOPF=0JCCF=1JNCCF=0JCXZCX=02.以兩個無符號數(shù)比較的結果作為轉移條件轉移條件cc接下頁助記符轉移條件JA/JNBECF∨ZF=0

高于/不低于等于JAE/JNB/JNCCF=0

高于或等于/不低于/無借位JB/JNAE/JCCF=1

低于/不高于等于/有借位JBE/JNACF∨ZF=1

低于或等于/不高于3.以兩個帶符號數(shù)比較的結果作為轉移條件轉移條件cc返回助記符 轉移條件 JG/JNLE(SF⊕OF)∨ZF=0 大于/不小于等于JGE/JNLSF⊕OF=0 大于或等于/不小于JL/JNGESF⊕OF=1 小于/不大于等于JLE/JNG(SF⊕OF)∨ZF=1小于或等于/不大于分析下列程序段,程序轉向哪里?ADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5①AX=B568H,BX=54B7H例題接下頁解:第一步:ADDAX,BXAX=B568H1011010101101000BX=54B7H0101010010110111AX=0A1FH0000101000011111所以,CF=1,OF=0第二步:JNOL1;OF=0,滿足條件,轉去L1執(zhí)行例題接下頁分析下列程序段,程序轉向哪里?ADDAX,BXJNOL1JNCL2SUBAX,BXJNCL3JNOL4JMPSHORTL5

②AX=42C8H,BX=608DH例題接下頁解:第一步:ADDAX,BXAX=42C8H0100001011001000BX=608DH0110000010001101AX=A355H1010001101010101所以,CF=0,OF=1第二步:JNOL1;OF=1,不滿足條件,順序執(zhí)行第三步:JNCL2;CF=0,滿足條件,轉去L2執(zhí)行例題接下頁編寫一段指令序列,測試AL的內容,若低4位全為0,就轉移去NEXT執(zhí)行程序,否則按順序執(zhí)行.例題返回解:TESTAL,0FHJZNEXT

循環(huán)指令的作用是控制某程序段反復執(zhí)行的次數(shù)。⑴指令格式:LOOPdst8

指令功能:CX-1→CX,若CX≠0,就轉去dst循環(huán)執(zhí)行程序;若CX=0,順序執(zhí)行后續(xù)程序。不影響標志位。實際上,該指令可以等價兩條指令:DECCX;CX-1→CXJNZdst;ZF=0,轉向dst執(zhí)行

循環(huán)控制指令接下頁

(2)LOOPZ/LOOPE首先使(CX)-1,判斷只有在(CX)≠0,且ZF=1的條件下,才轉至目標地址。若(CX)=0或ZF=0,則退出循環(huán)。

(3)LOOPNZ/LOOPNE此指令先使(CX)-1,只有在(CX)≠0,且ZF=0的條件下,才轉至目標地址。若(CX)=0,或ZF=1,則退出循環(huán)。

(4)JCXZ;若(CX)=0,則轉移循環(huán)控制指令接下頁例1:要求在顯示器上顯示DI中偏移地址。程序段如下:MOVBX,DI;MOVCX,4;CX做計數(shù)器ROT:ROLBX,1

ROLBX,1

ROLBX,1

ROLBX,1;將最高4位移到低4位MOVAL,BLANDAL,0FH;取出低4位ADDAL,30H;化為ASCII碼CMPAL,3AH;與3AH比較循環(huán)控制指令-例1接下頁JLBBB;若(AL)<3A,則轉ADDAL,07H;若(AL)≥3A,加07BBB:MOVDL,AL;(DL)←顯示字符MOVAH,02INT21H;顯示輸出,參閱附錄CLOOPROT;偏址顯示完否?沒有,轉回MOVDL,48HMOVAH,02INT21H;最后顯示’H’循環(huán)控制指令-例1接下頁請編寫指令序列,確定AL中“1”的個數(shù)。解:XORAH,AH;累加器清零MOVCX,08H;設置循環(huán)次數(shù)Stat:ROLAL,1;AL循環(huán)左移1位;AL的最高位送CFJNCLp;CF=0,轉移到LpINCAH;CF=1,AH+1→AHLp:LOOPStat ;CX-1→CX,CX≠0,;循環(huán)到Stat執(zhí)行

HLT ;程序段結束循環(huán)控制指令-例2返回

程序設計時,往往把某些具有獨立功能的程序編寫成獨立的程序模塊,稱之為子程序,可以供其他程序調用。方法的優(yōu)點是:源程序長度縮短,有利于模塊化設計,使程序的編制、閱讀和修改都比較方便。(1)調用指令指令格式:CALLdst(子程序名)

指令功能:無條件的轉移到執(zhí)行子程序;(2)返回指令指令格式:RET

指令功能:在子程序結尾處必須有這條指令,保證子程序結束后返回原程序調用處。過程調用和返回指令接下頁

(1)調用指令CALL由于子程可能與主程序同在一個段內,也可能不同在一個段內,與JMP指令類似,調用指令也分如下四種。①段內直接調用例:CALL0120H;調用地址由指令給出.執(zhí)行的操作為:((SP)-1,(SP)-2)←(IP);IP壓棧(SP)←(SP)-2;修改SP

(IP)←(IP)+偏移量過程調用和返回指令接下頁

溫馨提示

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

評論

0/150

提交評論