微機原理及接口技術(第三章-2)_第1頁
微機原理及接口技術(第三章-2)_第2頁
微機原理及接口技術(第三章-2)_第3頁
微機原理及接口技術(第三章-2)_第4頁
微機原理及接口技術(第三章-2)_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

二、8086/8088的指令系統(續)2.算術運算指令(Arithmetic)內容:

8086/8088提供加、減、乘、除、轉換五種基本算術操作;

利用十進制調整指令和ASCII調整指令對BCD碼表示的十進制數進行算術運算;

對帶符號數與無符號數進行乘、除運算。(一)加法指令(Arithmetic)(二)減法指令(Subtraction)(三)乘法指令(Multiplication)(四)除法指令(Division)(五)轉換指令特點:

大部分都影響標志位,不同指令影響不同:(1)加、減法指令影響SF,ZF,AF,PF,CF,OF;(2)加1和減1指令不影響CF;(3)乘法指令影響CF,OF;(4)除法指令使大部分標志位的狀態不確定;(5)對BCD碼調整指令對標志位的影響不同;(6)轉換指令對標志位無影響

都可以用于字節、字的運算;

雙操作數指令除源為立即數外,其余必須有一個操作數

為寄存器;單操作數指令不能為立即數。

(一)加法指令(Arithmetic)8086具有5種加法操作指令:1、ADD(Addition)加法指令2、ADC(Addwithcarry)帶進位加法指令3、INC(Incrementby1)加1指令

4、AAA(ASCIIadjustforaddition)加法ASCII調整指令5、DAA(Decimaladjustforaddition)加法十進制調整指令

1、ADD(Addition)加法指令指令格式:ADDdest,src;(dest)(dest)+(src)

Src:立即數,寄存器,存儲器。 dest:寄存器,存儲器。例: ADDCL,10 ;寄存器+立即數 ADDDX,SI ;寄存器+寄存器 ADDAX,MEM ;寄存器+存儲器 ADDDATA[BX],AL ;存儲器+寄存器 ADDBYTEPTRALPHA[DI],30H;存儲器+立即數特點:

可以進行8位、16位的無符號數和帶符號數的加法運算;

源操作數和目標操作數不能同時為存儲器,不能為段寄存器;

指令影響標志位的情況:

OF=1, 8位帶符號數相加,和超出范圍(-128~+127),16位帶符號數相加,和超出范圍(-32768~+32767);CF=1,8位無符號數相加,和超過255,

16位無符號數相加,和超過65535。其他條件標志(SF,AF,PF,ZF)根據定義設定。例 MOVAL,7EH ;(AL)=7EH MOVBL,5BH ;(BL)=5BH ADDAL,BL ;(AL)=7EH+5BH=D9H影響標志位的情況: SF=1 ,結果最高位=1 ZF=0 ,結果不等于0 AF=1 ,D3位向D4有進位 PF=0 ,”1”的個數為奇數 CF=0 ,無進位 OF=1 ,和超過+127

(兩個正數相加,結果為負;反之亦是)2、ADC(Addwithcarry)帶進位加法指令格式:ADCdest,src;(dest)←(dest)+(src)+CF

CF:

進位標志CF的現行值(上條指令CF值)特點:與ADD同。用途:主要用于多字節運算中。類型舉例: ADCCX,300 ;寄存器+立即數+CF ADCAL,BL ;寄存器+寄存器+CF ADCDX,COUNT[SI] ;寄存器+存儲器+CF ADCBLOCK[DI],BX ;存儲器+寄存器+CFADCBYTEPTRMEM,6 ;存儲器+立即數+CF用途舉例:計算兩個多字節數相加3B74AC60F8H+20D59E36C1H=?兩個多字節數存放在:DATA1,DATA2的開始單元。多字節數內存存放程序:

MOVCX,5 MOVSI,0 ;清SI

CLC ;清CFLOOPER: MOVAL,DATA2[SI]

ADCDATA1[SI],AL INCSI ;(SI)+1(SI) DECCX ;(CX)-1(CX) JNZLOOPER ;(CX)0轉 HLT ;停機問題思考:(1) 什么叫溢出?什么叫進位?(2) 有進位就有溢出,沒有進位就沒有溢出?(1)溢出------是指帶符號數的補碼溢出。

字長為n位帶符號數,補碼運算能表示范圍為:-2n-1~+2n+1–1如果運算結果超出該范圍,叫補碼溢出,簡稱溢出。在溢出時,造成運算錯誤。

進位------是指運算結果的最高位向更高位的進位。有進位,CF=1;無進位,CF=0問題思考:(1) 什么叫溢出?什么叫進位?(2) 有進位就有溢出,沒有進位就沒有溢出?(1)溢出------是指帶符號數的補碼溢出。

