




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章8086的指令系統西安建筑科技大學電子信息科學與技術張愛萍指令:使計算機執行某種特定操作的二進制編碼。指令系統:指一種計算機能夠識別和執行的所有不同指令的集合。
§3.18086的尋址方式(addressingmode)§3.28086指令系統(instructset)一、復習(1)高級語言與匯編語言
例:計算a+b
高級語言處理:只需定義a、b的類型;匯編語言處理:就需要知道a、b的位置,看a、b是存放在寄存器中,還是存儲器中。
(2)存儲器分段(畫圖)
2000:0002H12H2000:0000H偏移地址=0002H00000H.20000H20001H20002H20003H20004H...0FFFFFH......00H0000:0000HFFFF:FFFFH物理地址
邏輯地址(3)指令
MOVOPRD1,OPRD2OPRD1目的操作數
OPRD2源操作數目的〈——源如果操作數存放在存儲器中,稱為存儲器操作數,例:[2001],[BX],[BP]…;如果操作數放在寄存器中,稱為寄存器操作數,例AX,BX,CX…。二、基本概念(1)尋址方式尋找操作數地址的規則、方法。有效地址物理地址(2)有效地址偏移地址§3.18086的尋址方式
3.1.1
操作數的尋址方式立即數尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址、變址尋址基址、變址相對尋址1.立即數尋址在這種尋址方式中,操作數直接出現在指令中,不需要計算有效地址,執行速度較快,這種方式叫立即數尋址方式。
例:MOVAX,1234H這條指令的功能是:把立即數1234H送入AX中。圖3-1立即尋址示意圖說明:1、立即數只能是8位或16位整數,不能為小數或其他類型,若是16位,低字節在前高字節在后;2、立即數只能為源操作數,不能為目的操作數
;3、立即數是指令格式的一部分,放在代碼段中,得到指令,就得到操作數,而不需要運算操作數的地址,所以該種尋址方式是不需要尋址的;4、主要用于給REG或者Mem賦初值,也可以與寄存器操作數或者存儲器操作數進行邏輯運算。例:MOVAL,08H;
MOVAX,3697HADDAX,100H2.寄存器尋址例:MOVDS,AX圖3-2寄存器尋址示意圖
如果操作數就在CPU的內部寄存器中,那么寄存器名在指令中給出。這種尋址方式就叫寄存器尋址方式。說明:1、對16位操作數來說,寄存器可以為AX、BX,CX,DX、SI、DI、SP、BP、DS、SS、ES以及CS(但CS只能作為源操作數),對于8位操作數來說,寄存器可為AH,AL、BH,BL,CH,CL、DH,DL。
2、采用寄存器尋址方式的指令在執行時,操作就在CPU內部進行,因此執行速度快。
使用直接尋址方式時,數據總是在存儲器中,存儲單元的有效地址由指令直接指出,所以直接尋址是對存儲器進行訪問時可采用的最簡單的方式。例:MOVAX,
[2010H](假設DS=3000H
)物理地址=DS×16+2010H=3000H×16+2010H=32010H3.直接尋址指令功能是將32010H和32011H兩單元的內容送到AX中。圖3-3直接尋址方式示意圖MOVAX,BUF或MOVAX,[BUF]將DS段內以有效地址BUF(符號地址)起始的兩個單元的內容送入AX寄存器中要注意的是采用直接尋址方式時,如果指令前面沒有用前綴指明操作數在哪一段,則默認為段寄存器是數據段寄存器DS。
若操作數存放在其他段,指令中要使用段超越前綴來說明例:MOVBX,ES:[1200]
采用寄存器間接尋址方式時,操作數一定在存儲器中,存儲單元的有效地址由寄存器指出,這些寄存器可以為BX、BP,SI和DI之一,由于上述4個寄存器所黙認的段寄存器不同,這樣又可以分兩種情況:
①以SI、DI、BX進行間接尋址,則操作數通常存放在現行數據段中。操作數的物理地址為:(DS)×16+(SI/DI/BX)4.寄存器間接尋址例:MOVAX,[SI]
圖3-4間接尋址方式(1)示意圖
②寄存器BP間接尋址,則操作數存放在堆棧段區域中。物理地址:(SS)×16+(BP)例:MOVAX,[BP](假設SS=3000H)物理地址=SS×16+BP=30000H+2000H=32000H指令功能是將32000H和32001H兩單元的內容送到AX中。
圖3-5間接尋址方式(2)示意圖5.寄存器相對尋址
在這種尋址方式中,操作數存放在存貯器中。其物理地址為:(DS)×16+(SI/DI/BX)+8位或16位偏移量或(SS)×16+(BP)+8位或16位偏移量其中8位或16位偏移量可以是符號地址也可以是數值地址。例:MOVAX,DISP[SI]物理地址=DS×16+SI+DISP=30000H+1000H+0300H=31300H圖3-6相對尋址方式示意圖注:MOVBX,[BP+COUNT]書寫有下面的等效形式:MOVBX,[BP]+COUNTMOVBX,COUNT[BP]
在8086中,通常把BX和BP作為基址寄存器,而把SI、DI作為變址寄存器。將這兩種寄存器聯合起來進行的尋址就稱為基址、變址尋址。這時,其物理地址為:(DS)×16+(BX)+(SI/DI)或(SS)×16+(BP)+(SI/DI)6.基址、變址尋址例:MOVAX,[BX][SI]物理地址=DS×16+SI+BX=30000H+1000H+3000H=34000H指令功能是將34000H和34001H兩單元的內容送到AX中。
圖3-7基址、變址尋址方式(1)示意圖例:MOVAX,[BP][SI]物理地址=SS×16+BP+SI=30000H+3000H+1000H=34000H指令功能是將340000H和34001H兩單元的內容送到AX中。
圖3-8基址、變址尋址方式(2)示意圖例:MOVAX,DISP[BP][SI]物理地址=SS×16+SI+BP+DISP=30000H+1000H+3000H+0300H=34300H指令功能是將34300H和34301H兩單元的內容送到AX中。
這種尋址實際上是基址、變址尋址的擴充。其物理地址為:(DS)×16+(BX)+(SI/DI)+8位或16位偏移量(SS)×16+(BP)+(SI/DI)+8位或16位偏移量7.基址、變址相對尋址圖3-9相對基址、變址尋址方式示意圖小結
1、區分偏移地址和有效地址;
2、當操作數在存儲器中存放,共有五種尋址方式;
3、操作數采取哪一種尋址方式,會影響機器的運行速度和效率,因此選擇合適的尋址很重要。下節學習轉移類指令的尋址方式3.1.2轉移地址的尋址方式
段內直接尋址段內間接尋址段間直接尋址段間間接尋址必備知識一、尋址方式1、直接尋址——直接尋址方式2、間接尋址——寄存器間接尋址方式
寄存器相對尋址方式
基址、變址尋址方式
相對基址、變址尋址方式二、轉移(CS:IP決定指令在內存中的位置,那么發生轉移時)
段內轉移——轉移之前和之后在同一個代碼段內
此時CS不變,IP變化;段間轉移——轉移之前和之后在不同的代碼段內
此時CS、IP都變化.必備知識三、指令1、無條件轉移指令
JMPDISPJMPCXJMP[BX]
…2、條件轉移指令
JZDISPJNZDISP
…1.段內直接尋址
段內直接尋址方式也稱為相對尋址方式,轉移的目標地址:當前IP內容+8位或16位的位移量DISP。物理地址:CS×16+IP+DISP例:JZDISPJMPDISP(以此為例來說明)其中DISP是符號地址,也可以是數值地址,表示8位或者16位的位移量。假設DISP=50H,IP=1000H,CS=3000H,那么該指令使CPU轉向31050H去執行。
圖3-10段內相對轉移尋址方式示意圖JMPSHORTLOP;IP←(IP)+8位偏移量,段內短轉移,轉移范圍在-128B~+127B范圍內,轉向符號地址LOP處JMPNEARPTRL2;IP←(IP)+16位偏移量,段內近轉移,轉移范圍在正負32KB范圍,轉向符號地址L2處這種尋址方式適用于無條件轉移、條件轉移(偏移量僅為8位偏移量)指令。
這種尋址方式在段內進行,其轉移的目標地址由等于一個寄存器或存儲單元的內容。可以使用除立即數方式以外的任何一種尋址方式,例:JMPCX;IP←(CX)即:將寄存器CX的內容取代IP寄存器內容
JMP[BX];IP←[BX]即:將存儲器[BX]的內容取代IP寄存器內容2.段內間接尋址圖3-11段內間接尋址方式示意圖這種尋址方式只適合無條件轉移指令。假設CS=3000H,IP=1000H,DS=4000H,CX=4000H,BX=5000H,(45000H)=8830H。
在這種尋址方式中,指令直接提供了轉移目的地的段地址和偏移地址。用指令中指定的段地址來取代CS寄存器的內容,指定的偏移地址來取代IP寄存器的內容,完成從一個段到另一個段的轉移操作。例:JMPFARPTRDADD1功能:將DADD1所在的段基址——〉CS寄存器,偏移地址——〉IP寄存器,
DADD1是目標地址,用符號表示,FARPTR是表示段間直接轉移的操作符。特點:程序執行從一個代碼段轉移到另一個代碼段。3.段間直接尋址圖3-12段間直接尋址方式示意圖假設指令JMPFARPTRDADD1位于C1內,程序執行此指令時
CS=2000H,IP=3000H。目標地址DADD1位于段基址為4000H的C2內,偏移量為3000H。那么執行指令后,程序從43000H單元開始執行。
用存儲器兩個連續字內容取代IP和CS寄存器的原始內容,從而達到段間轉移的目的。例:JMPDWORDPTR[BP][DI]
轉移地址:
(IP)←(SS:BP+DI)(CS)←(SS:BP+DI+2)由于確定轉移地址需要32位信息,因此只適用于存貯器尋址方式。4.段間間接尋址圖3-13段間間接尋址方式示意圖假設CS=2000H,SS=3000H,BP=1000H,DI=2000H,(33000H)=2000H,(33002H)=8000H。下面我們學習I/O端口的尋址方式代碼段1堆棧段代碼段2I/O端口尋址:
操作數存放在I/O端口的方式。1.直接I/O端口尋址方式
(用八條地址線編址)端口地址由指令直接提供的一個8位立即數,這種尋址方式只能用于00H~FFH的固定端口尋址。例:INAL,13H2.間接I/O端口尋址方式(用16條地址線編址)
被尋找的端口地址由DX寄存器給出,由于DX能表達16位地址,可訪問64K范圍內的I/O端口。例:MOVDX,1234H OUTDX,AL3.1.3I/O端口尋址
下面我們學習指令系統8086的指令系統大致可分為6種類型:①數據傳送指令②算術運算指令③邏輯運算指令④控制轉移指令⑤串處理指令⑥處理機控制指令
§3.28086指令系統關于指令的學習要點:1、指令格式;2、指令功能;3、指令使用說明;4、指令對標志寄存器的各個位有沒有影響.
3.2.1數據傳送指令1.通用傳送指令通用傳送指令中包括:
基本傳送指令MOV
交換指令XCHG
堆棧指令PUSH和POP數據傳送指令是計算機中最基本、最常用、最重要的一種操作。它的功能是把操作數傳送到目的地址。(1)基本傳送指令圖3-14數據傳送方向示意圖
指令格式:MOVdst,src執行功能:該指令可把一個字節或一個字操作數從源地址傳送到目的地址中去。dst:可以是累加器、寄存器、存貯器;src:可以是累加器、寄存器和存貯器以及立即操作數。說明:從通用寄存器到通用寄存器
MOVAX,BX
;傳送寄存器BX內容至AX,BX的內容保持不變
MOVBL,AL
(2)從立即數到通用寄存器
MOVAX,0066H;AX=0066HMOVBH,03H;BH=03H
注意:立即數不能直接送段寄存器MOVDS,2000H
錯誤MOVAX,2000HMOVDS,AX
正確(3)從立即數到存儲器立即數可以傳送到存儲器的任何存儲單元,存儲單元可采用直接、寄存器間接、寄存器相對、基址變址(相對)尋址MOVWORDPTR[BX],84;傳送立即數84送至一個存儲單元,存儲單元的有效地址由BX給出
MOVBYTEPTR[BX+SI],84;傳送立即數84送至一個存儲單元,存儲單元的有效地址由BX和SI給出(4)從存儲器到通用寄存器存儲器中任何存儲單元的內容可以直接傳送到通用寄存器
MOVSI,MEM_VALUEMOVDX,ARRAY[SI](5)從通用寄存器到存儲器
MOVARRAY[BX+DI],DXMOVMEM_VALUE,AX從存儲器或通用寄存器到段寄存器
除CS寄存器不能作為目的操作數,換句話說,這個寄存器的值不能隨意修改。而IP寄存器既不能作源操作數,也不能作目的操作數。例如:
MOVCS,[35AH]
錯誤
MOVCS,AX
錯誤
MOVAX,IP
錯誤
MOVIP,WORDPTR[BX]
錯誤
(7)從段寄存器到存儲器或通用寄存器
此類指令,CS可作為源操作數使用。
MOVDX,DSMOVBX,ESMOVGAMMA,CS(8)
MOV指令對標志位沒有影響。
(9)需要注意的是,MOV指令不能在兩個存貯器單元之間進行數據直接傳送。如:
MOV[2000H],[35AH]
錯誤
MOVWORDPTR[BX],[8729H]
錯誤
為了實現存貯器單元之間的數據傳送,必須用內部寄存器作為中介。
MOVAL,DATAlMOVDATA2,AL實際上,上述幾點中有些對于其它通用傳送指令,甚至其他種類的指令也是適合的,由讀者在后面的學習中去思考。(2)交換指令例如:看書指令格式:
XCHGOPR1,OPR2功能:OPR1
,OPR2中的內容互換,分三步(TEMP)(OPR1);(OPR1)(OPR2);(OPR2)(TEMP);指令規定:參加交換的兩操作數必須有一個是寄存器操作數,
也就是只能在兩個8/16位通用寄存器之間,8/16位通用寄存器和MEM之間內容互換。且兩操作數類型必須一致。(3)堆棧操作指令PUSHsrc(壓入堆棧指令)操作:SPSP-2,(SP+1,SP)srcPOPdst(彈出堆棧指令)操作:(dst)(SP+1,SP),SPSP+2例如:
MOVAX,1234HMOVDX,5678HMOVSP,2000HPUSHAXPUSHDX┇POPDXPOPAX當執行完兩條壓入堆棧的指令時,堆棧中的內容如圖所示。
①SP-2→SP ;SP=1FFEH ,(SP)←AX②SP-2→SP ;SP=1FFCH ,(SP)←DX①DX←(SP) ;SP+2→SP ,SP=1FFEH②AX←(SP) ;SP+2→SP ,SP=2000H說明:1)、每執行一條壓入堆棧指令,堆棧地址指針SP減2,壓入堆棧的數據放在棧頂。彈出堆棧的過程與此剛好相反,每彈出1個字,棧頂指針SP的值加2;2)、該指令在子程序和中斷服務程序中使用;3)、堆棧指令進行的是字操作,對標志位沒有影響;4)、SP的值任何時候總是指向當前的棧頂;5)、該指令可用除立即數以外的其他尋址方式;6)、PUSH指令的操作數為寄存器(IP除外)或存儲單元7)、POP指令的操作數為寄存器(CS除外)或者存儲單元2.地址傳送指令地址傳送類指令包括:LEA指令LDS指令(不講)LES指令(不講)共同點:源操作數均為存儲器操作數指令格式:LEAREG,SRC執行功能:REGSRC,該指令把給出的源操作數的有效地址傳送到指定的寄存器。源操作數必須是一個存儲器操作數,目的操作數必須是一個16位的通用寄存器。這條指令通常用來建立串指令操作所需的地址指針。SRC可以是變量名、標號或地址表達式
LEABX,DATA和MOVBX,OFFSETDATA等價
LEASI,BUFFER和MOVSI,OFFSETBUFFER等價
(1)LEA指令輸入/輸出指令用來完成累加器(AX/AL)與I/O端口之間的數據傳送功能。3.累加器專用傳送指令
IN
輸入指令指令格式:IN
AL,PORT(字節操作);
IN
AX,PORT(字操作);
IN
AL,DX(字節操作);
IN
AX,DX(字操作);
執行操作:將指定端口中的內容送至累加器(1)輸入/輸出指令
OUT輸出指令指令格式:OUT
PORT,AL(字節操作);
OUT
PORT,AX(字操作);
OUT
DX,AL(字節操作);
OUT
DX,AX(字操作);執行操作:將累加器中的內容傳送到指定端口說明:在8086/8088系統中,I/O端口與CPU之間的信息交換由IN和OUT指令完成。外部設備的地址取值范圍為0000H~FFFFH.若端口地址在00H~FFH之間,可以使用直接尋址方式;若端口地址的尋址范圍是64K(0000H~FFFFH),由16位寄存器DX來作間接尋址。
例如:INAX,20H;將端口號為20H、21H單元的內容送AX中OUT 22H,AL;將AL中的數據從22H端口輸出MOV DX,210H;端口地址210H送DXIN AL,DX;讀210H端口一個字節到AL中OUT DX,AX;將AX中的數據從210H端口輸出
指令格式:XLAT
OPR或XLAT執行操作:AL←(BX+AL)指令功能:AL←DS:[BX+AL];把BX的值作為內存字節數組首地址、下標為AL的數組元素的值傳送給AL。有兩個隱含操作數BX和AL。對標志位的影響:不影響標志位用途:用于查表,表首地址的偏移地址在BX中,表長度可達256字節。例看書(2)XLAT換碼指令4.標志寄存器傳送指令⑴LAHF
讀標志指令指令格式:LAHF執行操作:AH←FLAG0-7。⑵SAHF
寫標志指令指令格式:SAHF執行操作:FLAG0-7←AH;對標志寄存器的影響:直接影響標志位。⑶PUSHF
標志寄存器進棧指令指令格式:PUSHF執行操作:SP←SP-2,(SP+1,SP)←FLAG標志寄存器內容。對標志寄存器的影響:不影響標志位⑷POPF
標志寄存器出棧指令指令格式:POPF執行操作:FLAG←(SP+1,SP),SP←SP+2,影響標志位。對標志寄存器的影響:影響標志位小結
8086的數據傳送指令有通用傳送指令、地址傳送指令、累加器專用指令以及標志傳送指令4類,以實現CPU的內部寄存器之間、CPU和存儲器之間、CPU和I/O端口之間的數據傳送。
8086可提供加、減、乘、除4種基本算術運算的操作指令。這些指令可實現字節或字的運算,也可以用于有符號數和無符號數的運算。圖3-15進行加、減運算的源操作數和目的操作數的關系3.2.2算術運算指令(4類)1.加法指令(3條)(1)不帶進位的加法指令指令格式:ADDdst,src指令功能:dst←(dst)+(src)源操作數可以是累加器、通用寄存器、存貯器和立即數。目的操作數可以是累加器、通用寄存器或存貯器。例如:ADD AL,30 ;AL←AL+30ADD AX,1234H ;AX←AX+1234HADD AX,BX ;AX←AX+BXADDCX,MEM_WORD;
CX←CX+(MEM_WORD)ADDMEM_WORD,AX;
(MEM_WORD)
←AX+(MEM_WORD)
ADD BETA[SI],100;(SI+BETA)←((SI+BETA))+100ADD BETA[SI],AX;(SI+BETA)←((SI+BETA))+AX說明:1)在使用時還要注意兩個操作數類型一致。例如:ADDAX,0CFA8H若指令執行前,AX=5623H,則指令執行后,AX=25CBH,且CF=1,OF=0,SF=0,ZF=0,AF=0,PF=0。
2)兩個存儲器操作不能直接相加。(2)帶進位的加法指令指令格式:ADCdst,src指令功能:dst←(dst)+(src)+CF
這條指令與ADD指令基本相同,只是在對兩個操作數進行相加運算時還應加上進位位的當前值,然后再將結果送至目的操作數。主要用于雙精度(雙字長)以及多字節的數據運算。例如:現有兩個雙精度字902387A5H和27BCB400H,其中被加數902387A5H存放在DATA1為首的內存單元中,加數27BCB400H存放在DATA2為首的內存單元中。要求結果存放在DATA3為首的單元中。MOVAX,DATA1ADDAX,DATA2MOVDATA3,AXMOVAX,DATA1+2ADCAX,DATA2+2MOVDATA3+2,AX該指令對標志位的影響與ADD指令對標志位的影響相同。圖3-16雙精度字算術運算示意圖看書例(3)INC加1指令指令格式:INCdst指令功能:dst←(dst)+1其操作數可以是通用寄存器,也可以是存儲器。例如:INCALINCCXINCMEM_WORD[BX]在循環程序中常用于修改地址指針和循環次數等。該指令執行結果對標志位AF、OF、PF、SF和ZF有影響,而對CF位不產生影響.如在執行INCBL指令前,BL=0FFH,執行后BL=00H,但不影響CF的值。2.減法指令(5條)(1)不帶借位的減法指令指令格式:SUBdst,src指令功能:dst←(dst)-(src)源操作數src:可以是累加器、通用寄存器、存儲器、立即數;目的操作數dst:可以是累加器、通用寄存器、存儲器。指令執行后對各狀態標志位OF、SF、ZF、AF、PF和CF均可產生影響。
(2)帶借位的減法指令指令格式:SBBdst,src指令功能:dst←(dst)-(src)-CF該指令與SUB相類似,只不過在兩個操作數相減時,還應減去借位標志CF的當前值。這條指令主要用于雙精度(雙字長)以及多字節的減法運算。
該指令對標志位AF、CF、OF、PF、SF和ZF都將產生影響。
(3)DEC減1指令指令格式:DECdst指令功能:dst←(dst)-1所用的操作數可以是寄存器,也可以是存儲器。在相減時,把操作數看作為無符號的二進制數。該指令執行結果將影響標志位AF、OF、PF、SF和ZF,但對CF標志不產生影響,例如:
MOVAX,0000H;AX=0000HDECAX;AX=FFFFH,ZF=0,OF=0,SF=1,PF=1,AF=1,CF不變(4)NEG求補指令指令格式:NEGdst指令功能:dst←0-(dst)
或dst←(dst)取反+1例如:NEGALNEGWORDPTR[SI]
如果操作數為0時,求補運算的結果使CF=0,其余情況CF=1;當操作數的值為-128(16進制數為80H)或者一32768(16進制數為8000H)執行求補指令后,溢出標志OF=1,其余情況均為0.(5)比較指令指令格式:CMPdst,src指令功能:(dst)-(src)該指令執行減法操作,不保存相減的結果。指令執行后兩操作數的內容不變,但相減的結果影響標志位AF、CF、OF、PF、SF、ZF。在程序設計時,比較指令后一般緊跟條件轉移指令。例如:MOVBX,4336HCMPBX,0136JCDISP如何利用狀態標志來判斷兩操作數的關系呢?下面分三種情況來分析。1)兩個操作數相等如果所比較的兩個操作數相等時,那么標志位ZF=1,所以根據ZF就可以判斷兩數是否相等。2)兩個操作數不等兩個無符號數的比較無符號數相減時,CF就是借位標志。如果CF=0,表示無借位,即被減數大,減數小。如果CF=1,表示有借位,即被減數小,減數大。
兩個有符號數的比較(1)A、B同號:A>0,B>0或A<0,B<0,此時A-B不會溢出(OF=0),因而只需判斷SF的值即可。當A>=B時,SF=0,反之,SF=1。(2)A、B異號:
A>0,B<0或A<0,B>0,A-B有可能會溢出,分兩種情形討論:當無溢出(OF=0),A>=B時,SF=0,否則SF=1;當有溢出(OF=1),A>=B時,SF=1,否則SF=0[A+B]補=[A]補+[B]補,[A-B]補=[A]補+[-B]補兩個有符號的比較時,同符號數相比較,相減的結果不會超出帶符號數的表示范圍,即不會產生溢出,OF=0;兩個不同號的帶符號數比較,相減的結果有可能產生溢出。這時可以用如下結論判斷:當OF⊕SF=0時,A>=B;當OF⊕SF=1時,A<B.例:CMP
AL,0 ;AL和0進行比較
JGE
NEXT ;若AL≥0則轉到NEXT執行
例若自BLOCK開始的內存緩沖區中,有100個帶符號的數,希望找到其中最大的一個值,并將它放到MAX單元中。
MOV
SI,OFFSETBLOCK MOV AL,[SI] INC SI MOV CX,99AGAIN:CMP AL,[SI] JG NEXT MOV AL,[SI]NEXT:INC SI DEC CX JNE AGAIN MOV MAX,AL HLT 循環初始化循環內容循環控制(1)無符號數乘法指令MUL指令格式:MULsrc指令功能:若src為字節數據,則執行AX←AL×(src);
若src為字數據,則執行DX、AX←AX×(src)3.乘法指令(2條)目的操作數為:AL或AX(隱含給出)源操作數為:通用寄存器、存儲器。不能為立即數和段寄存器。
例:MOVAX,0FFFFHMOVBX,0010HMULBL;BL=10H,AX=0FF0H,CF=1,OF=1例:MOVAX,0FFFHMOVBX,0010HMULBX;BX=0010H,DX=0000H,AX=FFF0H,CF=0,OF=0MUL指令對狀態標志SF、ZF、AF、PF不影響,
CF、OF由運算結果來確定。當乘積結果的高半部分為零時(字節操作的AH,字操作的DX),CF和OF均為0,否則均為1。(2)帶符號數乘法指令IMUL指令格式:IMULsrc指令功能:若src為字節數據,則執行AX←(AL)×(src)
若src為字數據,則執行DX、AX←(AX)×(src)目的操作數為:AL或AX(隱含給出)源操作數為:通用寄存器、存儲器。不能為立即數和段寄存器。IMUL指令對CF、OF有影響。當乘積結果的高半部分是低半部分的符號擴展時,二者均為0,否則均為1。例見P54。(1)無符號數除法指令DIV指令格式:DIVsrc指令功能:src為8位:AL(商)←(16位)÷(8位)AH(余數)←(16位)÷(8位)
且被除數在AX中;
src為16位:AX(商)←(32位)÷(16位)DX(余數)←(32位)÷(16位)
且被除數在AX與DX中。4.除法指令(4條)例如:在存儲器中有X和Y兩個單元,存有無符號數,現要求完成X/Y,將商存入Z單元。執行的指令如下:
MOVAL,XMOVAH,0DIVYMOVZ,AL(2)IDIV帶符號數除法指令指令格式:IDIVsrc指令操作:與DIV指令相同,但被除數、除數、商、余數全部均為帶符號數,且余數的符號位同被除數。說明:(1)、如果是一個雙字除以一個字,即進行(32位)÷(16位),則商的范圍為-32768~32767;(2)、如果是一個字除以一個字節,即進行(16位)÷(8位),則商的范圍為-128~127。運算結果超出了表示范圍,那么會作為除數為0的情況來處理,即產生0號中斷。(3)CBW字節轉換為字指令指令格式:CBW指令功能:AL中的符號位擴展到AH中。若AL中的D7=0,則(AH)=00H;若AL
的D7=1,則(AH)=FFH。例:MOVAL,-16;AL=0F0H(-16)
CBW;AX=0FFF0H(-16)符號擴展指令擴展帶符號數的字節數為16位或者32位(4)CWD字轉換為雙字指令指令格式:CWD指令功能:AX中的符號位擴展到DX中。若AX中的D15=0,則(DX)=0000H;
若AX的D15=1,則(DX)=FFFFH。例:MOVAL,-16;AL=0F0H(-16)
CBW;AX=0FFF0H(-16)
CWD;
DXAX=0FFFFFFF0H(-16)加法減法乘法除法ADDSUBMULDIVADCSBBIMULIDIVINCDECCMPNEG算術運算類指令小結符號擴展指令:CBW和CWD例:編程實現[v-(x*y+z-540)]/x。假設x,y,z,v均為16位的有符號數,而且x,y,z在相應的內存單元中,要求:將上式計算結果的商存入AX,余數存入DX。
MOV
AX,x IMUL y;x*y MOV CX,AX MOV BX,DXMOV AX,Z CWD ADDCX,AXADCBX,DX;x*y+z SUB CX,540 SBB BX,0;x*y+z-540 MOV AX,vCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)MOVCX,xIDIVCX ;[v-(x*y+z-540)]/x1.邏輯運算指令8086邏輯運算指令包括AND(與)OR(或)
NOT(非)
XOR(異或)指令
TEST(測試)指令3.2.3位操作指令(包括邏輯運算和移位指令)(1)AND邏輯“與”指令指令格式:ANDdst,src指令功能:dst←(dst)∧(src)特點:只有參加相與的兩位全為“1”時,相“與”結果才為“1”,否則相“與”結果為“0”。相“與”結果送回目的操作數。
AND指令可以進行字節操作,也可以進行字操作。目的操作數:可以是累加器,也可以是通用寄存器,也可以是存儲器。源操作數:可以是立即數、寄存器,也可以是存儲器。且二者不能同時為存儲器操作數。所以AND[BX],[BX]是錯誤的。用途:某一個操作數,如果自己與自己相“與”,操作數不變,但可以使進位標志位CF清0。
例:ANDAL,AL;
AL中的內容不變,CF=0。
要將寄存器某些位屏蔽,可用AND指令。例:ANDAL,OFCH;把AL中的第0、1位屏蔽。對標志寄存器的影響:該指令執行以后,標志位CF=0,OF=0。標志位PF、SF、ZF反映運算的結果,而標志位AF未定義。
(2)OR邏輯“或”指令指令格式:OROPRDl,OPRD2指令功能:OPRD1←(OPRD1)∨(OPRD2)特點:只要參加相“或”的兩位中任一位為“1”時,相“或”結果為“1”,如果兩位都為0時,其結果才為0。
OR指令可以進行字節操作,也可以進行字操作。目的操作數OPRDl:可以是累加器、通用寄存器、也可以是存儲器。源操作數OPRD2:可以是立即數、寄存器,也可以是存儲器。且二操作數不能同時為存儲器。對標志位的影響:OF=CF=0,SF、ZF、PF標志反映運算結果。用途:用或指令可以使操作數的某些位置1,其他位則保持不變。例如:ORAL,20H;把AL中的第5位置1
邏輯“或”有時又稱為邏輯“加”。例如:MOVAL,60HMOVBL,08HORAL,BL
結果AL為68H。(3)NOT邏輯求反指令指令格式:NOTdst指令功能:dst←dst
該指令對操作數進行求反操作,然后將結果送回。操作數可以是寄存器或存貯器的內容。該指令對標志位不產生影響。例如:
MOVAL,8FHNOTAL
兩條指令執行后AL=70H。
(4)XOR邏輯“異或”指令指令格式:XOROPRDl,OPRD2指令功能:OPRD1←(OPRD1)⊕(OPRD2)特點:只有參加相“異或”的兩位值不同時,其結果為“1”;否則就為0。
XOR指令可以進行字節操作,也可以進行字操作。目的操作數OPRDl:可以是累加器、通用寄存器,也可以是存儲器。源操作數OPRD2:可以是立即數、寄存器,也可以是存儲器。且二操作也不能同時為存儲器操作數。對標志位的影響:標志位CF=0,OF=0,標志位PF、SF,ZF將反映“異或”操作的結果。標志AF未定義。用途:要使操作數的某些位變反可以使用XOR指令,只要把源操作數中立即數字段的相應位置1就可以達到目的。例如:求AL內容第0、1、2三位變反
XORAL,7
指令功能:對AL中的0、1、2位求反。
XOR指令多用于檢測數據位的變化,兩個數據輸入相同,則輸出為零,否則,輸出為1。指令執行后可使寄存器清零。例如:XORAX,AXXORSI,SI(5)TEST測試指令指令格式:TESTdst,src;指令功能:(dst)∧(src)
該指令的操作功能與AND指令相同,其結果將反映在標志位上,但結果不送回。對標志位的影響:OF=CF=0,SF、ZF、PF標志反映運算結果。用途:利用該指令,可以在不改變原有操作數的情況下,用來檢測某一位或某幾位是“0”不是“1”。編程時作為條件轉移指令的先行指令。例如:若要檢測AL中的最高位是否為1,且為1時則轉移。在這種情況下可以用如下指令:
TESTAL,80HJNZTHERE
┇THERE:MOVBL,05H例:見書P59關于AND、OR、XOR指令的使用口訣:某位和1“與”不變,和0“與”則清零;某位和1“或”為1,和0“或”則不變;某位和1“異或”則求反,和0“異或”則不變。2.移位指令
SAL/SHL算術左移和邏輯左移指令
SAR算術右移指令
SHR邏輯右移指令
ROL不帶進位的循環左移指令
ROR不帶進位的循環右移指令
RCL帶進位的循環左移指令
RCR帶進位的循環右移指令shiftrotate(1)SAL算術左移(ShiftArithematicLeft)和SHL邏輯左移(ShiftLogicLeft)指令指令格式:SAL/SHLOPRD,CL/1指令功能:這兩條指令的操作結果是完全一樣的,將目的操作數OPRD中的二進制數向左移動1位或按CL寄存器中指定的位數。左移一位時,操作數的最高位移出送到CF中,同時最低位送0。圖3-17算術左移/邏輯左移目的操作數OPRD:可以是累加器、寄存器、也可是存儲器。目的操作數可以是8位,也可以16位。對標志位的影響:除AF任意外,操作結果影響CF、PF、ZF、SF、OF用途:利用左移1位操作可實現操作數乘2的運算。例如:SHLAL,1MOVCL,4SHLAL,CL利用左移一位操作,通過CF可判斷一個數是正數還是負數。(2)SAR算術右移指令(ShiftArithematicRight)
指令格式:SAROPRD,CL/1指令功能:該指令每執行一次移位操作,就使操作數右移一位,但符號位保持不變,而最低位移至標志位CF,目的操作數可以是8位,也可以16位。
例如:MOVAH,5AHSARAH,1
指令執行完后,(AH)=2DH,CF=0用途:可保持目的操作數的符號位不變,用于有符號數移位。(3)SHR邏輯右移指令(ShiftLogicRight)
指令格式:SHROPRD,CL/1指令功能:該指令每執行一次移位操作,就使操作數右移一位,左面的最高位將補0,最低位移至標志位CF中。目的操作數可以是8位,也可以16位。
例如:MOVBL,4EHSHRBL,1
指令執行后,(BL)=27H,CF=0
用途:1、可用于截取字節或字中的某些位。2、右移n位,相當于把二進制數除以2n3.循環移位指令(1)ROL不帶進位的循環左移指令(RotateLeft)指令格式:ROLOPRD,CL/1指令功能:左移一位時,操作數的最高位移出送到CF中,同時送至最低位。目的操作數可以是8位,也可以16位。
例如:MOVAL,5BHROLAL,1指令執行完后,(AL)=B6H,CF=0(2)ROR不帶進位的循環右移指令(RotateRight)指令格式:ROROPRD,CL/1指令功能:右移一位時,操作數的最低位移出送到CF中,同時送至最高位。目的操作數可以是8位,也可以16位。
例如:MOVAL,6BHROLAL,1
指令執行完后,(AL)=B5H,CF=1(3)RCL帶進位的循環左移指令
(RotatethroughCFLeft)指令格式:RCLOPRD,CL/1指令功能:左移一位時,操作數的最高位移出送到CF中,而原來的CF位送至最低位。目的操作數可以是8位,也可以16位。
例如:RCLAL,1
執行指令前AL=4CH,CF=1
則指令執行后,(AL)=99H,CF=0(4)RCR帶進位的循環右移指令
(RotatethroughCFRight)指令格式:RCROPRD,CL/1指令功能:右移一位時,操作數的最低位移出送到CF中,而原來的CF位送至最高位。
例如:RCRAL,1
執行指令前AL=5CH,CF=1
則指令執行完后,(AL)=AEH,CF=03.2.4串操作指令準備工作包括:
源(讀出)存儲區首地址放入DS:SI
目的(寫入)存儲區首地址放入ES:DI
串的長度放在CX寄存器中根據需要建立方向標志位DF的值。(控制DF方向的指令:CLD和STD)1、MOVS(MoveString)串傳送指令指令格式:MOVSOPRD1,OPRD2MOVSB;字節傳送
MOVSW;字傳送指令功能:((DI))←((SI))字節操作SI←(SI)
1;DI←(DI)
1;字操作SI←(SI)
2;DI←(DI)
2;該類指令執行時,將把當前數據段中用SI指針指出的源串的一個字節或者一個字傳送到DI指針指向的附加段的目的地址中去,并根據DF的值來確定串傳送的方向。2、LODS(LoadString)串裝入指令(讀串)指令格式LODSOPRD1,OPRD2LODSB;字節傳送
LODSW;字傳送指令功能:字節操作AL←((SI))
SI←(SI)
1
字操作AX←((SI))
SI←(SI)
2
該類指令是字串裝入指令。它將由SI所指定的源串字節或字裝入到累加器AL或AX中去,并根據DF的值修改指針SI,以指向下一個要裝入的字節或字。
3、STOS(StoreString)串存儲指令(寫串)指令格式:STOSOPRD1,OPRD2STOSB;字節存儲
STOSW;字存儲指令功能:字節操作((DI))←(AL)
DI←(DI)
1
字操作((DI))←AXDI←(DI)
2
該類指令是字串存貯指令。它將AL或AX中的字節或字存貯到由DI所指定的附加段中去,且根據DF的值來修改DI的值。4、CMPS(CompareString)串比較指令指令格式:CMPSOPRD1,OPRD2CMPSB;字節比較
CMPSW;字比較指令功能:((SI))-((DI))字節操作SI←(SI)
1;DI←(DI)
1;字操作SI←(SI)
2;DI←(DI)
2;
該類指令執行時,將當前數據段由SI所指出的字節和字同當前附加段中由DI所指出的目的串的字節或字進行比較,把比較結果送標志位。該指令對操作數不產生影響。
5、SCAS(ScansString)串掃描指令指令格式:SCASOPRD1,OPRD2SCASB;字節掃描
SCASW;字掃描指令功能:字節操作AL-((DI))
DI←(DI)
1;字操作AX-((DI))
DI←(DI)
2;
該類指令是串掃描指令,用于尋找內存區中指定的數據和字符。指令執行時,AL/AX的值減去(ES:DI)存儲單元的內容,ZF=1,內容相同,否則不同,結果將改變標志位,但不改變操作數的值。
為解決對CX的控制,采用兩種方法:在程序中用“DECCX”或LOOP指令將數據長度減1,用以控制整個數據串的處理。使用指令前綴。所謂指令前綴,是寫在串指令之前的、用以控制整個串數據處理的前綴。它不能單獨成為指令而被執行。指令前綴有3種,它們分別與不同串指令結合在一起使用,以達到控制的目的。(1)重復前綴REP重復串操作直到CX=0為止。格式:REPstringprimitive其中stringprimitive可為MOVS,LODS或STOS指令。執行操作:①如CX=0則退出REP,否則繼續執行;②CX←CX-1;③執行其后的串指令;④重復①~③。6、指令前綴(2)重復前綴REPE/REPZ相等或為零時重復操作指令格式為:REPE/REPZstringprimitive其中stringprimitive可為CMPS指令。執行的操作:①如CX=0或ZF=0(即某次比較的結果兩個操作數不等)時退出,否則繼續執行;②CX←CX-1;③執行其后的串指令;④重復①~③。
(3)重復前綴REPNE/REPNZ不相等或不為零時重復操作指令格式為:REPNE/REPNZstringprimitive其中stringprimitive可為SCAS指令。執行的操作:①如CX=0或ZF=1(即某次比較的結果兩個操作數相等)時退出,否則繼續執行;②CX←CX-1;③執行其后的串指令;④重復①~③。
例如:將1000個字符的字符串從內存的BUFFERl搬移到內存的BUFFER2中去。
MOVSI,OFFSETBUFFERl;
MOVDI,OFFSETBUFFER2;
MOVCX,1000;
CLDREPEMOVSB;注意,上述程序中的BUFFERl應處于DS段中,而BUFFER2應處于ES段中。上面的程序還可以寫成:
MOVCX,1000CLDLEASI,BUFFERlLEAD1,BUFFER2NEXT:MOVSBLOOPNEXT
例:判斷上例中已傳送好的數據串有無傳送錯誤。CLDLEADI,OFFSETBUFFER2LEASI,OFFSETBUFFER1MOVCX,1000REPECMPSBJNZNEXTMOVAL,0JMPDONENEXT:MOVAL,0FFH……DONE:例:在數據段定義首地址為A的10個字符,將這10個字符以相反次序傳送到附加段首地址為B的內存單元中。編寫程序如下:
LEASI,A
LEADI,B
ADDDI,9
MOVCX,10MOVE:CLD
LODSB
STD
STOSB
LOOPMOVE1.無條件轉移指令(跳轉指令),以JMP作為助記符。無條件轉移指令使程序離開原程序位置而跳轉到JMP指令指定的另一個程序位置去執行。(1)段內直接短轉移指令格式:JMPSHORTOPR指令功能:IP←(IP)+8位偏移量其中OPR為轉移目標地址,可直接使用符號地址,SHORT為屬性運算符,指示匯編程序將地址匯編成8位偏移量,范圍在-128~+127之內。
3.2.5程序控制指令(5種)例:AA:JMPSHORTNEXT…NEXT:MOVAX,1234H…目的地址NEXT與源地址AA下一條指令之間保持在-128到+127范圍內。(2)段內直接近轉移指令格式:JMPNEARPTROPR指令功能:IP←(IP)+16位偏移量其中OPR為轉移目標地址,可直接使用符號地址,又稱標號。NEARPTR為屬性運算符,指示匯編程序將地址匯編成16位偏移量,范圍在64K之內。例:AA:JMPNEARPTRNEXT…NEXT:MOVAX,1234H…目的地址NEXT與源地址AA下一條指令之間保持在正負32KB范圍內。(3)段內間接轉移指令格式:JMPWORDPTROPRD指令功能:IP←(EA)OPRD的有效地址由尋址方式決定。OPRD為除立即數以外的任何一種尋址方式,寄存器尋址,把寄存器中的內容送到IP中;存儲器尋址,把存儲器單元的內容給IP指針。可以直接地說,段內間接轉移,其轉移地址在寄存器中或存儲器中。例如:MOVCX,2000HJMPCX(4)段間直接轉移指令格式:JMPFARPTROPR指令功能:IP←OPR的段內偏移地址
CS←OPR所在段的段基址(5)段間間接轉移指令格式:JMPDWORDPTROPR功能:
IP←(EA)CS←(EA+2)段間轉移時,目的地址與JMP指令所在地址不在同一段內。執行該指令
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國羊奶行業營銷態勢與消費趨勢研究報告
- 2025至2030中國鹽酸洛美沙星片行業競爭狀況及需求潛力研究報告
- 2025至2030中國焦寶石行業發展環境及競爭格局展望研究報告
- 2025至2030中國溫度補償晶體振蕩器行業發展方向與需求前景研究報告
- 2025至2030中國液態硅膠市場多元化發展趨勢及經營形勢研究報告
- 2025至2030中國涂膜烘干機市場深度調查與前景策略研究報告
- 2025至2030中國無花果市場供需平衡分析及投資盈利研究報告
- 2025至2030中國無人駕駛汽車市場融資趨勢預測及項目投資建議報告
- 2025至2030中國整燙設備市場經營效益與需求趨勢研究報告
- 2025至2030中國急救輸液泵市場供需規模及未來運作模式研究報告
- 個人參保證明翻譯模板(英文版)
- 基因表達載體的構建張課件
- 員工入職申請表模板
- 中國傳統服飾唐裝漢服古裝文化傳承紡織服裝設計PPT
- 中國主要地理界線 課件(28張PPT)
- 一般行業主要負責人和安全管理人員考試復習題庫
- 計算機組裝與維護立體化教程ppt課件(完整版)
- 安全安全資金使用計劃
- 痛風性關節炎 課件
- 項目部管理人員名單
- 《新編英語語法教程》主要章節語法術語
評論
0/150
提交評論