數據傳送類指令1_第1頁
數據傳送類指令1_第2頁
數據傳送類指令1_第3頁
數據傳送類指令1_第4頁
數據傳送類指令1_第5頁
已閱讀5頁,還剩261頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 計算機所能執行的全部命令的集合即為該計算機的指令系統指令系統。按功能分類:數據傳送類指令;例MOV算術運算類指令;例ADD邏輯運算與移位類指令;AND;SHL串操作類指令;MOVSB控制轉移類指令;JMP處理器控制類指令;CLD;STD3.3 8086CPU3.3 8086CPU的指令系統的指令系統數據傳送類指令共有數據傳送類指令共有1414條,條,根據傳送的內容可根據傳送的內容可分成以分成以下下4 4組組:(1 1)通用數據傳送指令;)通用數據傳送指令;(2 2)累加器專用傳送指令;)累加器專用傳送指令;(3 3)地址傳送指令;)地址傳送指令;(4 4)標志寄存器傳送指令。)標志寄存器傳送

2、指令。 數據傳送類指令數據傳送類指令(1 1)通用數據傳送指令;)通用數據傳送指令;基本傳送指令基本傳送指令MOVMOV數據交換指令數據交換指令XCHGXCHG堆棧操作指令堆棧操作指令PUSHPUSH和和POPPOP查表轉換指令查表轉換指令XLATXLAT基本傳送指令基本傳送指令MOVMOV【指令格式指令格式】MOV dst,src【說明說明】指令中的指令中的dstdst表示目標操作數表示目標操作數,src,src表示源操作數表示源操作數. .這這種雙操作數指令在匯編語言中的表示方法種雙操作數指令在匯編語言中的表示方法, ,總是將目標操作總是將目標操作數寫在前面數寫在前面, ,源操作數寫在后面

3、源操作數寫在后面, ,兩者之間用一個逗號隔開兩者之間用一個逗號隔開. .【指令功能指令功能】將源操作數將源操作數srcsrc傳送到目標操作數傳送到目標操作數dst.dst.這種傳這種傳送實際上是進行數據的送實際上是進行數據的”復制復制”, ,將源操作數復制到目標操將源操作數復制到目標操作數中去作數中去, ,源操作數本身不變源操作數本身不變. .【指令特點指令特點】既可傳送字節操作數既可傳送字節操作數(8(8位位),),也可以傳送字操也可以傳送字操作數作數(16(16位位).). 可使用各種尋址方式可使用各種尋址方式. . 可實現以下各種傳送可實現以下各種傳送: :寄存器與寄存器寄存器與寄存器/

4、 /存儲存儲器之間器之間, ,立即數至寄存器或存儲器立即數至寄存器或存儲器, ,寄存器寄存器/ /存儲器與段寄存存儲器與段寄存器之間器之間. .基本傳送指令基本傳送指令MOVMOV【注意注意】源操作數和目的操作數類型必須匹配源操作數和目的操作數類型必須匹配, ,不能一個不能一個是字是字, ,另一個是字節另一個是字節. . 源操作數和目的操作數不能同時為存儲器操作數源操作數和目的操作數不能同時為存儲器操作數, ,即存儲單元之間不能用即存儲單元之間不能用MOVMOV指令直接傳送指令直接傳送. . 代碼段寄存器代碼段寄存器CSCS和指令指針寄存器和指令指針寄存器IPIP不能作為目不能作為目的操作數的

5、操作數, ,但但CSCS可以作為源操作數可以作為源操作數. . 立即數不能作為目的操作數立即數不能作為目的操作數. . 不能用立即尋址方式給段寄存器傳數不能用立即尋址方式給段寄存器傳數. . 段寄存器之間不能用段寄存器之間不能用MOVMOV指令直接傳送指令直接傳送. . 在傳送字單元時在傳送字單元時, ,遵循遵循“高字節在高地址,低字高字節在高地址,低字節在低地址節在低地址”的原則。的原則。通用寄存器(AX、BX、CX、DX、SI、DI、BP、SP)存儲器立即數段寄存器(CS、DS、SS、ES) 數據交換指令數據交換指令XCHGXCHG【指令格式指令格式】XCHG dst,src【指令功能指令

6、功能】交換指令交換指令XCHGXCHG的操作是使源操作數的操作是使源操作數srcsrc與目標與目標操作數操作數dstdst進行互換進行互換. .即不僅將源操作數傳送到目標操作數,即不僅將源操作數傳送到目標操作數,而且,同時將目標操作數傳送到源操作數。交換的內容可以而且,同時將目標操作數傳送到源操作數。交換的內容可以是一個字節(是一個字節(8 8位),也可以是一個字(位),也可以是一個字(1616位)。位)。【注意注意】交換指令的源操作數和目標操作數各自均可以是交換指令的源操作數和目標操作數各自均可以是寄存器或存儲器,但不能兩者同時為存儲器。寄存器或存儲器,但不能兩者同時為存儲器。 段寄存器不能

7、參加交換段寄存器不能參加交換 例:例:XCHG CH,AL XCHG CH,AL 字節操作字節操作 XCHG BX,SI XCHG BX,SI 字操作字操作 XCHG SI,CX XCHG SI,CX 存儲器與寄存器之間交換存儲器與寄存器之間交換【例例】判斷下例指令是否正確判斷下例指令是否正確MOV SI,DIMOV SI,DIMOV AH,BXMOV AH,BXMOV BL,1000MOV BL,1000MOV DX,1MOV DX,1MOV CS,CXMOV CS,CXMOV ES,1000HMOV ES,1000HMOV DS,ESMOV DS,ESMOV 1000H,BXMOV 100

