微機(jī)原理及應(yīng)用:第四章80868088的指令系統(tǒng)_第1頁
微機(jī)原理及應(yīng)用:第四章80868088的指令系統(tǒng)_第2頁
微機(jī)原理及應(yīng)用:第四章80868088的指令系統(tǒng)_第3頁
微機(jī)原理及應(yīng)用:第四章80868088的指令系統(tǒng)_第4頁
微機(jī)原理及應(yīng)用:第四章80868088的指令系統(tǒng)_第5頁
已閱讀5頁,還剩136頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第四章 8086/8088的指令系統(tǒng) 指令系統(tǒng)(指令集):微機(jī)能夠識別和執(zhí)行的全部指令。不同的微處理器對應(yīng)的指令系統(tǒng)不相同,但8086和8088的指令系統(tǒng)完全系統(tǒng)。8086指令系統(tǒng)中包含133條基本指令。 按功能可分為:數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算類指令、邏輯運(yùn)算與移位類指令、字符串處理類指令、控制轉(zhuǎn)移類指令、處理器控制類指令和中斷指令。 第一節(jié) 指令格式操作碼說明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成部分操作數(shù)是指令執(zhí)行的參與者,即各種操作的對象有些指令不需要操作數(shù),通常的指令都有一個或兩個操作數(shù),也有個別指令有3個甚至4個操作數(shù)操作碼操作數(shù)指令由操作碼和

2、操作數(shù)兩部分組成指令的助記符格式操作數(shù)2,常被稱為源操作數(shù)src,它表示參與指令操作的一個對象操作數(shù)1,成被稱為目的操作數(shù)dest,它不僅可以作為指令操作的一個對象,還可以用來存放指令操作的結(jié)果分號后的內(nèi)容是對指令的解釋 操作碼 操作數(shù)1,操作數(shù)2 ;注釋每種指令的操作碼:用一個助記符表示(指令功能的英文縮寫)對應(yīng)著機(jī)器指令的一個或多個二進(jìn)制編碼指令中的操作數(shù):可以是一個具體的數(shù)值可以是存放數(shù)據(jù)的寄存器或指明數(shù)據(jù)在主存位置的存儲器地址第二節(jié) 操作數(shù)的尋址方式指令系統(tǒng)設(shè)計(jì)了多種操作數(shù)的來源尋找操作數(shù)的過程就是操作數(shù)的尋址把尋找操作數(shù)的方式叫做(操作數(shù))尋址方式理解操作數(shù)的尋址方式是理解指令功能的

3、前提操作數(shù)采取哪一種尋址方式一方面,會影響處理器執(zhí)行指令的速度和效率另一方面,對程序設(shè)計(jì)也很重要一、立即尋址(Immediate addressing)指令中的操作數(shù)直接存放在機(jī)器代碼中,緊跟在操作碼之后(操作數(shù)作為指令的一部分存放在操作碼之后的主存單元中)這種操作數(shù)被稱為立即數(shù)可以是8位數(shù)值(00HFFH)也可以是16位數(shù)值(0000HFFFFH)立即數(shù)尋址方式常用來給寄存器和存儲單元賦值,多以常量形式出現(xiàn)MOV AX, 0102H;AX0102H二、寄存器尋址(Register addressing)操作數(shù)存放在CPU的內(nèi)部寄存器中:8位寄存器:AH、AL、BH、BL、CH、CL、DH、D

4、L16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP4個段寄存器:CS、DS、SS、ES寄存器名表示其內(nèi)容(操作數(shù))MOV AX, BX;AXBX三、存儲器尋址操作數(shù)在主存儲器中,用主存地址表示程序設(shè)計(jì)時,8086采用邏輯地址表示主存地址段地址在默認(rèn)的或用段超越前綴指定的段寄存器中指令中只需給出操作數(shù)的偏移地址(有效地址EA)8086設(shè)計(jì)了多種存儲器尋址方式1、直接尋址2、寄存器間接尋址3、寄存器相對尋址4、基址變址尋址5、相對基址變址尋址(一)直接尋址(Direct Addressing)直接尋址方式的有效地址在指令中直接給出默認(rèn)的段地址在DS段寄存器,可使用段超越前綴改變用中括號

5、包含有效地址,表達(dá)存儲單元的內(nèi)容演示MOV AX, 2000H;AXDS:2000HMOV AX, ES: 2000H;AXES:2000H(二) 寄存器間接尋址(Register indirect Addressing)有效地址存放在基址寄存器BX或變址寄存器SI、DI中默認(rèn)的段地址在DS段寄存器,可使用段超越前綴改變演示MOV AX, BX;AXDS:BX(三) 寄存器相對尋址(Register relative addressing)有效地址是寄存器內(nèi)容與有符號8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址BX/BP/SI/DI8/16位位移量段地址對應(yīng)BX/SI/D

6、I寄存器默認(rèn)是DS,對應(yīng)BP寄存器默認(rèn)是SS;可用段超越前綴改變演示MOV AX, SI+06H;AXDS:SI+06HMOV AX, 06HSI;AXDS:SI+06H(四) 基址變址尋址(Based indexed addressing)有效地址由基址寄存器(BX或BP)的內(nèi)容加上變址寄存器(SI或DI)的內(nèi)容構(gòu)成:有效地址BX/BPSI/DI段地址對應(yīng)BX基址寄存器默認(rèn)是DS,對應(yīng)BP基址寄存器默認(rèn)是SS;可用段超越前綴改變演示MOV AX, BX+SI;AXDS:BX+SIMOV AX, BXSI;AXDS:BX+SI(五) 相對基址變址尋址(Relative based indexe

7、d addressing)有效地址是基址寄存器(BX/BP)、變址寄存器(SI/DI)與一個8位或16位位移量之和:有效地址BX/BPSI/DI8/16位位移量段地址對應(yīng)BX基址寄存器默認(rèn)是DS,對應(yīng)BP基址寄存器默認(rèn)是SS;可用段超越前綴改變演示MOV AX, BX+DI+6;AXDS:BX+DI+6MOV AX, 6BX+DIMOV AX, 6BXDI四、I/O端口尋址8086的I/O端口采用獨(dú)立編址,可尋址64K個I/O端口。只能用IN(輸入指令)和OUT(輸出指令)來訪問這些端口。尋址方式為:1.直接端口尋址指令中直接給出8位的端口地址,共能訪問256個I/O端口。 例: IN AL,