字長為n位帶符號數,補碼運算能表示范圍為:-2n-1~+2n+1–1如果運算結果超出該范圍,叫補碼溢出,簡稱溢出。在溢出時,造成運算錯誤。

進位------是指運算結果的最高位向更高位的進位。有進位,CF=1;無進位,CF=0(2)有進位就有溢出,沒有進位就沒有溢出?結論: 有進位不一定有溢出,沒有進位不一定沒有溢出。以8位二進制數為例分析一下數的溢出與進位情況:下面分4種情況加以討論:(1) 帶符號數和無符號數都不溢出(2) 無符號數溢出(3) 帶符號數溢出(4) 帶符號數和無符號數都溢出(1) 帶符號數和無符號數都不溢出(2) 無符號數溢出二進制數看作無符號數看作帶符號數0000011111111011+000000107251+258+7-5++2相加標志CF=1,OF=0CF=1OF=0溢出無符號數溢出溢出結果應為2,錯不溢出異號數相加不可能有溢出CF=1(3) 帶符號數溢出二進制數看作無符號數看作帶符號數00001001011111100+100001019124+133+9+124++133相加標志CF=0,OF=1CF=0OF=1溢出帶符號數溢出不溢出溢出結果為-5結果錯(4) 帶符號數和無符號數都溢出結論:(1)帶符號數相加溢出

根據OF=1?,判斷帶符號數產生溢出?

OF=1,同符號數相加,結果符號與其相反,產生溢出;OF=0,同符號數相加,結果符號與其相同,不產生溢出;異號數相加,不可能溢出。(2)無符號數相加溢出

根據CF=1?,判斷無符號數產生溢出?

CF=1,無符號數相加產生溢出,但結果并沒有錯, 只是結果放不下。3、INC(Incrementby1)加1指令格式:INC dest ;(B/W),(dest)←(dest)+1 dest:寄存器、存儲器。不能是段寄存器。功能:對指定的目標操作數+1操作數單元。用途:用于在循環程序中修改地址指針和循環次數。標志位影響情況:影響SF,ZF,AF,PF,OF。

不影響CF。操作數類型:可以是寄存器,存儲器。不能是段寄存器。例:INCDL ;8位寄存器+1INCSI ;16位寄存器+1INCBYTEPTR[BX][SI];存儲器+1(字節操作)INCWORDPTR[DI] ;存儲器+1(字操作)

INCDS ;錯(二)減法指令(Subtraction)

8086有7條減法指令:1、SUB(Subtraction)減法指令2、SBB(Subtractionwithborrow)帶進位減法指令

3、DEC(Decrementby1)減1指令4、NEG(Negate)求補指令5、CMP(Compare)比較指令6、AAS(ASCIIadjustforsubtraction)減法ASCII調整指令7、DAS(Decimaladjustforsubtraction)減法十進制調整指令1、SUB(Subtraction)減法指令格式::SUBdest,src;(dest)←(dest)-(src)

Src:立即數,寄存器,存儲器。 Dest:寄存器,存儲器。例: SUBAL,37H ;寄存器-立即數 SUBBX,DX ;寄存器-寄存器 SUBCX,VAR1 ;寄存器-存儲器 SUBARRAY[SI],AX ;存儲器-寄存器SUBWORDPTRALPHA[BX][DI],512H;存儲器減立即數這種指令影響標志位:A、C、O、P、S、Z標志。

2、SBB

(Subtractionwithborrow)帶進位減法指令

格式::SBBdest,src;(dest)←(dest)-(src)-CF CF:進位標志CF的現行值(上條指令CF值)

Src:立即數,寄存器,存儲器。 dest:寄存器,存儲器。指令影響標志位、B/W數運算情況同SBB用途:用于多字節數相減例: SBBBX,100H ;寄存器-立即數-CF SBBCX,DX ;寄存器-寄存器-CF SBBAL,DATA1[SI] ;寄存器-存儲器-CF SBBDISP[BP],BL ;存儲器-寄存器-CFSBBBYTEPTRALPHA[SI+6],96H;存儲器-立即數-CF3、DEC(Decrementby1)減1指令格式:DECdest ;(B/W) (dest)←(dest)-1

dest:寄存器 、存儲器。不能是段寄存器。功能:對指定的目標操作數-1操作數單元。用途:用于在循環程序中修改地址指針和循環次數。標志位影響情況:影響SF,ZF,AF,PF,OF。