8、0H,BX計算計算MOV AX,1000HMOV AX,1000H指令執行完畢后指令執行完畢后AXAX的內容的內容若執行前,(若執行前,(DSDS)=1000H,(11000H)=34H,(11001H)=12H.=1000H,(11000H)=34H,(11001H)=12H.堆棧操作指令堆棧操作指令PUSHPUSH和和POPPOP 堆棧就是在存儲器中指定的一個特定的存儲區域。在這個堆棧就是在存儲器中指定的一個特定的存儲區域。在這個區域中,信息的存入與取出的原則是按照先進后出(區域中,信息的存入與取出的原則是按照先進后出(first in first in last out,FILOlast

9、 out,FILO)或后進先出()或后進先出(last in first out,LIFOlast in first out,LIFO)的原)的原則進行存取,稱該存儲區為堆棧。此時,信息的存入稱為推入,則進行存取,稱該存儲區為堆棧。此時,信息的存入稱為推入,信息的取出稱為彈出。信息的取出稱為彈出。 可以把堆棧想像成一個開口向上的容器。堆棧的一端是固可以把堆棧想像成一個開口向上的容器。堆棧的一端是固定的,另一端是浮動的。堆棧的固定端是堆棧的底部,稱為棧定的,另一端是浮動的。堆棧的固定端是堆棧的底部,稱為棧底。堆棧的浮動端可以推入或彈出數據,稱為棧頂。向堆棧推底。堆棧的浮動端可以推入或彈出數據,稱

10、為棧頂。向堆棧推入數據時,新推入數據堆放在以前推入數據的上面,而最先推入數據時,新推入數據堆放在以前推入數據的上面,而最先推入的數據被推至堆棧底部,最后推入的數據堆放在堆棧頂部。入的數據被推至堆棧底部,最后推入的數據堆放在堆棧頂部。從堆棧彈出數據時,堆棧頂部的數據最先彈出,而最先推入的從堆棧彈出數據時,堆棧頂部的數據最先彈出,而最先推入的數據則是最后彈出。數據則是最后彈出。堆棧操作指令堆棧操作指令PUSHPUSH和和POPPOP 由于堆棧頂部是浮動的,為了指示現在堆棧中存放數據的由于堆棧頂部是浮動的,為了指示現在堆棧中存放數據的位置,通常設置一個指針,即堆棧指針位置,通常設置一個指針,即堆棧指

11、針SPSP,始終指向堆棧的頂,始終指向堆棧的頂部。這樣,堆棧中數據的進出取決于部。這樣,堆棧中數據的進出取決于SPSP。當將數據(。當將數據(1 1個字節)個字節)推入堆棧時,推入堆棧時,SPSP自動減自動減1 1,向上浮動而指向新的棧頂;當將數據,向上浮動而指向新的棧頂;當將數據從堆棧彈出時,從堆棧彈出時,SPSP自動加自動加1 1,向下浮動而指向新的棧頂。,向下浮動而指向新的棧頂。堆棧有建棧、進棧和出棧堆棧有建棧、進棧和出棧3 3種基本操作。種基本操作。建棧建棧 建立堆棧就是規定堆棧底部在存儲器中的位置,可以通過數建立堆棧就是規定堆棧底部在存儲器中的位置,可以通過數據傳送指令將堆棧底部的地

12、址設置在堆棧指針據傳送指令將堆棧底部的地址設置在堆棧指針SPSP和堆棧段寄存和堆棧段寄存器器SSSS中。這時,棧中無數據,堆棧底部與頂部重疊,是一個空中。這時,棧中無數據,堆棧底部與頂部重疊,是一個空棧。棧。例:例:MOV AXMOV AX,3000H3000H MOV SS MOV SS,AXAX MOV SP MOV SP,2000H2000H堆棧操作指令堆棧操作指令PUSHPUSH和和POPPOP進棧進棧PUSHPUSH 進棧進棧PUSHPUSH就是把數據推入堆棧的操作。在就是把數據推入堆棧的操作。在80868086中,進棧或中,進棧或出棧操作都是以字為單位的,即每次在堆棧中存取數據均是

13、兩出棧操作都是以字為單位的,即每次在堆棧中存取數據均是兩個字節(先存入高字節,再存入低字節,仍然遵循個字節(先存入高字節,再存入低字節,仍然遵循“高字節在高字節在高地址,低字節在低地址高地址,低字節在低地址”的原則)。的原則)。【指令格式指令格式】PUSH oprPUSH opr【指令功能指令功能】PUSHPUSH指令將指令將1616位的源操作數推入堆棧,而目標地位的源操作數推入堆棧,而目標地址為當前棧頂,即由址為當前棧頂,即由SPSP指示的單元。指示的單元。PUSHPUSH指令操作如下:指令操作如下:(SPSP)(SPSP)-2-2(SPSP)+1+1: (SPSP) ) opropr堆棧操

14、作指令堆棧操作指令PUSHPUSH和和POPPOP出棧出棧POPPOP 出棧出棧POPPOP就是從堆棧頂部彈出一個字送到通用寄存器、段寄就是從堆棧頂部彈出一個字送到通用寄存器、段寄存器或字存儲單元中。存器或字存儲單元中?!局噶罡袷街噶罡袷健縋OP oprPOP opr【指令功能指令功能】POPPOP指令將指令將SPSP指示的棧頂的兩字節數據傳送到目指示的棧頂的兩字節數據傳送到目的操作數的操作數opropr中。中。POPPOP指令的目的操作數可以是通用寄存器、段指令的目的操作數可以是通用寄存器、段寄存器(寄存器(CSCS除外)以及存儲器字單元。除外)以及存儲器字單元。POPPOP指令操作如下:指