8、20H IN AL,PORT OUT 71H,ALI/O端口尋址2.間接端口地址當(dāng)被尋址的I/O端口地址大于256時采用。但只能用DX寄存器提供端口地址,共能訪問64K個I/O端口。例 MOV DX,30EH OUT DX,AL或 MOV DX,390H IN AX,DX注意:只能用AX或AL寄存器。 第三節(jié) 8086/8088指令系統(tǒng)8086指令系統(tǒng)包含133條基本指令,分為如下幾類:l 數(shù)據(jù)傳送類指令l算術(shù)運(yùn)算類指令l 邏輯運(yùn)算和移位類指令l 串操作類指令l 控制轉(zhuǎn)移類指令l 處理器控制類指令l 中斷類指令 符號的約定DEST:目的操作數(shù)(8/16位)SRC:源操作數(shù)(8/16位)REG:

9、(8/16位)通用、(16位)專用寄存器操作數(shù)SREG:段寄存器操作數(shù)(16位)MEM:存儲器操作數(shù)(8/16位)IDATA:立即數(shù)(8/16位) 一、數(shù)據(jù)傳送類指令數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最重要的一種操作,傳送指令也是最常使用的一類指令傳送指令把數(shù)據(jù)從一個位置傳送到另一個位置除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位。(一)通用數(shù)據(jù)傳送指令1. 傳送指令MOV (move)把一個字節(jié)或字的操作數(shù)從源地址傳送至目的地址MOV reg/mem,idata;立即數(shù)送寄存器或主存MOV reg/mem/seg,reg;寄存器送(段)寄存器或主存MOV reg/seg,mem;主存送(段)寄存器MOV

10、reg/mem,seg;段寄存器送寄存器或主存立即數(shù)傳送mov cl,4;cl4,字節(jié)傳送mov dx,0ffh;dx00ffh,字傳送mov si,200h;si0200h,字傳送mov bvar,0ah;字節(jié)傳送;假設(shè)bvar是一個字節(jié)變量,定義如下:bvar db 0mov wvar,0bh;字傳送;假設(shè)wvar是一個字變量,定義如下:wvar dw 0明確指令是字節(jié)操作還是字操作以字母開頭的常數(shù)要有前導(dǎo)0寄存器傳送mov ah,al;ahal,字節(jié)傳送mov bvar,ch;bvarch ,字節(jié)傳送mov ax,bx;axbx,字傳送mov ds,ax;dsax,字傳送mov bx,a

11、l;bxal,字節(jié)傳送 寄存器具有明確的字節(jié)和字類型存儲器傳送mov al,bx;alds:bxmov dx,bp;dxss:bp+0mov dx,bp+4;dxss:bp+4mov es,si;esds:si 不存在存儲器向存儲器的傳送指令段寄存器傳送mov si,dsmov ax,ds;axdsmov es,ax;esaxds 對段寄存器的操作不靈活非法指令 兩個操作數(shù)類型不一致在絕大多數(shù)雙操作數(shù)指令中,目的操作數(shù)和源操作數(shù)必須具有一致的數(shù)據(jù)類型,或者同為字量,或者同為字節(jié)量,否則為非法指令MOV AL, 050AH;非法指令,修正:;mov ax,050ahMOV SI, DL;非法指令

12、,修正:;mov dh,0;mov si,dx非法指令無法確定是字節(jié)量還是字量操作當(dāng)無法通過任一個操作數(shù)確定是操作類型時,需要利用匯編語言的操作符顯式指明MOV BX+SI, 255;非法指令,修正:;mov byte ptr bx+si,255;byte ptr 說明是字節(jié)操作;mov word ptr bx+si,255;word ptr 說明是字操作非法指令兩個操作數(shù)都是存儲器8086指令系統(tǒng)除串操作指令外,不允許兩個操作數(shù)都是存儲單元(存儲器操作數(shù))MOV buf2, buf1;非法指令,修正:;假設(shè)buf2和buf1是兩個字變量;mov ax,buf1;mov buf2,ax;假設(shè)b

13、uf2和buf1是兩個字節(jié)變量;mov al,buf1;mov buf2,al非法指令段寄存器的操作有一些限制8086指令系統(tǒng)中,能直接對段寄存器操作的指令只有MOV等個別傳送指令,并且不靈活MOV DS, ES;非法指令,修正:;mov ax,es;mov ds,axMOV DS, 100H;非法指令,修正:;mov ax,100h;mov ds,ax MOV CS, SI;非法指令;指令存在,但不能執(zhí)行注意: CS和IP不能作為目的操作數(shù)不允許用立即數(shù)作目的操作數(shù)不允許在段寄存器間直接傳送數(shù)據(jù)不允許把立即數(shù)直接傳送給段寄存器不允許在兩個存儲器單元之間直接傳送數(shù)據(jù)源操作數(shù)和目的操作數(shù)的類型必