不影響CF。DEC用途舉例: … MOVAX,0FFFFH CYC:DECAX JNZCYC HLT …用于延時時間。4、NEG(Negate)求補指令格式:NEGdest;B/W,(dest)←0-(dest)

dest:寄存器 、存儲器。操作:把操作數按位求反后末位+1。(dest)←0FFFFH-(dest)+1影響標志:A、C、O、P、S、Z。CF: 操作數為0時求補,CF=0;一般使CF=1.OF:對-128(80H)或-32768(8000H)求補,結果沒有變化,但OF=1;否則OF=0.5、CMP(Compare)比較指令格式:CMPdest,src ;B/W(dest)-(src)

結果不送,置標志。影響標志:A、C、O、P、S、Z。

src: 立即數,寄存器,存儲器。 dest:寄存器,存儲器。例: CMPAL,0AH ;寄存器與立即數比較 CMPCX,DI ;寄存器與寄存器比較 CMPAX,AREA1 ;寄存器與存儲器比較 CMP[BX+5],SI ;存儲器與寄存器比較CMPWORDPTRALPHAGAMMA,100H;存儲器與立即數比較用途:用比較指令來比較兩個數之間的關系: 兩者是否相等,兩個數中哪個大。(1)根據Z標志,判斷兩者是否相等;(2) 根據CF標志,判斷兩個無符號數的大小;(3) 用S、O標志,判斷二個帶符號數的大小。

(1)根據Z標志,可判斷兩者是否相等例:CMPAX,BX

ZF=1,(AX)=(BX),兩者相等 ZF=0,(AX)=(BX),兩者不相等(2) 根據CF標志,判斷兩個無符號數的大小例:比較AX,BX寄存器,將大數(AX) …

CMPAX,BX JNCNEXT;CF=0轉NEXT XCHGAX,BXNEXT:……結論:CF=0,(AX)>(BX);CF=1,(AX)<(BX)(3) 用SF、OF標志,判斷二個帶符號數的大小設:被比較二個帶符號數分別為:A、B分四種情況討論:

A>0,B>0

A<0,B<0 A>0,B<0 A<0,B>0四種情況討論(操作數以8位為例):ABCMPA,B結論75A>0,B>0SF=0,OF=0則:A>B57情況A>0,B>0SF=1,OF=0則:A<B-525-7-2-5-71-7-5-5-(-7)+2A<0,B<0SF=1,OF=0則:A<BA<0,B<0SF=0,OF=0則:A>B-7-(-5)-2

3+127-50A>0,B<0OF=1,SF=1則:A>B+127-(-50)+177

4-50+127A<0,B>0SF=0,OF=1則:A<B-50-(+127)-1777-52127-(-50)=177在計算機中運算時

01111111+0011001010110001=-79分析以上四種情況得出如下結論:OF=SF=0或SF=OF=1時:記作SFOF=0,則:

A>B;

OF、SF異號時:記作SO=1,則:

A<B。CMP指令應用舉例:帶符號數找最大值

若自BLOCK開始的內存緩沖區中,有100個帶符號數。找出最大值。并存放到MAX單元中。思路:

第一個數取出

(AX),取出第二個數(第二個字單元內容)與(AX)比較: (AX)>第二個數,不做交換,否則,(第二個字單元內容)(AX)。再取第三個數,

經過99次比較,在(AX)中得到最大數。

…編程: … MOVBX,OFFSETBLOCK MOVAX,[BX] INCBX INCBX MOVCX,99AGAIN:CMPAX,[BX]

JGNEXT

;(AX)>(16d(ds)+(BX))轉NEXT MOVAX,[BX]NEXT: INCBX INCBX DECCX

JNZAGAIN MOVMAX,AX ;MAX單元存放最大值 …(三)乘法指令無符號MUL,帶符號IMULwhy/?因為:例:3×(-2)=-6,3×14=42(2AH)方法一:直接相乘0011×111000101010=2AH方法二:去掉符號位,相乘后,再添上符號位(取補碼)0011

×001000000110取補碼111111010=FAH=-6說明?SRC只能是通用REG或M尋址,不能是立即數。?只能是字節乘字節或字乘字?存儲器尋址時加類型說明,如

MULBYTEPTR[BX]MULWORDPTR[BX]格式:

MUL(IMUL)SRC;SRC字節:(AL)×SRCAXSRC字:(AX)×SRCDX:AX(四)除法指令

1、有符號數和無符號數除法指令格式:

DIV(IDIV)SRC;SRC字節:(AX)÷SRCAL(商)…AH(余數)SRC字:(DX:AX)÷

SRCAX(商)…DX(余數)注意:SRC不能是立即數;若商超出字或字節表示的范圍,自動

溫馨提示

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

評論

0/150

提交評論