15、令操作如下: opr opr (SPSP)+1+1: (SPSP) ) (SPSP)(SPSP)+2+2堆棧操作指令堆棧操作指令PUSHPUSH和和POPPOP【注意注意】 堆棧操作總是按字進行的,沒有字節操作指令。堆棧操作總是按字進行的,沒有字節操作指令。 代碼段寄存器代碼段寄存器CSCS的值可推入堆棧,但卻不能從堆棧中彈出一的值可推入堆棧,但卻不能從堆棧中彈出一個字到個字到CSCS中。中。堆棧操作指令中,有一個操作數是隱含的,這個操作數就是堆棧操作指令中,有一個操作數是隱含的,這個操作數就是(SPSP)指示的棧頂單元。)指示的棧頂單元。【注意注意】 堆棧主要用于暫存數據和在過程調用或處理中

16、斷時暫存斷點堆棧主要用于暫存數據和在過程調用或處理中斷時暫存斷點信息。信息。 有時在程序中需要對某些寄存器內容進行保護以便后面使用,有時在程序中需要對某些寄存器內容進行保護以便后面使用,就常用堆棧先保護起來,用到時再恢復。就常用堆棧先保護起來,用到時再恢復。【例例】CSCSPUSH AXPUSH AXPUSH BXPUSH BXPUSH CXPUSH CXPUSH DXPUSH DX 這段省略的程序需要用到這段省略的程序需要用到AX,BX,CXAX,BX,CX和和DXDXPOP DXPOP DXPOP CXPOP CXPOP BXPOP BXPOP AXPOP AX查表轉換指令查表轉換指令XL

17、ATXLAT【指令格式指令格式】XLATXLAT【指令功能指令功能】XLATXLAT指令是字節的查表轉換指令,可以根據指令是字節的查表轉換指令,可以根據表中元素的序號查出表中相應元素的內容。具體操作為:表中元素的序號查出表中相應元素的內容。具體操作為:AL AL (BXBX)+ + (ALAL) ) 為了實現查表轉換,預先應將表的首地址(偏移地址)為了實現查表轉換,預先應將表的首地址(偏移地址)傳送到傳送到BXBX寄存器,元素的序號送寄存器,元素的序號送ALAL。表中第一個元素的序。表中第一個元素的序號為號為0 0,然后依次是,然后依次是1 1,2 2,3 3,執行執行XLATXLAT指令后,

18、表中指指令后,表中指定序號的元素存于定序號的元素存于ALAL中。中。MOV BXMOV BX,OFFSET TABOFFSET TABMOV ALMOV AL,1010XLAT TAB ;XLAT TAB ;寫操作數寫操作數XLAT ;XLAT ;不寫操作數不寫操作數XLAT ESXLAT ES:TAB;TAB;重設段寄存器為重設段寄存器為ESES輸入輸出指令輸入輸出指令【指令格式指令格式】IN AXIN AX(ALAL),),port; OUT port,AX(AL)port; OUT port,AX(AL)【指令功能指令功能】輸入指令從一個端口輸入一個字節或一個字輸入指令從一個端口輸入一個

19、字節或一個字到累加器。輸入端口地址可以用一個到累加器。輸入端口地址可以用一個8 8位立即數表示,此位立即數表示,此時最多允許尋址時最多允許尋址256256個端口。同時,端口地址也可以放在個端口。同時,端口地址也可以放在1616位寄存器位寄存器DXDX中,則端口總數最多可達中,則端口總數最多可達64K.64K.當當ININ指令的目標操作數為指令的目標操作數為ALAL時,從端口輸入一個字節;如時,從端口輸入一個字節;如果目標操作數為果目標操作數為AXAX,則從兩個連續端口,則從兩個連續端口portport和和port+1port+1輸入輸入兩個字節(兩個字節(1 1個字),其中個字),其中port

20、port端口內容送端口內容送ALAL, port+1port+1端端口內容送口內容送AHAH。輸入指令的具體形式有以下四種:。輸入指令的具體形式有以下四種:IN ALIN AL,data8 ;data8 ;端口地址端口地址8 8位,輸入一個字節位,輸入一個字節IN AXIN AX,data8 ;data8 ;端口地址端口地址8 8位,將位,將data8 data8 , data8data81 1端端口的內容分別送口的內容分別送ALAL、AHAHIN ALIN AL,DX DX ;端口地址;端口地址1616位,輸入位,輸入1 1個字節個字節IN AXIN AX,DX DX ;端口地址;端口地址1