14、須一致在修改SS和SP的指令之間不要插入其它指令所有的通用傳送指令都不改變標(biāo)志 例子 指出下列指令中的非法指令,并說明其錯誤所在。MOV BX,ALMOV 100,CLMOV SS,2400HMOV BX,SIMOV AX,SIDIMOV MEMBX,ES:AXMOV AL,CXMOV CS,AX2. 交換指令XCHG(exchange)把兩個地方的數(shù)據(jù)進(jìn)行互換寄存器與寄存器之間對換數(shù)據(jù)寄存器與存儲器之間對換數(shù)據(jù)XCHG reg,reg/mem;reg reg/mem交換指令的注意事項(xiàng)CS和IP不能作為源操作數(shù),也不能作為目的操作數(shù)。 操作數(shù)數(shù)據(jù)類型必須一致。不能在存儲器與存儲器之間對換數(shù)據(jù)3

15、. 換碼指令XLAT(translate)將BX指定的緩沖區(qū)中、AL指定的位移處的一個字節(jié)數(shù)據(jù)取出賦給AL換碼指令執(zhí)行前:在主存建立一個字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼表格首地址存放于BX,AL存放相對表格首地址的位移量換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼XLAT;alds:bx+al(二)堆棧操作指令堆棧是一個“后進(jìn)先出LIFO”(或說“先進(jìn)后出FILO”)的主存區(qū)域,位于堆棧段中;SS段寄存器記錄其段地址堆棧只有一個出口,即當(dāng)前棧頂;用堆棧指針寄存器SP指定堆棧只有兩種基本操作:進(jìn)棧和出棧,對應(yīng)兩條指令PUSH和POP進(jìn)棧指令PUSH進(jìn)棧指令先使堆棧指針SP減2,然后把一個字

16、操作數(shù)存入堆棧頂部PUSH reg/mem/seg;SPSP2;SS:SPreg/mem/segpush axpush 2000h進(jìn)棧指令PUSH出棧指令POP出棧指令把棧頂?shù)囊粋€字傳送至指定的目的操作數(shù),然后堆棧指針SP加2POP reg/mem/seg; reg/mem/segSS:SP;SPSP2pop axpop wvar出棧指令POP堆棧操作的特點(diǎn)堆棧操作的單位是字,進(jìn)棧和出棧只對字量字量數(shù)據(jù)從棧頂壓入和彈出時,都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)堆棧操作遵循先進(jìn)后出原則,但可用存儲器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù)堆棧段是程序中不可或缺的一個內(nèi)存區(qū),常用來臨時存放數(shù)據(jù)傳遞參數(shù)保存

17、和恢復(fù)寄存器(二)標(biāo)志位傳送指令1.LAHF指令 讀取標(biāo)志指令。將標(biāo)志寄存器的低8位傳送到AH中。2.SAHF指令 設(shè)置標(biāo)志指令。將AH的內(nèi)容傳送到標(biāo)志寄存器的低8位。3.PUSHF和POPF指令PUSHF指令:將標(biāo)志寄存器的值推入堆棧。POPF指令:從堆棧中彈出一個字到標(biāo)志寄存器中。用途:該組指令一般用在子程序和中斷處理程序的首尾。(三)地址傳送指令1.LEA指令取有效地址指令。格式:LEA REG,MEM功能:將存儲器地址送到一個寄存器。要求:源操作數(shù)為內(nèi)存單元地址,目的操作數(shù)為16位的通用寄存器。用途:使一個寄存器作為地址指針。如:LEA AX,2728H LEA BX,BP+SI LE

18、A SP,0482H2.LDS指令格式:LDS REG,MEM功能:將4個字節(jié)的地址指針?biāo)偷絻蓚€目的寄存器。其中:后2個字節(jié)送到DS。如:LDS DI,2130H(三)地址傳送指令(三)地址傳送指令3.LES指令格式:LES REG,MEM功能:將4個字節(jié)的地址指針?biāo)偷絻蓚€目的寄存器。其中:后2個字節(jié)送到ES。其余同LDS指令。(四)輸入輸出指令執(zhí)行輸入指令時,CPU可以從一個I/O端口讀入1個字節(jié)到AL,1個字到AX;執(zhí)行輸出指令時,CPU將AL中的內(nèi)容寫到一個8位I/O端口,或者將AX中的內(nèi)容寫到兩個連續(xù)的8位端口中。 (四)輸入輸出指令輸入/輸出指令分為兩大類:1.直接的輸入/輸出指令在

19、指令中直接給出了輸入/輸出端口的端口號如:IN AL,50H;1個字節(jié) IN AX,70H;1個字 OUT 44H,AL; 1個字節(jié) OUT 80H,AX; 1個字(四)輸入輸出指令2.間接的輸入/輸出指令在指令執(zhí)行前,將輸入/輸出端口的端口號用傳送指令送到DX。如:IN AL,DX;1個字節(jié) IN AX,DX;1個字 OUT DX,AL; 1個字節(jié) OUT DX,AX; 1個字(四)輸入輸出指令注意:1.累加器不能用其它寄存器代替2.用直接的輸入/輸出指令,端口號為0255;用間接的輸入/輸出指令,端口號為0655353.凡是用直接的輸入/輸出指令的地方都可以用間接的輸入/輸出指令來代替。二

20、、算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令包括加、減、乘、除四種指令。這類指令可以對字節(jié)或字?jǐn)?shù)據(jù)進(jìn)行運(yùn)算。參加運(yùn)算的數(shù)可以是無符號數(shù)或帶符號數(shù)。由于80868088提供十進(jìn)制數(shù)運(yùn)算校正指令,因此參加運(yùn)算的數(shù)也可以是BCD碼表示的十進(jìn)制數(shù)。 二、算術(shù)運(yùn)算類指令1.加法指令指令格式:ADD DEST,SRC ADC DEST,SRCADD指令完成將源操作數(shù)與目的操作數(shù)相加,其和送入目的地址中,并根據(jù)相加結(jié)果設(shè)置標(biāo)志寄存器的OF、SF、ZF、AF、PF和CF標(biāo)志位。該指令執(zhí)行后,源操作數(shù)保持不變。該指令的源操作數(shù)可以是REG、MEM、IDATA,而目的操作數(shù)只能是REG或MEM,不能是IDATA,且兩操作數(shù)不能