21、616位,將(位,將(DXDX),(),(DXDX)1 1端口的內容分別送端口的內容分別送ALAL、AHAH輸入輸出指令輸入輸出指令輸出指令的具體形式有以下四種:輸出指令的具體形式有以下四種:OUT data8 OUT data8 , AL ;AL ;端口地址端口地址8 8位,輸出一個字節位,輸出一個字節OUT data8 OUT data8 , AX ;AX ;端口地址端口地址8 8位,將位,將ALAL、AH AH 的內容分別的內容分別送送data8 data8 , data8data81 1端口端口OUT DX OUT DX , AL AL ;端口地址;端口地址1616位,輸出位,輸出1

22、1個字節個字節OUT DX OUT DX , AX AX ;端口地址;端口地址1616位,將位,將ALAL、AH AH 的內容分別送的內容分別送(DXDX),(),(DXDX)1 1端口端口【注意注意】無論接收到的數據或準備發送的數據都必須放無論接收到的數據或準備發送的數據都必須放在累加器在累加器AXAX(字)或(字)或ALAL(字節)中,所以這是兩條累加器(字節)中,所以這是兩條累加器專用指令。專用指令。運行有運行有I/OI/O指令的程序時,若無硬件端口的支持,計算指令的程序時,若無硬件端口的支持,計算機將有可能出現死機。機將有可能出現死機。在使用間接端口尋址時,應先將端口地址賦給在使用間接

23、端口尋址時,應先將端口地址賦給DXDX寄存器,寄存器,而且只能賦給而且只能賦給DXDX。3.3.2 3.3.2 算術運算類指令算術運算類指令 8086 8086算術運算類指令包括加、減、乘、除算術運算類指令包括加、減、乘、除4 4種基種基本運算指令,以及對本運算指令,以及對BCDBCD碼表示的十進制數進行算術碼表示的十進制數進行算術運算的結果進行調整的指令,和符號擴展指令。運算的結果進行調整的指令,和符號擴展指令。(1 1)加法指令)加法指令:ADD:ADD;ADCADC;INCINC;(2 2)減法指令)減法指令:SUB:SUB;SBBSBB;DECDEC;NEGNEG;CMPCMP;(3

24、3)乘法運算指令)乘法運算指令:MUL:MUL;IMULIMUL;(4 4)除法運算指令)除法運算指令:DIV:DIV;IDIVIDIV;(5 5)符號擴展指令)符號擴展指令:CBW:CBW;CWDCWD;(6 6)十進制調整指令:)十進制調整指令:DAADAA;DASDAS;AAAAAA;AASAAS; 算術運算指令除加算術運算指令除加1指令指令INC不影響不影響CF標志外,其標志外,其余指令對余指令對CF、OF、ZF、SF、PF、AF等等6個標志位均個標志位均可產生影響,其規則如下:可產生影響,其規則如下:無符號數運算時,加法運算最高位向前產生進位或減 法運算最高位向前有借位,則表示出現溢

25、出,CF1帶符號數采用補碼運算時,符號位也參與運算,出現 溢出則表示運算結果發生了錯誤,OF1運算結果為0時,ZF1當運算結果為負數時,SF1當運算結果中有偶數個1時,PF1當操作數為BCD碼,低4位出現進位1時,AF13.3.2 3.3.2 算術運算類指令算術運算類指令(1 1)不帶進位加法指令)不帶進位加法指令ADDADD【指令格式指令格式】ADD dst,src【指令功能指令功能】(dstdst) (dstdst)()(srcsrc) ADDADD指令完成目標操作數與源操作數相加指令完成目標操作數與源操作數相加, ,并將結果送回目標并將結果送回目標操作數,并根據相加結果設置標志寄存器中的

26、操作數,并根據相加結果設置標志寄存器中的CFCF、PFPF、AFAF、ZFZF、SFSF和和OFOF。 目標操作數可以是寄存器或存儲器,源操作數可以是立目標操作數可以是寄存器或存儲器,源操作數可以是立即數、寄存器或存儲器。但是目標操作數和源操作數不能同即數、寄存器或存儲器。但是目標操作數和源操作數不能同時是存儲器。另外,不能對段寄存器進行加法運算(段寄存時是存儲器。另外,不能對段寄存器進行加法運算(段寄存器也不能參加減法、乘法和除法運算)。加法指令的操作數器也不能參加減法、乘法和除法運算)。加法指令的操作數可以是可以是8 8位數,也可以是位數,也可以是1616位數,但類型必須匹配。位數,但類型

27、必須匹配。3.3.2 3.3.2 算術運算類指令算術運算類指令1.加法指令加法指令(1 1)不帶進位加法指令)不帶進位加法指令ADDADD【例例1 1】判斷下列指令是否正確?判斷下列指令是否正確?ADD BXADD BX,CHCHADD ESADD ES,AXAXADD ADD DIDI,BXBX【例例2 2】設(設(CLCL)87H87H,(,(AHAH)F8HF8H,問執行指令,問執行指令ADD AHADD AH,CLCL后的結果如何?后的結果如何?【例例3 3】試編寫一程序,將存儲器試編寫一程序,將存儲器23450H23450H單元和單元和23451H23451H單元單元的數相加,結果存

28、入的數相加,結果存入23452H23452H單元中。單元中。3.3.2 3.3.2 算術運算類指令算術運算類指令1.加法指令加法指令(2 2)帶進位加法指令)帶進位加法指令ADCADC【指令格式指令格式】ADC dst,src【指令功能指令功能】(dstdst) (dstdst)()(srcsrc)+(CF)+(CF) ADCADC指令在格式和功能上都與指令在格式和功能上都與ADDADD指令類似,只是相加時要把指令類似,只是相加時要把進位標志進位標志CFCF的當前值加到和中,結果送到目的操作數中。的當前值加到和中,結果送到目的操作數中。【用途用途】ADCADC指令主要用于多字節加法運算。指令主

29、要用于多字節加法運算。例如,有兩個例如,有兩個4 4字節的無符號數相加,由于字節的無符號數相加,由于80868086加法指令最加法指令最多只能進行多只能進行1616位的加法運算,我們可將加法分兩次進行,先位的加法運算,我們可將加法分兩次進行,先進行低進行低1616位相加,然后再進行高位相加,然后再進行高1616位相加,在完成高位相加,在完成高1616位相位相加時,注意要把低加時,注意要把低1616位相加時可能出現的進位位加進去。位相加時可能出現的進位位加進去。3.3.2 3.3.2 算術運算類指令算術運算類指令1.加法指令加法指令(2 2)帶進位加法指令)帶進位加法指令ADCADC【例例1】試

30、編寫程序,完成下面兩個雙字長數的加法運算:試編寫程序,完成下面兩個雙字長數的加法運算:12345678H789ABCDEH3.3.2 3.3.2 算術運算類指令算術運算類指令1.加法指令加法指令(3 3)加)加1 1指令指令INCINC【指令格式指令格式】INC dst【指令功能指令功能】(dstdst) (dstdst)1 1INCINC指令只有一個操作數,它將指定的操作數的內容加指令只有一個操作數,它將指定的操作數的內容加1 1,再,再將結果送回到該操作數。將結果送回到該操作數。INCINC指令將影響指令將影響SFSF、ZFZF、AFAF、PFPF、OFOF標志位,但不影響標志位,但不影響

31、CFCF。INCINC指令中操作數類型可以是通用寄存器或存儲單元,但不能指令中操作數類型可以是通用寄存器或存儲單元,但不能是段寄存器。字節操作或字操作均可。對于存儲單元,需要是段寄存器。字節操作或字操作均可。對于存儲單元,需要在指令中說明操作數類型(字節還是字)。在指令中說明操作數類型(字節還是字)。3.3.2 3.3.2 算術運算類指令算術運算類指令1.加法指令加法指令(3 3)加)加1 1指令指令INCINC【例例1】下列指令為合法的下列指令為合法的INCINC指令。指令。 INC CLINC CL INC DX INC DX INC BYTE PTR INC BYTE PTRBXBXDI

32、DI INC WORD PTRINC WORD PTRSISI【用途用途】INCINC指令一般用在循環程序中,修改地址指針及循指令一般用在循環程序中,修改地址指針及循環次數等。環次數等。指令中的指令中的BYTE PTR BYTE PTR 和和 WORD PTR WORD PTR 分別指定隨后的存儲器操分別指定隨后的存儲器操作數類型是字節和字。作數類型是字節和字。3.3.2 3.3.2 算術運算類指令算術運算類指令1.加法指令加法指令(1 1)不帶借位減法指令)不帶借位減法指令SUBSUB【指令格式指令格式】SUB dst,src【指令功能指令功能】(dstdst) (dstdst)()(src

33、src) 目的操作數減去源操作數,結果放在目的操作數中。源操作數目的操作數減去源操作數,結果放在目的操作數中。源操作數原有內容不變,并根據運算結果置標志位原有內容不變,并根據運算結果置標志位CFCF、PFPF、AFAF、ZFZF、SFSF和和OFOF。 SUBSUB指令可以進行字節或字的減法運算,源操作數與目的操指令可以進行字節或字的減法運算,源操作數與目的操作數的約定與作數的約定與ADDADD相同。相同。 操作數的類型可以根據程序員的要求約定為帶符號數或無操作數的類型可以根據程序員的要求約定為帶符號數或無符號數。當無符號數的較小數減較大數時,因不夠減而產生借符號數。當無符號數的較小數減較大數

34、時,因不夠減而產生借位,此時進位標志位,此時進位標志CFCF置置1.1.當帶符號數的較小數減較大數時,將當帶符號數的較小數減較大數時,將得到負的結果,則符號標志位得到負的結果,則符號標志位SFSF置置1.1.帶符號數相減,結果如果帶符號數相減,結果如果溢出,則溢出,則OFOF置置1.1.3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令(1 1)不帶借位減法指令)不帶借位減法指令SUBSUB【例例1】SUB BL,CL設(設(BL)23H,(,(CL)78H,則執行指令后,(,則執行指令后,(BL)?3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令

35、(2 2)帶借位減法指令)帶借位減法指令SBBSBB【指令格式指令格式】SBB dst,src【指令功能指令功能】(dstdst) (dstdst)()(srcsrc) (CF)SBBSBB指令將目標操作數減源操作數,然后再減進位標志指令將目標操作數減源操作數,然后再減進位標志CFCF,并將結果送回目標操作數。并將結果送回目標操作數。SBBSBB指令對標志位的影響與指令對標志位的影響與SUBSUB指指令相同。令相同。3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令(2 2)帶借位減法指令)帶借位減法指令SBBSBB【例例1】SBB BX,256SBB AX,DXSBB

36、BH,DATADISBB TABLEBX,CLSBB SI+2000H,66H【用途用途】帶借位減指令主要用于多字節的減法。帶借位減指令主要用于多字節的減法。3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令(3 3)減)減1 1指令指令DECDEC【指令格式指令格式】DEC dst【指令功能指令功能】(dstdst) (dstdst)1 1DECDEC指令將目的操作數減指令將目的操作數減1.1.指令對標志位指令對標志位SFSF、ZFZF、AFAF、PFPF和和OFOF有影響,但不影響標志位有影響,但不影響標志位CFCF。DECDEC指令中操作數類型可以是通用寄存器或存儲

37、單元,但不指令中操作數類型可以是通用寄存器或存儲單元,但不能是段寄存器。字節操作或字操作均可。對于存儲單元,需能是段寄存器。字節操作或字操作均可。對于存儲單元,需要在指令中說明操作數類型(字節還是字)。要在指令中說明操作數類型(字節還是字)。【例例】 DEC BYTE PTRBXDI DEC WORD PTRSI3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令(4 4)求補指令)求補指令NEGNEG【指令格式指令格式】NEG dst【指令功能指令功能】(dstdst) 0 0 (dstdst)NEGNEG指令相當于指令相當于dstdst的內容按位取反后,未位加的內容按位

38、取反后,未位加1.1.NEGNEG指令將影響指令將影響CF CF 、SFSF、ZFZF、AFAF、PFPF、OFOF標志位。標志位。3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令(5 5)比較指令)比較指令CMPCMP【指令格式指令格式】CMP dst【指令功能指令功能】(dstdst)()(srcsrc)CMPCMP指令的操作是將目的操作數減去源操作數,但結果不送回指令的操作是將目的操作數減去源操作數,但結果不送回到目的操作數。因此,執行比較指令到目的操作數。因此,執行比較指令CMPCMP以后,被比較的兩個以后,被比較的兩個操作數內容均保持不變,而比較結果反映在標志