21、同時為存儲器操作數(shù),操作數(shù)可以是字節(jié)或字。二、算術(shù)運(yùn)算類指令A(yù)DC指令的功能可描述為在完成二操作數(shù)相加的同時將標(biāo)志位CF也加上,相加的和送入目的地址中。并根據(jù)相加的結(jié)果設(shè)置標(biāo)志寄存器中的OF、SF、ZF、AF、PF和CF標(biāo)志位。ADC指令主要用于大于16位數(shù)的相加運(yùn)算。二、算術(shù)運(yùn)算類指令例:有一個32位無符號數(shù)存放在DX(高16位)、AX(低16位)中,若要加上常數(shù)76F1A23H,則可用以下指令實(shí)現(xiàn): ADD AX,1A23H ADC DX,76FH二、算術(shù)運(yùn)算類指令2.減法指令指令格式:SUB DEST,SRC SBB DEST,SRC NEG DESTSUB指令完成從目的操作效中減去源操

22、作數(shù),其差送入目的地址中,并按相減結(jié)果設(shè)置標(biāo)志位OF、SF、ZF、AF、PF和CF??梢赃M(jìn)行字節(jié)或字運(yùn)算。其中源和目的操作數(shù)可以在通用寄存器或存儲單元中,但兩者不能同時在存儲器中。立即數(shù)可以作源操作數(shù),可是不能作目的操作數(shù)。 二、算術(shù)運(yùn)算類指令SBB指令的功能可描述為:在完成兩操作數(shù)相減的同時,還要減去進(jìn)位位CF,相減結(jié)果送入目的地址中。并設(shè)置標(biāo)志位OF、SF、ZF、AF、PF和CF。SBB指令在使用上與ADC指令類似,主要用于大于16位數(shù)的相減運(yùn)算,將低位部分相減的借位引入高位部分的減法中。 二、算術(shù)運(yùn)算類指令NEG指令屬單操作數(shù)指令,其功能可描述為用零減去目的操作數(shù),相減結(jié)果送回目的地址。

23、NEG指令只對帶符號數(shù)進(jìn)行操作,且?guī)Х枖?shù)以補(bǔ)碼形式表示。其操作數(shù)可以是字節(jié)或字,并只能在通用寄存器或存儲單元中,不能是立即數(shù)。如果字節(jié)操作數(shù)為-128、字操作數(shù)為-32768,在執(zhí)行NEG指令后,操作數(shù)不變,但溢出標(biāo)志OF置1。這是由于+128或+32768超出了8位或16位帶符號數(shù)的表示范圍,即產(chǎn)生了溢出。若操作數(shù)為零,求負(fù)的結(jié)果仍為零,標(biāo)志位CF置0;否則CF置1。NEG指令還要影響SF、ZF、AF和PF標(biāo)志位。 二、算術(shù)運(yùn)算類指令3.比較指令指令格式:CMP DEST,SRC比較指令屬于減法類指令,它在完成兩個操作數(shù)相減后。僅將減法運(yùn)算的某些結(jié)果特征記錄在標(biāo)志寄存器的相應(yīng)標(biāo)志位上:OF

24、、SF、ZF、AF、PF、CF,不保留兩數(shù)相減的差數(shù)。比較指令主要是用于判斷兩個操作數(shù)的大小。若ZF1,表示(DEST)(SRC)。對于無符號數(shù),若CF0,表示(DEST)(SRC)。對于帶符號數(shù),若OFSF,則(DEST)(SRC);若OFSF,則表示(DEST)(SRC)。二、算術(shù)運(yùn)算類指令注意:加法、減法、比較指令,參與運(yùn)算的兩個操作數(shù)必須同為帶符號數(shù)(必須是補(bǔ)碼)或同為無符號數(shù),并且長度必須一致。無符號數(shù)運(yùn)算產(chǎn)生溢出時,CF=1,表示有進(jìn)位/借位。帶符號數(shù)運(yùn)算產(chǎn)生溢出時,OF=1,表示結(jié)果為錯誤。二、算術(shù)運(yùn)算類指令4.加1減1指令指令格式:INC DEST DEC DESTINC指令只

25、有一個操作數(shù),其功能是將目的操作數(shù)加“1”后送回目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè)置標(biāo)志位OF、SF、ZF、AF和PF,但不影響CF。INC指令的操作數(shù)可以是字節(jié)或字,且被當(dāng)作是無符號數(shù)。其操作數(shù)只能在通用寄存器或存儲單元中,不能是立即數(shù)。INC指令主要用于計(jì)數(shù)器的計(jì)數(shù)或修改地址指針。 二、算術(shù)運(yùn)算類指令DEC指令屬單操作數(shù)指令,其功能是將目的操作數(shù)減“1”后送入目的地址中,并按執(zhí)行結(jié)果設(shè)置標(biāo)志位OF、SF、ZF、AF和PF,但不影響CF。DEC指令的操作數(shù)可以是字節(jié)或字,且被當(dāng)作是無符號數(shù)。其操作數(shù)只能在通用寄存器或存儲單元中,不能是立即數(shù)。DEC指令常用于計(jì)數(shù)或修改地址指針,但它的計(jì)數(shù)或修改方向

26、與INC指令相反。假設(shè)(AX)=0FFFFH,則下述程序執(zhí)行后,(AX)= 。INC AX;(AX)=0000HNEG AX;(AX)=0000HDEC AX;(AX)=0FFFFHNEG AX;(AX)=0001H例子 二、算術(shù)運(yùn)算類指令5.乘法指令指令格式:MUL SRC;無符號數(shù)乘法指令 IMUL SRC;帶符號數(shù)乘法指令功能:完成兩個8/16位二進(jìn)制數(shù)相乘。其中SRC是乘法運(yùn)算的一個操作數(shù),它只能在通用寄存器或存儲單元中;另一個操作數(shù)隱含在AL(字節(jié)乘法)或AX(字乘法)寄存器中。乘法運(yùn)算所得雙倍長的乘積隱含地存放在AX(字節(jié)乘法)或DX:AX(字乘法)中。二、算術(shù)運(yùn)算類指令二、算術(shù)運(yùn)

27、算類指令MUL指令只影響標(biāo)志寄存器中CF、OF標(biāo)志位。MUL指令執(zhí)行后,如果AH(字節(jié)乘法)或DX(字乘法)為全0,CF0和OF0;否則CF1,OF1(表示AH或DX中有乘積的有效數(shù)字)。IMUL指令中的操作數(shù)及乘積均帶符號且用補(bǔ)碼表示,除此之外,其余操作與MUL指令完全相同。注意:不允許8位16位,必須事先將8位擴(kuò)展為16位,分無符號數(shù)、帶符號數(shù)擴(kuò)展法。 二、算術(shù)運(yùn)算類指令6.除法指令指令格式:DIV SRC;無符號數(shù)除法 IDIV SRC;帶符號數(shù)除法其中SRC是除法運(yùn)算中的除數(shù),它可以是8位(字節(jié))或16位(字),但只能在通用用寄存器或存儲單元中。DIV除法可以進(jìn)行字節(jié)除法或字除法。被除

28、數(shù)、商、余數(shù)都是隱含使用了相關(guān)寄存器。 二、算術(shù)運(yùn)算類指令二、算術(shù)運(yùn)算類指令DIV指令不影響標(biāo)志位。注意:a.不允許SRC為立即數(shù)b.不允許SRC為0c.不允許8位8位、16位16位,需擴(kuò)展d.兩個操作數(shù)必須同為帶符號數(shù)或無符號數(shù),帶符號數(shù)必須都為補(bǔ)碼形式。 二、算術(shù)運(yùn)算類指令7.符號擴(kuò)展指令指令格式:CBW;8位16位 CWD;16位32位這兩條指令是無操作數(shù)指令,隱含使用AH或DX。指令功能是: CBW:擴(kuò)展AL中的符號位至AH中; CWD:擴(kuò)展AX中的符號位至DX中;這兩條指令主要應(yīng)用在除法指令前,形成雙倍長度的被除數(shù),對標(biāo)志寄存器均無影響。二、算術(shù)運(yùn)算類指令8.十進(jìn)制調(diào)整指令在計(jì)算機(jī)中

29、,可用4位二進(jìn)制碼表示1個十進(jìn)制碼,這種代碼叫BCD碼。當(dāng)然BCD碼只有0-9共10種編碼。BCD碼有兩類;一類叫壓縮的BCD碼,所謂壓縮,就是用1個字節(jié)表示2位BCD碼;另一類叫非壓縮的BCD碼,用這類代碼時,1個字節(jié)只用低4位來表示BCD碼,高4位為0。 二、算術(shù)運(yùn)算類指令計(jì)算機(jī)也可以對BCD碼進(jìn)行加、減、乘、除運(yùn)算,通常采用兩種辦法:一種方法是在指令系統(tǒng)中設(shè)置一套專用于BCD碼運(yùn)算的指令;另一種方法是利用對普通二進(jìn)制數(shù)的運(yùn)算指令算出結(jié)果,然后用專門的指令對結(jié)果進(jìn)行調(diào)整,或者反過來,先對數(shù)據(jù)進(jìn)行調(diào)整,再用二進(jìn)制數(shù)指令進(jìn)行運(yùn)算。8086采用的是第二種方法。二、算術(shù)運(yùn)算類指令(1)加法的十進(jìn)制

30、調(diào)整指令指令格式:DAA AAADAA指令對AL中的壓縮格式BCD碼“和”進(jìn)行調(diào)整,得到正確的壓縮格式BCD碼和送回AL中。DAA指令影響除OF之外的其它標(biāo)志位。內(nèi)部調(diào)整過程:若AL的低4位大于9,或AF=1,則自動將AL的內(nèi)容加06H,并置AF為1;若AL的高4位大于9,或CF=1,則自動將AL的內(nèi)容加60H,并置CF為1。否則都不變。二、算術(shù)運(yùn)算類指令A(yù)AA指令對AL中的非壓縮格式BCD碼“和”進(jìn)行調(diào)整,得到正確的壓縮格式BCD碼和送回AL中。AAA指令只影響AF、CF標(biāo)志位。內(nèi)部調(diào)整過程:若AL的低4位大于9,或AF=1,則自動將AL的內(nèi)容加06H,AH內(nèi)容加1,并置AFCF=1,將AL

31、的高4位清零;若AL的低4位小于或等于9,則僅將AL的高4位清零,并AFCF。這兩條指令使用時,都緊跟在加法指令之后,對BCD碼加法運(yùn)算結(jié)果進(jìn)行調(diào)整。二、算術(shù)運(yùn)算類指令例:假設(shè)(AL)08H,(BL)=07H,則下述程序執(zhí)行后,(AH)=01H,(AL)05H,CF=1。ADD AL,BLAAA二、算術(shù)運(yùn)算類指令(2)減法的十進(jìn)制調(diào)整指令指令格式:DAS AASDAS指令對AL中的壓縮格式BCD碼“差”進(jìn)行調(diào)整,得到正確的壓縮格式BCD碼差送回AL中。DAS指令影響除OF之外的其它標(biāo)志位。內(nèi)部調(diào)整過程:若AL的低4位大于9,或AF=1,則自動將AL的內(nèi)容減06H,并置AF為1;若AL的高4位大