39、位上。這是操作數內容均保持不變,而比較結果反映在標志位上。這是CMPCMP指令與指令與SUBSUB指令的區別。指令的區別。 CMPCMP指令的目的操作數可以是寄存器或存儲器,源操作數指令的目的操作數可以是寄存器或存儲器,源操作數可以是立即數、寄存器或存儲器,但不允許兩個操作數同時為可以是立即數、寄存器或存儲器,但不允許兩個操作數同時為存儲器操作數??梢允亲止澅容^,也可以是字比較。存儲器操作數。可以是字節比較,也可以是字比較。 CMPCMP指令對六個標志位指令對六個標志位ZFZF、SFSF、CFCF、AFAF、OFOF、PFPF均有影響。均有影響。3.3.2 3.3.2 算術運算類指令算術運算類

40、指令2.減法指令減法指令(5 5)比較指令)比較指令CMPCMP【用途用途】比較兩個數誰大然后送比較兩個數誰大然后送MAX MOV AL,NUM1 CMP AL,NUM2 JA NEXT MOV AL,NUM2NEXT:MOV MAX,AL HLT3.3.2 3.3.2 算術運算類指令算術運算類指令2.減法指令減法指令(1 1)無符號數的乘法指令)無符號數的乘法指令MULMUL【指令格式指令格式】MUL src【指令功能指令功能】字節乘法字節乘法 (AX)(AX)(src) src) (AL)(AL) 字乘法字乘法 (DX:AX)(DX:AX)(src) src) (AX)(AX)MULMUL

41、指令執行指令執行8 8位或位或1616位無符號數的乘法。一個操作數(乘數)位無符號數的乘法。一個操作數(乘數)在累加器中(在累加器中(8 8位乘法的乘數在位乘法的乘數在ALAL中,中,1616位乘法的乘數在位乘法的乘數在AXAX),),這個寄存器操作數是隱含的。另一個操作數這個寄存器操作數是隱含的。另一個操作數srcsrc(被乘數)必(被乘數)必須在寄存器或存儲單元中。兩個操作數均按無符號數處理。須在寄存器或存儲單元中。兩個操作數均按無符號數處理。【例例1】 【注意注意】源操作數不能為立即數源操作數不能為立即數MUL AL MUL 25H MUL DXMUL BYTE PTR DI6MUL W

42、ORD PTR COUNT(直接尋址中的符號地址)(直接尋址中的符號地址)3.3.2 3.3.2 算術運算類指令算術運算類指令3.乘法指令乘法指令(1 1)無符號數的乘法指令)無符號數的乘法指令MULMUL【注意注意】MULMUL指令對標志位指令對標志位CFCF和和OFOF有影響,但有影響,但SFAFZFPFSFAFZFPF不不確定。如果運算結果的高半部分(確定。如果運算結果的高半部分(AHDX)AHDX)中為中為0 0,則,則CFCF和和OFOF置置0 0,否則置,否則置1.1.3.3.2 3.3.2 算術運算類指令算術運算類指令3.乘法指令乘法指令(2 2)帶符號數的乘法指令)帶符號數的乘

43、法指令IMULIMUL【指令格式指令格式】IMUL src【指令功能指令功能】字節乘法字節乘法 (AX)(AX)(src) src) (AL)(AL) 字乘法字乘法 (DX:AX)(DX:AX)(src) src) (AX)(AX)IMULIMUL指令執行指令執行8 8位或位或1616位帶符號數的乘法。一個操作數(乘數)位帶符號數的乘法。一個操作數(乘數)在累加器中(在累加器中(8 8位乘法的乘數在位乘法的乘數在ALAL中,中,1616位乘法的乘數在位乘法的乘數在AXAX),),這個寄存器操作數是隱含的。另一個操作數這個寄存器操作數是隱含的。另一個操作數srcsrc(被乘數)必(被乘數)必須在

44、寄存器或存儲單元中。兩個操作數均按帶符號數處理。須在寄存器或存儲單元中。兩個操作數均按帶符號數處理。3.3.2 3.3.2 算術運算類指令算術運算類指令3.乘法指令乘法指令【注意注意】IMULMUL指令對標志位指令對標志位CFCF和和OFOF有影響,但有影響,但SFAFZFPFSFAFZFPF不不確定。如果運算結果的高半部分(確定。如果運算結果的高半部分(AHDX)AHDX)中包含乘積的有效中包含乘積的有效數字而不只是符號的擴展部分,則數字而不只是符號的擴展部分,則CFCF和和OFOF置置1 1,否則置,否則置0.0.(1 1)無符號數的除法指令)無符號數的除法指令DIVDIV【指令格式指令格

45、式】DIV src【指令功能指令功能】字節除法字節除法 (AL)(AL)(AX)/ (AX)/ (src) (AH)src) (AH)(AX)%(AX)%(src) src) 字除法字除法 (AX)(AX)(DX:AX)/ (DX:AX)/ (src) (DX)src) (DX)(DX:AX)%(DX:AX)%(src) src) 執行執行DIVDIV指令時,如果除數為指令時,如果除數為0 0,或字節除法時,或字節除法時ALAL寄存器中的寄存器中的商大于商大于FFH,FFH,或字除法時或字除法時AXAX寄存器中的商大于寄存器中的商大于FFFFHFFFFH,則,則CPUCPU立立即自動產生一個類