32、于9,或CF=1,則自動將AL的內(nèi)容減60H,并置CF為1。否則都不變。 二、算術(shù)運(yùn)算類指令A(yù)AS指令對AL中的非壓縮格式BCD碼“差”進(jìn)行調(diào)整,得到正確的壓縮格式BCD碼差送回AL中。AAS指令只影響AF、CF標(biāo)志位。內(nèi)部調(diào)整過程:若AL的低4位大于9,或AF=1,則自動將AL的內(nèi)容減06H,AH內(nèi)容減1,并置AFCF=1,將AL的高4位清零;若AL的低4位小于或等于9,則僅將AL的高4位清零,并AFCF。這兩條指令使用時,都緊跟在減法指令之后,對BCD碼減法運(yùn)算結(jié)果進(jìn)行調(diào)整。二、算術(shù)運(yùn)算類指令(3)乘法的十進(jìn)制調(diào)整指令指令格式:AAM將AL中的非壓縮BCD碼“積”進(jìn)行調(diào)整,并送回AL中。內(nèi)

33、部調(diào)整過程:AL/10,所得商AH,余數(shù)AL。影響標(biāo)志位SF、ZF、PF。注意: a. AAM指令必須緊跟在MUL指令之后。 b. 不能用IMUL指令。二、算術(shù)運(yùn)算類指令(4)除法的十進(jìn)制調(diào)整指令指令格式:AAD將AL中的非壓縮BCD碼被除數(shù)或除數(shù)先調(diào)整為二進(jìn)制數(shù)。內(nèi)部調(diào)整過程:(AH)10+(AL)AL,0AH。影響標(biāo)志位SF、ZF、PF。注意: a.AAD指令必須用在DIV指令之前,且要分別對被除數(shù)或除數(shù)先調(diào)整。 b.DIV以后,商和余數(shù)都為二進(jìn)制數(shù)。 三、邏輯運(yùn)算與移位指令(一)邏輯運(yùn)算指令可對字或字節(jié)按位執(zhí)行邏輯運(yùn)算?!胺恰敝噶畈挥绊憳?biāo)志位;其它4種指令影響SF、ZF、PF,同時OF=

34、CF=0。 三、邏輯運(yùn)算與移位指令1.邏輯“與”指令指令格式:AND DEST,SRC功能:(DEST)(SRC)DESTSRC:REG、MEM、IDATADEST:MEM、 REG常用于將操作數(shù)中某位清0。例:AND AL,0F0H;AL的高4位不變,低4位清零三、邏輯運(yùn)算與移位指令2.邏輯“或”指令指令格式:OR DEST,SRC功能:(DEST)(SRC)DESTSRC:REG、MEM、IDATADEST:MEM、 REG常用于將操作數(shù)中某位置1。例:OR AL,80H;AL的最高位置“1”三、邏輯運(yùn)算與移位指令3.邏輯“異或”指令指令格式:XOR DEST,SRC功能:(DEST) (

35、SRC)DESTSRC:REG、MEM、IDATADEST:MEM、 REG常用于將操作數(shù)中某位取反,或?qū)Σ僮鲾?shù)清0。例:XOR AL,FFH;將AL取反 XOR AX,AX;將AX清0 三、邏輯運(yùn)算與移位指令例:假設(shè)(AX)0FF60H,則下述程序段執(zhí)行后,(AX)=0,CF=0。STCMOV DX,96XOR DH,0FFHSBB AX,DX三、邏輯運(yùn)算與移位指令4.邏輯“非”指令指令格式:NOT DEST功能:將DEST按位取反,結(jié)果送回目的操作數(shù)。DEST:REG、MEM三、邏輯運(yùn)算與移位指令5.測試指令格式:TEST DEST,SRC功能:將源和目的操作數(shù)進(jìn)行按位“與”運(yùn)算,但結(jié)果不

36、送回目的操作數(shù),僅影響標(biāo)志位。TEST指令一般用來檢測指定位是1還是0。例:TEST AL,10000000B JZ NEXT;如果AL為正數(shù),則轉(zhuǎn)NEXT去執(zhí)行,否則順序執(zhí)行下去 三、邏輯運(yùn)算與移位指令(二)移位指令1.非循環(huán)移位指令8086指令系統(tǒng)中有四條移位指令,即算術(shù)左移指令SAL(Shift Arithmetic Left)、邏輯左移指令SHL(Shift Logic Left)、算術(shù)右移指令SAR(Shift arithmetic Right)和邏輯右移指令SHR(Shift Logic Right)。通過這些指令,可以對寄存器或者內(nèi)存單元中的8位或16位操作數(shù)進(jìn)行移位。 三、邏輯

37、運(yùn)算與移位指令(1)算術(shù)/邏輯左移指令指令格式:SAL DEST,SRC;算術(shù)左移 SHL DEST,SRC;邏輯左移SRC:為移位次數(shù),只能為1或CL。DEST:REG、MEM功能:將目的操作數(shù)左移若干次,最高位移入CF,而CF中的原有值丟失,最低位補(bǔ)0。SAL和SHL功能相同。如左移一次、且最高位與CF不相等,則OF為1,否則為0。如左移多次,則OF不確定。 圖示三、邏輯運(yùn)算與移位指令例:a)SHL AH,1 b)SHL BYTE PTRDI,1 c)MOV CL,3 SHL AX,CL三、邏輯運(yùn)算與移位指令(2)算術(shù)/邏輯右移指令指令格式:SAR DEST,SRC;算術(shù)右移 SHR DE