46、型號為即自動產生一個類型號為0 0的內部中斷,即除法溢出中斷,此的內部中斷,即除法溢出中斷,此時商和余數是不定值時商和余數是不定值 ?!咀⒁庾⒁狻勘怀龜岛统龜档奈婚L:被除數和除數的位長:1616位除位除8 8位;位;3232位除位除1616位位AHAH和和DXDX的擴展(清的擴展(清0 0)3.3.2 3.3.2 算術運算類指令算術運算類指令4.除法指令除法指令(2 2)帶符號數的除法指令)帶符號數的除法指令IDIVIDIV【指令格式指令格式】IDIV src【指令功能指令功能】字節除法字節除法 (AL)(AL)(AX)/ (AX)/ (src) (AH)src) (AH)(AX)%(AX)%

47、(src) src) 字除法字除法 (AX)(AX)(DX:AX)/ (DX:AX)/ (src) (DX)src) (DX)(DX:AX)%(DX:AX)%(src) src) 執行執行IDIVIDIV指令時,如果除數為指令時,如果除數為0 0,或字節除法時,或字節除法時ALAL寄存器中的寄存器中的商超出商超出-128-128+127+127的范圍的范圍,或字除法時或字除法時AXAX寄存器中的商超出寄存器中的商超出- -3276832768+32767+32767的范圍,則的范圍,則CPUCPU立即自動產生一個類型號為立即自動產生一個類型號為0 0的的內部中斷,即除法溢出中斷,此時商和余數是

48、不定值內部中斷,即除法溢出中斷,此時商和余數是不定值 ?!咀⒁庾⒁狻勘怀龜岛统龜档淖珠L被除數和除數的字長AHAH和和DXDX的擴展的擴展( (低位字節或低位字的符號擴展,低位字節或低位字的符號擴展,ALAL最高位最高位AH,AXAH,AX最高位最高位DX)DX)3.3.2 3.3.2 算術運算類指令算術運算類指令4.除法指令除法指令3.3.2 3.3.2 算術運算類指令算術運算類指令兩個除法指令使兩個除法指令使6 6個狀態標志位的值不確定,個狀態標志位的值不確定,即或為即或為0 0,或為,或為1 1,但沒有意義,但沒有意義。4.除法指令除法指令(1 1)將字節擴展成字的指令)將字節擴展成字的指