38、ST,SRC;邏輯右移SRC:為移位次數(shù),只能為1或CL。DEST:REG、MEM邏輯移位指令在執(zhí)行時,實(shí)際上是把操作數(shù)看成無符號數(shù)來進(jìn)行移位,所以右移時,最高位添0;算術(shù)移位指令在執(zhí)行時,則將操作數(shù)看成有符號數(shù)來進(jìn)行移位,所以,右移時保持最高位的值不變,這里的最高位就是符號位。圖示三、邏輯運(yùn)算與移位指令2.循環(huán)移位指令指令格式:ROL DEST,SRC;循環(huán)左移 ROR DEST,SRC;循環(huán)右移 RCL DEST,SRC;帶CF循環(huán)左移 RCR DEST,SRC;帶CF循環(huán)右移SRC:為移位次數(shù),只能為1或CL。DEST:REG、MEM圖示三、邏輯運(yùn)算與移位指令ROL和RCL指令在執(zhí)行一次

39、左移后,如果操作數(shù)的最高位和CF不等,則OF置1。因?yàn)镃F是由最高位移入的,對有符號數(shù)來說,最高位即符號位,所以CF代表了數(shù)據(jù)原來的符號。這就是說,如果一個帶符號數(shù)在左移之后,新的符號位和原來的符號不同,則會使OF為1,于是,可以根據(jù)OF的值判斷循環(huán)左移操作是否造成了溢出。同樣,ROR和RCR指令在執(zhí)行一位右移時,如果使操作數(shù)的最高位和次高位不等,則表示移位后的數(shù)據(jù)符號和原來的符號不同了,此時也會使OF為1。 圖示四、字符串處理指令唯一能在存儲器內(nèi)的源與目標(biāo)之間進(jìn)行操作的指令。五種基本操作:傳送MOVS 比較CMPS 搜索SCAS 讀 LODS 寫 STOS四、字符串處理指令串操作指令均采用固

40、定尋址方式: 源 串:由DS提供段地址,由SI提供偏移量 目的串:由ES提供段地址,由DI提供偏移量 串 長:由CX提供注意:在串操作指令執(zhí)行前,必須對SI、DI、CX進(jìn)行預(yù)置,CPU每處理完一個串元素時,自動修改SI和DI,使之指向下一個元素。DF=0:SI、DI遞增,同時CX-1 DF=1:SI、DI遞減,同時CX-1 四、字符串處理指令后綴:B字節(jié)操作 W字操作前綴:REP無條件重復(fù),常與MOVS連用,傳送整個串,直至CX=0。 REPE(REPZ)當(dāng)ZF=1且CX0時重復(fù)執(zhí)行,直至ZF=0或CX=0時為止,常與CMPS連用。 REPNE(REPNZ)當(dāng)ZF1且CX0時重復(fù)執(zhí)行,直至ZF

41、=1或CX=0時為止,常與SCAS連用。 四、字符串處理指令1.字符串傳送指令格式:MOVS DEST串,SRC串功能:將由SI指向的源串中的一個元素傳送到由DI指向的目的串中,且相應(yīng)地自動修改SI/DI,使之指向下一個元素。如果加上REP前綴,則每傳送一個元素,CX自動減1,直到CX=0為止。例子四、字符串處理指令2.字符串比較指令格式:CMPS DEST串,SRC串功能:將由SI指向的源串中的一個元素減去由DI指向的目的串中的一個元素,不回送結(jié)果,只根據(jù)結(jié)果特征置標(biāo)志位;并相應(yīng)地修改SI/DI,使之指向下一個元素。通常在CMPS指令前加重復(fù)前綴REPE/REPZ,用來確定兩個串中的第一個不

42、相同的數(shù)據(jù)。 例子四、字符串處理指令3.字符串搜索指令格式:SCAS DEST串功能:將AX或AL中的關(guān)鍵字減去由DI所指向的目的串的一個元素,不回送結(jié)果,只根據(jù)結(jié)果特征置標(biāo)志位;然后修改DI,使之指向下一個元素。通常在SCAS指令前加重復(fù)前綴REPNE/REPNZ,用來從目的串中尋找關(guān)鍵字,操作一直進(jìn)行到ZF=1(查到了某關(guān)鍵字)或CX=0(未查找到)為止。例子例:要求在某字符串中查找是否存在“$”字符。若存在,則將“$”字符所在地址送入BX寄存器中,否則將BX清0。 CLD MOV DI,DSTO;置目的串首元素的偏移地址至DI MOV AL,$;送關(guān)鍵字 REPNE SCASB;找關(guān)鍵字

43、,若未找到則重復(fù)查找 AND CX,0FFH;判斷是否查找到了 JZ ZER;CX=0,表示未查找到 DEC DI;若已找到,則恢復(fù)關(guān)鍵字所在地址指針 MOV BX,DI;關(guān)鍵字所在地址送BX JMP STOZER:MOV BX,0;未找到,則BX清0STO:HLT四、字符串處理指令4.取字符串元素指令格式:LODS SRC串功能:將由SI所指向的一個元素取到AX/AL中;然后修改SI,使之指向下一個元素。該指令一般不加重復(fù)前綴。例:假設(shè)DF=0,(DS:0100H)=01A5H,則下述程序段執(zhí)行后,(AL)0A5H,(SI)=0102H。MOV SI,0100HLODSW四、字符串處理指令5

44、.存字符串指令格式:STOS DEST串功能:將AX/AL中的內(nèi)容寫入由DI所指向的目的串中;然后修改DI,使之指向下一個元素。該指令一般不加重復(fù)前綴,如帶重復(fù)前綴REP,則可實(shí)現(xiàn)使整塊字符串內(nèi)存單元中填滿相同的數(shù)。四、字符串處理指令例:將0404H開始的256個單元清0。 CLD LEA DI,0404H MOV CX,0080H;共有128個字 XOR AX,AX;AX清0 REP STOSW 五、控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令用于實(shí)現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu),是僅次于傳送指令的常用指令 控制轉(zhuǎn)移類指令通過改變IP(和CS)值,實(shí)現(xiàn)程序執(zhí)行順序的改變目標(biāo)地址的尋址方式相對尋址方式指令代碼中

45、提供目的地址相對于當(dāng)前IP的位移量,轉(zhuǎn)移到的目的地址(轉(zhuǎn)移后的IP值)就是當(dāng)前IP值加上位移量直接尋址方式指令代碼中提供目的邏輯地址,轉(zhuǎn)移后的CS和IP值直接來自指令操作碼后的目的地址操作數(shù)間接尋址方式指令代碼中指示寄存器或存儲單元,目的地址從寄存器或存儲單元中間接獲得用標(biāo)號表達(dá)用標(biāo)號表達(dá)用寄存器或存儲器操作數(shù)表達(dá)目標(biāo)地址的尋址范圍:段內(nèi)尋址段內(nèi)轉(zhuǎn)移近轉(zhuǎn)移(near)在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移(32KB范圍)不需要更改CS段地址,只要改變IP偏移地址段內(nèi)轉(zhuǎn)移短轉(zhuǎn)移(short)轉(zhuǎn)移范圍可以用一個字節(jié)表達(dá),在段內(nèi)-128+127范圍的轉(zhuǎn)移代碼段代碼段目標(biāo)地址的尋址范圍:段間尋址段間轉(zhuǎn)移遠(yuǎn)轉(zhuǎn)移

46、(far)從當(dāng)前代碼段跳轉(zhuǎn)到另一個代碼段,可以在1MB范圍需要更改CS段地址和IP偏移地址目標(biāo)地址必須用一個32位數(shù)表達(dá),叫做32位遠(yuǎn)指針,它就是邏輯地址代碼段代碼段 實(shí)際編程時,匯編程序會根據(jù)目標(biāo)地址的屬性,自動處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移 程序員可用操作符short、near ptr 或far ptr 強(qiáng)制成為需要的轉(zhuǎn)移類型(一)無條件轉(zhuǎn)移指令只要執(zhí)行無條件轉(zhuǎn)移指令JMP,就使程序轉(zhuǎn)到指定的目標(biāo)地址,從目標(biāo)地址處開始執(zhí)行指令操作數(shù)label是要轉(zhuǎn)移到的目標(biāo)地址(目的地址、轉(zhuǎn)移地址)JMP指令分成4種類型: 段內(nèi)轉(zhuǎn)移、相對尋址 段內(nèi)轉(zhuǎn)移、間接尋址 段間轉(zhuǎn)移、直接尋址 段間轉(zhuǎn)移、間接尋址JMP

47、 label;程序轉(zhuǎn)向label標(biāo)號指定的地址無條件轉(zhuǎn)移指令JMP(jump) JMP label;段內(nèi)轉(zhuǎn)移、相對尋址;IPIP位移量 JMP reg/mem;段內(nèi)轉(zhuǎn)移、間接尋址;IPreg/mem JMP far ptr label;段間轉(zhuǎn)移、直接尋址;IP偏移地址,CS段地址 JMP far ptr mem;段間轉(zhuǎn)移,間接尋址;IPmem,CSmem2演示演示演示演示演示(二) 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令Jcc根據(jù)指定的條件確定程序是否發(fā)生轉(zhuǎn)移。其通用格式為:Jcc label;條件滿足,發(fā)生轉(zhuǎn)移;IPIP8位位移量;否則,順序執(zhí)行只支持短轉(zhuǎn)移的相對尋址方式Jcc指令的分類Jcc指令不影響標(biāo)

48、志,但要利用標(biāo)志。根據(jù)利用的標(biāo)志位不同,分成三種情況: 判斷單個標(biāo)志位狀態(tài) 比較無符號數(shù)高低 比較有符號數(shù)大小1. 判斷單個標(biāo)志位狀態(tài) JZ/JE和JNZ/JNE利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等) JS和JNS利用符號標(biāo)志SF,判斷結(jié)果是正是負(fù) JO和JNO利用溢出標(biāo)志OF,判斷結(jié)果是否產(chǎn)生溢出 JP/JPE和JNP/JPO利用奇偶標(biāo)志PF,判斷結(jié)果中“1”的個數(shù)是偶是奇 JC和JNC利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位例:判斷是否為字母Y;寄存器AL中是字母Y(含大小寫),則令A(yù)H0,否則令A(yù)H1cmp al,y;比較AL與小寫字母yje next;相等,轉(zhuǎn)移cmp al,Y ;

49、不相等,;繼續(xù)比較AL與大寫字母Yje next;相等,轉(zhuǎn)移mov ah,-1;不相等,令A(yù)H1jmp done;無條件轉(zhuǎn)移指令next:mov ah,0;相等的處理:令A(yù)H0done:2. 比較無符號數(shù)高低無符號數(shù)的大小用高(Above)、低(Below)表示,需要利用CF確定高低、利用ZF標(biāo)志確定相等(Equal)兩數(shù)的高低分成4種關(guān)系,對應(yīng)4條指令JB(JNAE):目的操作數(shù)低于(不高于等于)源操作數(shù)JNB(JAE):目的操作數(shù)不低于(高于等于)源操作數(shù)JBE(JNA):目的操作數(shù)低于等于(不高于)源操作數(shù)JNBE(JA):目的操作數(shù)不低于等于(高于)源操作數(shù)3. 比較有符號數(shù)大小判斷有符號數(shù)的大(Greater)、小(Less),需要組合OF、SF標(biāo)志、并利用ZF標(biāo)志確定相等與否兩數(shù)的大小分成4種關(guān)系,分別對應(yīng)4條指令JL(JNGE):目的操作數(shù)小于(不大于等于)源操作數(shù)JNL(JGE):目的操作數(shù)不小于(大于等于)源操作數(shù)JLE(JNG):目的操作數(shù)小于等于(不

溫馨提示

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

評論

0/150

提交評論