49、令CBWCBWALAL符號位為符號位為0 0,則(,則(AHAH)0 0ALAL符號位為符號位為1 1,則(,則(AHAH)FFHFFH(2 2)將字擴展成雙字的指令)將字擴展成雙字的指令CWDCWDAXAX符號位為符號位為0 0,則(,則(DXDX)0 0AXAX符號位為符號位為1 1,則(,則(DXDX)FFFFHFFFFH【例例1】MOV AL ,8BHCBWIMUL BX3.3.2 3.3.2 算術運算類指令算術運算類指令5.符號擴展指令(帶符號數的符號擴展指令)符號擴展指令(帶符號數的符號擴展指令)(1 1)壓縮(組合)壓縮(組合)BCDBCD碼加法十進制調整指令碼加法十進制調整指令

50、DAADAA【指令格式指令格式】DAADAA【指令功能指令功能】DAADAA指令對兩個組合指令對兩個組合BCDBCD碼相加后的結果碼相加后的結果(必須在(必須在ALAL中)進行調整,產生一個正確的組合中)進行調整,產生一個正確的組合BCDBCD碼。碼。指令的操作為:如果指令的操作為:如果ALAL的低的低4 4位位09H09H,或者標志位,或者標志位AFAF1 1,則進行(,則進行(ALAL)(ALAL)06H06H修正,同時修正,同時AF 1AF 1;如果如果ALAL的高的高4 4位位09H09H,或者標志位,或者標志位CFCF1 1,則進行,則進行(ALAL)(ALAL)60H60H修正,同

51、時修正,同時CF 1CF 1;【例例】MOV AL,28H ADD AL,47H DAA3.3.2 3.3.2 算術運算類指令算術運算類指令6.十進制調整指令十進制調整指令(2 2)壓縮(組合)壓縮(組合)BCDBCD碼減法十進制調整指令碼減法十進制調整指令DASDAS【指令格式指令格式】DASDAS【指令功能指令功能】DASDAS指令對兩個組合指令對兩個組合BCDBCD碼相減后的結果碼相減后的結果(必須在(必須在ALAL中)進行調整,產生一個正確的組合中)進行調整,產生一個正確的組合BCDBCD碼。碼。指令的操作為:如果指令的操作為:如果ALAL的低的低4 4位位09H09H,或者標志位,或

52、者標志位AFAF1 1,則進行(,則進行(ALAL)(ALAL)06H06H修正,同時修正,同時AF 1AF 1;如果如果ALAL的高的高4 4位位09H09H,或者標志位,或者標志位CFCF1 1,則進行,則進行(ALAL)(ALAL)60H60H修正,同時修正,同時CF 1CF 1;【例例】MOV AX,3997H SUB AL,AH DAS3.3.2 3.3.2 算術運算類指令算術運算類指令6.十進制調整指令十進制調整指令(3 3)非壓縮(未組合)非壓縮(未組合)BCDBCD碼減法十進制調整指令碼減法十進制調整指令AASAAS【指令格式指令格式】AAS AAS 操作數隱含在操作數隱含在A

53、LAL和和AHAH中中【指令功能指令功能】AASAAS指令對兩個未組合指令對兩個未組合BCDBCD碼相減后的結果碼相減后的結果(必須在(必須在ALAL中)進行調整,產生一個正確的未組合中)進行調整,產生一個正確的未組合BCDBCD碼。碼。指令的操作為:如果指令的操作為:如果ALAL的低的低4 4位位09H09H,或者標志位,或者標志位AFAF1 1,則進行(,則進行(ALAL)(ALAL)06H06H修正,同時(修正,同時(AHAH)(AHAH)1 1, ALAL的高的高4 4位清位清0 0,(,(AFAF)()(CFCF)1 1【例例】127?3.3.2 3.3.2 算術運算類指令算術運算類

54、指令6.十進制調整指令十進制調整指令(4 4)非壓縮(未組合)非壓縮(未組合)BCDBCD碼加法十進制調整指令碼加法十進制調整指令AAAAAA【指令格式指令格式】AAAAAA【指令功能指令功能】AAAAAA指令對兩個未組合指令對兩個未組合BCDBCD碼相加后的結果碼相加后的結果(必須在(必須在ALAL中)進行調整,產生一個正確的未組合中)進行調整,產生一個正確的未組合BCDBCD碼。碼。指令的操作為:如果指令的操作為:如果ALAL的低的低4 4位位09H09H,或者標志位,或者標志位AFAF1 1,則進行(,則進行(ALAL)(ALAL)06H06H修正,同時(修正,同時(AHAH)(AHAH

55、)1 1, ALAL的高的高4 4位清位清0 0,(,(AFAF)()(CFCF)1 1【例例】MOV AH,00H MOV AL,06H ADD AL,07H AAA3.3.2 3.3.2 算術運算類指令算術運算類指令6.十進制調整指令十進制調整指令(5 5)非壓縮(未組合)非壓縮(未組合)BCDBCD碼乘法十進制調整指令碼乘法十進制調整指令AAMAAM【指令格式指令格式】AAMAAM【指令功能指令功能】AAMAAM指令后不帶操作數,操作數隱含在指令后不帶操作數,操作數隱含在ALAL和和AHAH中。先用中。先用MULMUL指令將兩個未組合指令將兩個未組合BCDBCD碼相乘,結果放碼相乘,結果

56、放在在ALAL中,然后用中,然后用AAMAAM調整,于是在調整,于是在AXAX中即可得到結果,中即可得到結果,乘積高位在乘積高位在AH,AH,乘積低位在乘積低位在ALAL。AAMAAM指令改變指令改變SFSF、ZFZF、PFPF,使使AFAF、CFCF、OFOF不確定不確定指令的操作為:指令的操作為:AH (AL)/0AH AH (AL)/0AH 商送商送AH AH AL (AL) AL (AL)0AH 0AH 余數送余數送ALAL【注意注意】AAM指令通常緊跟在指令通常緊跟在MUL之后。之后。【例例】97?6.十進制調整指令十進制調整指令(6 6)非壓縮(未組合)非壓縮(未組合)BCDBCD

57、碼除法十進制調整指令碼除法十進制調整指令AADAAD【指令格式指令格式】AADAAD【指令功能指令功能】AADAAD指令后不帶操作數,操作數隱含在指令后不帶操作數,操作數隱含在ALAL和和AHAH中。中。AADAAD指令不是在除法之后,而是在除法之前進指令不是在除法之后,而是在除法之前進行調整,然后用行調整,然后用DIVDIV指令進行除法,所得之商還需用指令進行除法,所得之商還需用AAMAAM指令調整。指令調整。AADAAD指令改變指令改變SFSF、ZFZF、PFPF,使,使AFAF、CFCF、OFOF不不確定確定指令的操作為:指令的操作為:AL (AH)AL (AH)0AH +AL 0AH

58、+AL AH 0 AH 0 【例例】732?6.十進制調整指令十進制調整指令非壓縮(未組合)非壓縮(未組合)BCDBCD碼除法十進制調整指令碼除法十進制調整指令AADAAD非壓縮(未組合)非壓縮(未組合)BCDBCD碼乘法十進制調整指令碼乘法十進制調整指令AAMAAM【例例】732? MOV AX,0703H MOV BL,02H AAD DIV BL AAM AADAAD AL (AH) AL (AH)0AH +AL 0AH +AL AH 0 AH 0 AAM AAM AH (AL)/0AH AH (AL)/0AH 商送商送AH AH AL (AL) AL (AL)0AH 0AH 余數送余數

59、送ALAL3.3.3 3.3.3 邏輯運算與移位類指令邏輯運算與移位類指令1.1.邏輯運算指令邏輯運算指令 有以下有以下5 5條邏輯運算指令條邏輯運算指令, ,它們可對它們可對8 8位或位或1616位位操作數按位進行邏輯運算操作數按位進行邏輯運算, ,位與位之間無進位或借位位與位之間無進位或借位, ,沒有數的正負與數的數值大小沒有數的正負與數的數值大小. .(1 1)邏輯與指令)邏輯與指令:AND dst,src:AND dst,src(2 2)邏輯或指令)邏輯或指令:OR dst,src:OR dst,src(3 3)邏輯異或指令)邏輯異或指令:XOR dst,src:XOR dst,src

60、(4 4)邏輯非指令)邏輯非指令:NOT dst:NOT dst(5 5)測試指令)測試指令:TEST dst,src:TEST dst,src除了除了NOTNOT指令的執行結果對標志位無影響外指令的執行結果對標志位無影響外, ,其他指令其他指令執行后執行后, ,總是使總是使OF=CF=0,SF,ZFOF=CF=0,SF,ZF和和PFPF根據運算結果置位根據運算結果置位或復位或復位, ,以反映操作結果的特征以反映操作結果的特征, ,而而AFAF狀態不定狀態不定. .返回返回邏輯與指令邏輯與指令ANDAND【指令格式指令格式】AND dst,src【指令功能指令功能】dst dst (dstdst)& &(s

溫馨提示

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

評論

0/150

提交評論