工學(xué)第講指令系統(tǒng)_第1頁
工學(xué)第講指令系統(tǒng)_第2頁
工學(xué)第講指令系統(tǒng)_第3頁
工學(xué)第講指令系統(tǒng)_第4頁
工學(xué)第講指令系統(tǒng)_第5頁
已閱讀5頁,還剩116頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

工學(xué)第講指令系統(tǒng)第1頁/共121頁一、指令概述1.1基本概念指令:計算機能夠識別和執(zhí)行的各種操作命令。指令系統(tǒng):是一臺計算機或一種微處理器能執(zhí)行的各種不同類型操作命令的集合。8086/8088CPU指令系統(tǒng)共有119/117條基本指令。指令的組成:操作碼操作數(shù)操作碼說明計算機要執(zhí)行哪種操作,如傳送、運算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成部分。每種指令的操作碼:使用唯一的一組二進制編碼表示;如:10110000B對應(yīng)一個唯一的助記符(指令功能的英文縮寫);如:MOV第2頁/共121頁操作數(shù)是指令執(zhí)行的參與者,即各種操作對象。有些指令不需要操作數(shù);一般指令通常有一個或兩個操作數(shù),也有個別指令有3個甚至4個操作數(shù)??梢允且粋€具體數(shù)值,如:MOVAL,06H可以是存放數(shù)據(jù)的寄存器名,如:MOVAL,06H可以是存放數(shù)據(jù)的存儲器地址,如:MOV[2000H],AL下一條執(zhí)行指令的地址信息,如:CALLSUB_SER一、指令概述指令書寫形式:

助記符格式、機器代碼格式。1.2助記符格式[標(biāo)號:]操作碼助記符操作數(shù)助記符[;注釋]

助記符格式:也叫符號指令格式可有可無第3頁/共121頁一、指令概述標(biāo)號:代表該條指令存放的地址。為程序分支、循環(huán)、跳轉(zhuǎn)提供轉(zhuǎn)移目標(biāo)地址。標(biāo)號后加寫冒號“:”作為間隔符。操作數(shù)助記符:給出了參與運算的操作數(shù)個數(shù)和位置,可以有若干個。有兩個操作數(shù)時通常稱第一個為目的操作數(shù),第二個為源操作數(shù)。操作碼助記符:說明指令要完成的操作與性質(zhì)。注釋:以分號“;”開始,對指令加以說明以方便閱讀程序例如:MOV傳送指令的格式:

LOOP:MOVdest,src;dest←src其功能為:在標(biāo)號LOOP處完成數(shù)據(jù)傳送,將源操作數(shù)src送到目的操作數(shù)dest,即src不變,dest更改為src.并對此語句進行注釋說明。第4頁/共121頁一、指令概述1.3機器指令格式MOVAL,05;機器代碼是:B0H05H;第一個字節(jié)B0H是操作碼(含一個操作數(shù)AL)第二個字節(jié)05H是立即數(shù);MOVAX,0102H;機器代碼是:B8H02H01H;第一個字節(jié)B8H是操作碼(含一個操作數(shù)AX),第二、三個字節(jié)02H01H是16位立即數(shù)(低字節(jié)02在低地址)。B0H05HB8H02H01H低高第5頁/共121頁第三講指令系統(tǒng)內(nèi)容提要:一、指令概述二、尋址方式三、指令系統(tǒng)第6頁/共121頁二、尋址方式

根據(jù)操作數(shù)所存放的位置不同,可將各種尋址方式分為如下四類:立即尋址方式寄存器尋址方式存儲器尋址方式I/O端口尋址方式指令系統(tǒng)設(shè)計了多種操作數(shù)的來源;尋找操作數(shù)的過程就是操作數(shù)的尋址方式;操作數(shù)采取哪種尋址方式,會影響機器運行速度和效率。第7頁/共121頁二、尋址方式2.1立即尋址方式指令操作碼和操作數(shù)都在存儲器代碼段中,操作數(shù)緊跟在操作碼之后;這種操作數(shù)被稱為立即數(shù)imm??梢允?位數(shù)值(00H~FFH)或16位數(shù)值(0000H~FFFFH),也可為32位數(shù)值。立即數(shù)尋址方式常用來給寄存器賦值;例:MOVAX,10;執(zhí)行后AX=?該例中源操作數(shù)為立即尋址方式,立即數(shù)為10,存放在指令的下一單元。指令碼0A00執(zhí)行:10→AX執(zhí)行后:AX=000AH

例:MOVAX,1234H;十六進制數(shù)1234H送入AX。代碼段例:MOVEBX,20031231H;20031231H送入EBX低地址高地址第8頁/共121頁二、尋址方式2.2寄存器尋址方式

操作數(shù)存放在指令規(guī)定的寄存器中,可以是:

16位寄存器:AX,BX,CX,DX,SI,DI,SP或BP;

8位寄存器:AH,AL,BH,BL,CH,CL,DH或DL;

段寄存器:CS,DS,ES,SS;

32位寄存器:EAX、EBX、ECX、EDX等。例:MOVAX,BX;將寄存器BX的內(nèi)容送入AX中。例:下列程序執(zhí)行后,AX=?,BX=?

MOVAX,1234HMOVBX,5678HADDAX,BX執(zhí)行:1234H→AX5678H→BXAX+BX→AX執(zhí)行后:AX=68ACHBX=5678H例:ADDEAX,ECX;EAX和ECX中的內(nèi)容相加,和送EAX中,;ECX不變第9頁/共121頁二、尋址方式2.3存儲器尋址方式

操作數(shù)存放在存儲器某個邏輯段的存儲單元中,根據(jù)存儲單元物理地址的產(chǎn)生方式可分為如下五種:

直接尋址;

寄存器間接尋址;

寄存器相對尋址;

基址變址尋址;

基址變址相對尋址;指令中給出操作數(shù)主存地址信息(偏移地址,稱之為有效地址EA);段地址在默認的段寄存器或用段超越前綴指定的段寄存器中。第10頁/共121頁二、尋址方式2.3存儲器尋址方式

直接尋址有效地址在指令中直接給出,存放在代碼段指令操作碼后面的操作數(shù)字段。段地址在默認的DS段寄存器或用段超越前綴指定的段寄存器中。OP地址低8位地址高8位操作碼物理地址:DS*16+EAEA有效地址例:設(shè)AX=1212H,BUF為數(shù)據(jù)段定義的變量且BUF=2000H(表示地址),DS=3000H,(32000H)=4546H。執(zhí)行指令:MOVAX,BUF;執(zhí)行后AX=?DS*16+BUF=3000H*16+2000H=32000H(32000H)=46H(32001H)=45H

執(zhí)行:(32000H)→AX執(zhí)行后:AX=4546H第11頁/共121頁二、尋址方式2.3存儲器尋址方式

直接尋址例:設(shè)ES=4000H,執(zhí)行指令:MOVAL,ES:[2000H];執(zhí)行后AL=?ES*16+2000H=4000H*16+2000H=42000H(42000H)的內(nèi)容送AL執(zhí)行后:AL=56H第12頁/共121頁二、尋址方式2.3存儲器尋址方式

寄存器間接尋址操作數(shù)的有效地址EA在基址寄存器BX、BP或變址寄存器SI、DI中(EA=SI、DI、BX、BP),而操作數(shù)在存儲器中;默認段基址在DS(或SS)段寄存器,可用段超越前綴改變;間址寄存器或地址指針DS:BXDS:SIDS:DISS:BP=DS*16+BX=DS*16+SI=DS*16+DI=SS*16+BP物理地址邏輯地址第13頁/共121頁二、尋址方式2.3存儲器尋址方式

寄存器間接尋址例:設(shè)DS=4000H,BX=100H,執(zhí)行指令:MOVAX,[BX];AX=?DS*16+BX=4000H*16+0100H=40100H(40100H)內(nèi)容送AL(40101H)內(nèi)容送AH執(zhí)行后AX=3425H例:MOVBX,1000H;偏移量1000H送入BXMOVEAX,[BX];DS段偏移量為1000H、1001H、;1002H和1003H單元的內(nèi)容送EAX第14頁/共121頁二、尋址方式2.3存儲器尋址方式

寄存器間接尋址執(zhí)行指令:MOVAX,[BP]執(zhí)行后:AX=?,BP=?,SS=?,(20030H)對應(yīng)字節(jié)單元=?例:設(shè)AX=0,BP=0030H,SS=2000H,(20030H)=1234HSS*16+BP=2000H*16+0030H=20030H(20030H)內(nèi)容送AL(20031H)內(nèi)容送AH執(zhí)行后AX=1234HBP=0030HSS=2000H(20030H)=34H第15頁/共121頁二、尋址方式2.3存儲器尋址方式

寄存器相對尋址操作數(shù)有效地址是寄存器(BX、BP、SI、DI)內(nèi)容與有符號8位或16位位移量之和,而操作數(shù)在存儲器中;有效地址=BX/BP/SI/DI+8/16位位移量默認段基址在DS(或SS)段寄存器,可使用段超越前綴改變;物理地址=DS*16+BX+8/16位位移量=DS*16+SI+8/16位位移量=DS*16+DI+8/16位位移量=SS*16+BP+8/16位位移量DS:BX+8/16位位移量DS:SI+8/16位位移量DS:DI+8/16位位移量SS:BP+8/16位位移量邏輯地址第16頁/共121頁二、尋址方式2.3存儲器尋址方式

寄存器相對尋址例:設(shè)DS=6000H,BX=2000H,執(zhí)行指令:MOVAL,[BX+5];執(zhí)行后AL=?DS*16+BX+5=6000H*16+2000H+05H=62005H(62005H)內(nèi)容送ALAH的內(nèi)容不變執(zhí)行后AL=9AH例:MOVEAX,5[EBP];將SS*10H+EBP+5開始連;續(xù)四個單元內(nèi)容送EAX寄存器相對尋址常用于一維數(shù)據(jù)結(jié)構(gòu)或表格中某存儲單元的尋址。第17頁/共121頁二、尋址方式2.3存儲器尋址方式

基址變址尋址=DS*16+BX+SI=DS*16+BX+DI =SS*16+BP+SI =SS*16+BP+DI有效地址由基址寄存器(BX或BP)內(nèi)容加上變址寄存器(SI或DI)的內(nèi)容構(gòu)成,而操作數(shù)在存儲器中;

有效地址=BX/BP+SI/DI默認段基址是DS,BP時默認段基址是SS,可使用段超越前綴改變;DS:BX+SIDS:BX+DISS:BP+SISS:BP+DI邏輯地址基址值變址值段首址操作數(shù)指令EAPA左移4位BRIR物理地址第18頁/共121頁二、尋址方式2.3存儲器尋址方式

基址變址尋址例:設(shè)DS=5000H,BX=2000H,SI=0006H;執(zhí)行指令:MOVAX,[BX+SI];DS*16+BX+SI=5000H*16+2000H+0006H=52006H(52006H)內(nèi)容送AL(52007H)內(nèi)容送AH執(zhí)行后AX=AB78H例:MOVEAX,[EBP][EDI];將SS*10H+EBP+EDI開始;連續(xù)四個單元內(nèi)容送EAX寄存器第19頁/共121頁二、尋址方式2.3存儲器尋址方式

基址變址相對尋址=DS*16+BX+SI+8/16位位移量=DS*16+BX+DI+8/16位位移量=SS*16+BP+SI+8/16位位移量=SS*16+BP+DI+8/16位位移量操作數(shù)有效地址是基址寄存器(BX/BP)、變址寄存器(SI/DI)與一個8位或16位位移量之和,而操作數(shù)在存儲器中;

有效地址=BX/BP+SI/DI+8/16位位移量默認段基址是DS,BP時默認段基址是SS,可使用段超越前綴改變;DS:BX+SI+8/16位位移量DS:BX+DI+8/16位位移量SS:BP+SI+8/16位位移量SS:BP+DI+8/16位位移量邏輯地址物理地址第20頁/共121頁二、尋址方式2.3存儲器尋址方式

基址變址相對尋址例:設(shè)DS=4000H,BX=0200H,DI=0010H。執(zhí)行指令;MOVAH,[BX+DI+1234H]DS*16+BX+DI+1234H=4000H*16+0200H+0010H+1234H=41444H(41444H)內(nèi)容送AH執(zhí)行后AH=50H例:

MOVEDX,[EBP+0FFFF000H][EDI]

;將SS*10H+EBP+FFFF000H+EDI開始連續(xù)四個單

;元內(nèi)容送EDX,或MOVEDX,[EBP+EDI+0FFFF000H]基址變址相對尋址常用于二維數(shù)組中某存儲單元的尋址。第21頁/共121頁二、尋址方式在寄存器相對或相對基址變址尋址方式中,位移量可用符號表示:例:MOVAX,[SI+COUNT]

;COUNT是事先定義的變量或常量(數(shù)值)例:MOVAX,[BX+SI+WNUM];WNUM也是變量或常量

與數(shù)據(jù)有關(guān)的尋址方式共有七種;同一尋址方式可以寫成不同的形式:例:

MOVAX,[BX][SI];等同MOVAX,[BX+SI]例:

MOVAX,COUNT[SI];等同MOVAX,[SI+COUNT]例:

MOVAX,WNUM[BX][SI];等同MOVAX,WNUM[BX+SI]

;等同MOVAX,[BX+SI+WNUM]第22頁/共121頁二、尋址方式2.4I/O端口尋址方式

直接尋址在輸入輸出指令中直接寫上8位I/O端口地址號。例:INAL,50H;50H端口的字節(jié)讀入AL例:OUT80H,AX

;AX中的內(nèi)容輸出到80H、81H兩個端口例:INEAX,60H

;60H、61H、62H和63H端口的4個字節(jié);由低到高依次輸入到EAX中。第23頁/共121頁二、尋址方式2.4I/O端口尋址方式16位I/O端口地址號存入DX,在輸入輸出指令中寫DX,表示從其指示的I/O端口中輸入輸出數(shù)據(jù)。例:MOVDX,FF02HOUTDX,AL;AL中的字節(jié)輸出到DX所指端口中例:MOVDX,0050H

INAX,DX;從DX和DX+1所指的2個端口輸入1個字例:

MOVDX,FFO6HOUTDX,EAX;EAX的雙字由低到高依次輸出到DX、;DX+1、DX+2和DX+3所指的4個端口中寄存器間接尋址第24頁/共121頁立即數(shù)尋址的功能第25頁/共121頁立即數(shù)尋址的執(zhí)行第26頁/共121頁寄存器尋址的功能第27頁/共121頁寄存器尋址的執(zhí)行第28頁/共121頁直接尋址的功能第29頁/共121頁直接尋址的執(zhí)行第30頁/共121頁寄存器間接尋址的功能第31頁/共121頁寄存器間接尋址的執(zhí)行第32頁/共121頁寄存器相對尋址的功能第33頁/共121頁寄存器相對尋址的執(zhí)行第34頁/共121頁基址變址尋址的功能第35頁/共121頁基址變址尋址的執(zhí)行第36頁/共121頁相對基址變址尋址的功能第37頁/共121頁相對基址變址尋址的執(zhí)行第38頁/共121頁INAL,21H第39頁/共121頁OUT43H,AL第40頁/共121頁第三講指令系統(tǒng)內(nèi)容提要:一、指令概述二、尋址方式三、指令系統(tǒng)數(shù)據(jù)傳送類指令算術(shù)運算指令邏輯運算指令串操作指令控制轉(zhuǎn)移指令處理器控制指令第41頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令傳送指令:將數(shù)據(jù)從一個位置傳送到另一個位置;按功能可分為五種(掌握):通用數(shù)據(jù)傳送指令:MOV交換指令:XCHG、XLAT

地址傳送指令:LEA、LDS堆棧操作指令:PUSH、POP

輸入/輸出指令:IN、OUT除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位。1)通用數(shù)據(jù)傳送指令:MOV指令格式:MOVOP1,OP2;字節(jié)、字、雙字間傳送功能:將源操作數(shù)OP2內(nèi)容傳送(復(fù)制)到目標(biāo)操作數(shù)OP1中。常用于對寄存器、存儲器賦值,數(shù)據(jù)暫存等。第42頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令具體指令格式有:

MOVreg/sreg,reg MOVreg,sreg MOVreg/sreg,mem MOVmem,reg/sreg MOVreg,imm MOVmem,imm其中(以后同):reg:寄存器;mem:存儲器;seg:段寄存器;imm:立即數(shù)。例3.1:立即數(shù)傳送moval,4 ;al←4,字節(jié)傳送movcx,0ffh ;cx←00ffh,字傳送movsi,200h ;si←0200h,字傳送moveax,001000ffh;eax←001000ffh,雙字傳送第43頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令例3.2:寄存器傳送movax,bx;ax←bx,字傳送movah,al;ah←al,字節(jié)傳送movds,ax;ds←ax,字傳送mov[si],al;[si]←al,字節(jié)傳送例3.3:存儲器傳送moval,[bx];al←ds:[bx]movdx,[bp];dx←ss:[bp]moves,[si];es←ds:[si]例3.4:段寄存器傳送mov[si],dsmovax,es;ax←esmovds,ax;ds←ax←es第44頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令MOV傳送的原則通用寄存器AXBXCXDXBPSPSIDI立即數(shù)存儲器段寄存器DSESSS×××目的操作數(shù)不能是CS、IP、立即數(shù):如:MOVCS,[SI];不允許使用。源操作數(shù)和目的操作數(shù)的類型必須一致:同為字節(jié)、字、雙字。第45頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令2)交換指令:XCHG、XLAT

交換指令格式:XCHG

OP1,OP2

;OP1

OP2功能:把同長度的源和目的操作數(shù)內(nèi)容進行互換通用寄存器之間互換數(shù)據(jù);通用寄存器與存儲器之間互換數(shù)據(jù);兩操作數(shù)不能同為存儲器操作數(shù);兩操作數(shù)中不允許有立即數(shù);兩操作數(shù)中不允許有段寄存器。例3.5:寄存器間交換movax,1234hmovbx,5678hxchgax,bxxchgah,al例3.6:寄存器與存儲器交換xchgax,[2000h];字交換,同xchg[2000h],axxchgal,[2000h];字節(jié)交換,同xchg[2000h],al第46頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令指令格式:XLAT

;al←ds:[bx+al]功能:從BX指定的存儲區(qū)首地址,AL為位移量的內(nèi)存單元取一個字節(jié)數(shù)據(jù)送AL,操作數(shù)全部為隱含。換碼指令執(zhí)行前:在主存建立一個字節(jié)表格,內(nèi)含要轉(zhuǎn)換成的目標(biāo)代碼;表格首地址存放于BX,AL存放相對表格首地址的位移量。換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼。如:已知數(shù)字字符0-9的ASCII碼表,求‘3’的編碼30h31h32h33h34h35h36h37h38h39h‘0’‘1’‘2’‘3’‘4’‘5’‘6’‘7’‘8’‘9’字符BX=100Hmovbx,100hmoval,03hxlat第47頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令3)地址傳送指令:LEA、LDS指令格式:LEAreg16/reg32,mem指令功能:將存儲器操作數(shù)mem的有效地址傳送至指定的

16/32位寄存器(不包括段寄存器)中。movbx,0400hmovsi,3chleabx,[bx+si+0f62h];bx=0400h+003ch+0f62h=139EHLEAESI,[EBX+5];格式:LDSreg16,mem功能:將主存中mem指定的字送reg16,mem的下一字送DS格式:LESreg16,mem功能:將主存中mem指定的字送reg16,mem的下一字送ES指定mem連續(xù)4個字節(jié)作為邏輯地址,送入DS:reg16或ES:reg16第48頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令例:地址指針傳送MOVWORDPTR[3060H],0100HMOVWORDPTR[3062H],1450HLESDI,[3060H];ES=1450H,DI=0100HLDSSI,[3060H];DS=1450H,SI=0100H例:LDSBX,ADDR[SI]設(shè)DS=1000H,ADDR=10H,SI=100H10110H10111H10112H10113H10H20H30H40H2010H4030HBXDS若將此指令改為LESDI,ADDR[SI]則DI=?,ES=?第49頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令4)堆棧操作指令:PUSH、POP

堆棧是一個“后進先出LIFO”(或說“先進后出FILO”)的主存區(qū)域,位于堆棧段中;由SS段寄存器記錄其段基地址;堆棧只有一個出口,即當(dāng)前棧頂;用堆棧指針寄存器SP指定;棧頂是地址較小的一端(低端),棧底不變。1234SP3000HSP2FFEH2FFFH3412有兩種操作:壓棧和出棧,分別對應(yīng)PUSH和POP指令,以字或雙字作為操作對象的長度;第50頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令PUSH功能:先使堆棧指針SP減2/4,然后把一個16/32位操作數(shù)存入堆棧頂部。OP2是16/32位立即數(shù)、通用寄存器、段寄存器、存儲器。POP功能:把棧頂?shù)囊粋€字/雙字傳送至指定的目的操作數(shù),然后堆棧指針SP加2/4。OP1是16/32位的通用寄存器、段寄存器(CS除外)、存儲器。壓棧指令格式:PUSHOP2;OP2為源操作數(shù)出棧指令格式:POP OP1;OP1為目的操作數(shù)第51頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令例:pushaxpush[2000h]pushax執(zhí)行后SP=01FEH;執(zhí)行push[2000h]:

DS*16+2001H的內(nèi)容送SS*16+01FDH單元;

DS*16+2000H的內(nèi)容送SS*16+01FCH單元;第52頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令例:POPDXPOP[2000H]執(zhí)行后:

DX=?SP=?第53頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令例:PUSHAXPUSHBXPOPAXPOPBX堆棧變化情況:已知SS=1050HSP=0100HAX=4860HBX=1287HSS1050H:0000H00FCH00FDH00FEH00FFHSP0100H1287HAX1287HBX棧底48H60HSPSP12H87H4860H4860HSPSPSPSPSPSP可用棧區(qū)MPUSHAXPUSHBXPOPAXPOPBX第54頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令堆棧操作的單位是字或雙字;字/雙字數(shù)據(jù)從棧頂壓入和彈出時,都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié);堆棧常用來臨時存放數(shù)據(jù)傳遞參數(shù)保存和恢復(fù)寄存器堆棧操作遵循先進后出原則,但可用存儲器尋址方式隨機存取堆棧中的數(shù)據(jù);例如:現(xiàn)場保護恢復(fù)pushax;進入子程序后pushbxpushds...popds;返回主程序前popbxpopax第55頁/共121頁標(biāo)志寄存器壓棧/出棧指令(了解)指令格式:PUSHF/PUSHFD POPF/POPFD功能:PUSHF/PUSHFD是將FLAGS/EFLAGS寄存器內(nèi)容壓人堆棧;POPF/POPFD是從堆棧中彈出字或雙字至FLAGS/EFLAGS標(biāo)志寄存器中。三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令第56頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令5)輸入/輸出指令:IN、OUT8086通過I/O指令與外設(shè)進行數(shù)據(jù)交換,呈現(xiàn)給程序員的外設(shè)是端口(Port)即I/O地址;輸入輸出尋址方式8086端口有64K個,有兩種尋址方式:

(1)直接尋址:只用于尋址前256個端口,指令中直接寫8位端口號(00H~FFH);

(2)間接尋址:用于尋址全部64K個端口,DX寄存器的值就是端口號(0000H~FFFFH);8086用于尋址外設(shè)端口的地址線為16條,端口最多為216=65536(64K)個,端口號為0000H~FFFFH;每個端口按字節(jié)與外設(shè)傳送數(shù)據(jù)。對大于FFH的端口只能采用間接尋址方式。第57頁/共121頁三、指令系統(tǒng)3.1數(shù)據(jù)傳送指令指令格式:

INAL/AX/EAX,imm8/DXOUTimm8/DX,AL/AX/EAX例3.12:輸入字數(shù)據(jù)movdx,20h

;間接inax,dx;字數(shù)據(jù)inax,20h;直接,字數(shù)據(jù)inal,21h

;直接尋址movah,al;字節(jié)數(shù)據(jù)inal,20h三段功能相同;字數(shù)據(jù)傳送實際上實現(xiàn)了連續(xù)的兩個端口地址的字節(jié)數(shù)據(jù)傳送。例3.13:輸出字節(jié)量movdx,3fch;間接尋址moval,80h;字節(jié)量輸出outdx,al第58頁/共121頁第三講指令系統(tǒng)內(nèi)容提要:一、指令概述二、尋址方式三、指令系統(tǒng)數(shù)據(jù)傳送類指令算術(shù)運算指令邏輯運算指令串操作指令控制轉(zhuǎn)移指令處理器控制指令第59頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令算術(shù)運算指令:數(shù)據(jù)的加、減、乘、除及相關(guān)運算;操作數(shù):8/16/32位有/無符號的二進制整數(shù)及BCD碼。這些指令會根據(jù)運算結(jié)果的特征,影響標(biāo)志位。加法指令:INC

/

ADD/ADC

減法指令:

DEC/SUB/SBB/NEG/CMP

乘法指令:

MUL/IMUL

除法指令:

DIV/IDIV

符號擴展指令:

CBW/CWD

十進制調(diào)整指令:

DAA/DAS與AAA/AAS

涉及有符號、無符號數(shù)(有符號均為補碼)

(1)有符號8位:-128~+127;

(2)有符號16位:-32768~+32767;

(3)無符號8位:0~255;

(4)無符號16位:0~65535;第60頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令1)加法指令:INC

/

ADD/ADC

INC語句格式:INCOPR;B/W,OPR+1→OPR功能:將目的操作數(shù)加1,結(jié)果送目的地址。INC指令是一個單操作數(shù)指令,操作數(shù)可以是寄存器或存儲器操作數(shù)。如:INCBX;BX+1→BX。加1指令可用于對計數(shù)器和地址指針進行調(diào)整。

INCAL ;AL+1→AL INCCX ;CX+1→CX INCBYTEPTR[BX+DI+2] ;(DS*16+BX+DI+2)+1→(DS*16+BX+DI+2)INC結(jié)果:對操作數(shù)加1(增量);不影響進位CF標(biāo)志,按結(jié)果設(shè)置FR其他狀態(tài)標(biāo)志。第61頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令1)加法指令:INC

/

ADD/ADC

ADD語句格式:ADDDST,SRC;B/W,DST+SRC→DST功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,源地址的內(nèi)容不改變。例:ADDAX,2000H;AX+2000H→AX,結(jié)果標(biāo)志→FR

ADDAL,BL;AL+BL→ALDST(目的):8、16、32位通用寄存器、存儲器;SRC(源):8、16、32位通用寄存器、存儲器、立即數(shù);SRC、DST不能同時為存儲器。

ADD[BX],[SI];第62頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令1)加法指令:INC

/

ADD/ADC例:ADDWORDPTR[BX],9F76H

設(shè)DS=2000H,BX=1000H,目的物理地址=21000H

執(zhí)行前(21000H)=88H,(21001H)=A9H; 執(zhí)行后(21000H)=FEH,(21001H)=48H;兩負數(shù)相加,和為正,結(jié)果是錯的,表示負向溢出,此時OF=1,ZF、SF、PF和AF全為零。

ADC格式:ADCDST,SRC;B/W,DST+SRC+CF→DST功能:目的操作數(shù)+源操作數(shù)+低位進位,結(jié)果送目的地址。有關(guān)規(guī)定同ADD;例:無符號雙字加法運算。MOVAX,4652H;AX=4652HADDAX,0F0F0H;AX=3742H,CF=1MOVDX,0234H;DX=0234HADCDX,0F0F0H;DX=0F325H,CF=002344652HF0F0F0F0H+3742H、F325第63頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP

DEC格式:DECOPR;B/W,OPR-1→OPR功能:將目的操作數(shù)減1,結(jié)果送目的地址。INC指令是一個單操作數(shù)指令,操作數(shù)可以是寄存器或存儲器操作數(shù)。例如:DECCX;CX-1→CX減1指令DEC也一般用于對計數(shù)器和地址指針的調(diào)整。

DECAX DECCL DECWORDPTR[SI]DEC結(jié)果:對操作數(shù)減1(減量);不影響進位CF標(biāo)志,按結(jié)果設(shè)置FR其他狀態(tài)標(biāo)志。第64頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP

SUB格式:SUBDST,SRC;B/W,DST-SRC→DST功能:目的操作數(shù)(DST)減源操作數(shù)(SRC),結(jié)果存于目的地址,源地址內(nèi)容不變,有關(guān)操作數(shù)規(guī)定同ADD。例:MOVAX,5678H ;AX=5678HSUBAX,1234H ;AX=4444HMOVBX,3354H ;BX=3354HSUBBX,3340H ;BX=0014H例:SUBDH,[BP+4];設(shè)SS=4000H,BP=00E8H,物理地址=400ECH;執(zhí)行前:DH=45H,(400ECH)=87H;執(zhí)行后:DH=BEH;正數(shù)減負數(shù)等于負數(shù),結(jié)論不對。45H87H

BEH--、第65頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP正數(shù)(45H)減負數(shù)(87H)等于負數(shù),結(jié)果為什么不對?原因是69+121=190>+127,則OF=1,溢出;是否表示數(shù)的運算范圍得到限制;擴展成16位字運算(按符號),結(jié)果就正確。

SBB格式:SBBDST,SRC;B/W,DST-SRC-CF→DST功能:目的操作數(shù)(DST)減源操作數(shù)(SRC)再減低位借位CF,結(jié)果送目的地址,SRC不變。有關(guān)規(guī)定同ADD,主要用于多字節(jié)(字)減法運算中。例:SUBAX,BXSBBDX,CXDXAXCXBX

DXAX--、第66頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP

NEG格式:NEGOPR;B/W,→OPR功能:將目的操作數(shù)的每一位求反(包括符號位)后末位加1,結(jié)果送目的地址,等同用零減操作數(shù)。OPR的規(guī)定同INC,例:求補運算。

MOV AX,0FF64H NEG AL ;AX=0FF9CH,CF=1 SUB AL,9DH ;AX=0FFFFH,CF=1 NEG AX ;AX=0001H,CF=1 DEC AL ;AX=0000H,CF=1 NEG AX ;AX=0000H,CF=0,其余CF=1OPR只有對零求補時,CF=0,其余CF=1;-128(80H)、-32768(8000H),求補后值不變,但OF=1。溢出判斷:C6

C7=1;第67頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP

CMP格式:CMPDST,SRC;B/W,DST-SRC置標(biāo)志位功能:目的操作數(shù)減源操作數(shù),根據(jù)結(jié)果置相應(yīng)標(biāo)志位,DST、SRC的值不變,DST、SRC的規(guī)定同ADD。比較指令設(shè)置標(biāo)志位,由條件轉(zhuǎn)移指令檢測決定是否轉(zhuǎn)移。例:比較AL的內(nèi)容數(shù)值大小。

CMP AL,50;AL-50(假設(shè):為無符號數(shù)) JB BELOW ;AL<50,轉(zhuǎn)到BELOW處執(zhí)行

SUB AL,50;當(dāng)AL>=50,AL-50→AL INC AH ;AH+1→AHBELOW: …若兩數(shù)相等,則可由ZF=1來判斷。若兩數(shù)不等,則可由ZF=0來判斷。CF=?第68頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP若兩有符號數(shù)相比較,如:A與B,則:若無溢出,即OF=0,可由SF判斷大?。?若A>B,則A-B結(jié)果為正,即SF=0; 若A<B,則A-B結(jié)果為負,即SF=1;若有溢出,即OF=1,只能發(fā)生在兩個異號數(shù)相減的情況下: 若A>B,因溢出(C6C7=1),使結(jié)果符號位改變,SF=1; 若A<B,因溢出(C6C7=1),使結(jié)果符號位改變,SF=0;若兩無符號數(shù),則可由CF來判斷。 即CF=1(JB),表示A<B; CF=0(JA),表示A>B.綜上,若兩有符號數(shù),則可由下式來判斷:

OFSF=0即兩者相等(JG),則A>BOFSF=1即兩者不等(JL),則A<B第69頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令2)減法指令:DEC/SUB/SBB/NEG/CMP例:將內(nèi)存有符號數(shù)(2050H)和(2051H)中的大數(shù)送(2052H)單元.AL(2050H)AL-(2051H)AL>(2051H)(2052H)ALNYMAXAL(2051H)MOVAL,[2050H]CMPAL,[2051H]JGMAXMOVAL,[2051H]MAX:MOV[2052H],AL;若OFSF=0;則AL大;轉(zhuǎn)MAX;否則將大數(shù);放入AL中,繼續(xù)第70頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令3)乘法指令:MUL/IMUL

MUL格式:MULSRC;B/W,隱含目標(biāo)操作數(shù)功能:字節(jié)乘法:AL*SRC8→AX;AH0,CF=OF=1

字乘法:AX*SRC16→DX,AX;DX0,CF=OF=1

例:無符號數(shù)0A3H與11H相乘。

MOV AL,0A3H ;AL=0A3H MOV BL,11H ;BL=11H MUL BL ;AX=0AD3H MULBYTEPTR[SI];AXAL*(DS*16+SI)說明:SRC不能是立即數(shù)和段寄存器;MUL03H當(dāng)SRC是存儲單元時,必須在操作數(shù)之前加上屬性說明CF=OF=1,表明結(jié)果的高半部分不為0第71頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令3)乘法指令:MUL/IMUL

IMUL格式:IMULSRC;B/W功能:字節(jié)乘法:AL*SRC8→AX;AH0,CF=OF=1

字乘法:AX*SRC16→DX、AX;DX0,CF=OF=1IMUL指令除計算對象是帶符號二進制數(shù)(補碼)外,其他都與MUL一樣。SRC是寄存器或存儲單元的內(nèi)容。例:有符號數(shù)0B4H與11H相乘。

MOV AL,0B4H ;AL=B4H MOV BL,11H ;BL=11H IMUL BL ;AX=0FAF4H說明:結(jié)果的高半部分為0或全1,表明是低半部分的符號位 擴展;先按真值計算,再轉(zhuǎn)換為正確結(jié)果第72頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令3)乘法指令:MUL/IMUL例:AL=FFH,DL=02H,MULDL;AXAL*DLFFH*02H=255*02=510=01FEHAXIMULDL;AXAL*DLFFH*02H=-1*02=-2=FFFEHAX第73頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令4)除法指令:DIV/IDIV

DIV格式:DIVSRC;B/W,隱含目標(biāo)操作數(shù)功能:字節(jié)除法:AX/SRC8→AL(商)、AH(余數(shù)) 字除法:DX、AX/SRC16→AX(商)、DX(余數(shù))例:寫出實現(xiàn)無符號數(shù)0400H/0B4H運算的程序段

MOV AX,0400H ;AX=0400H MOV BL,0B4H ;BL=0B4H DIV BL ;商AL=05H,余數(shù)AH=7CH說明:完成兩個不帶符號的二進制數(shù)除;SRC是寄存器或存儲單元的內(nèi)容;不能進行約簡否則余數(shù)不對第74頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令4)除法指令:DIV/IDIVIDIV格式:IDIVSRC;B/W,隱含目標(biāo)操作數(shù)功能:字節(jié)除法:AX/SRC8→AL(商)、AH(余數(shù)) 字除法:DX、AX/SRC16→AX(商)、DX(余數(shù))除法指令DIV和IDIV雖然對標(biāo)志的影響未定義,但可產(chǎn)生溢出例:寫出實現(xiàn)有符號數(shù)0400H/0B4H運算的程序段

MOV AX,0400H ;AX=0400H MOV BL,0B4H ;BL=0B4H IDIV BL ;商AL=0F3H,余數(shù)AH=24H說明:帶符號二進制數(shù)相除,商和余數(shù)均為有符號數(shù),且余符同被除數(shù)符,商符同除數(shù)符;SRC規(guī)定同MUL;除法結(jié)果不影響標(biāo)志寄存器中相應(yīng)位,其中0和1無意義;先按真值計算,再轉(zhuǎn)換第75頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令4)除法指令:DIV/IDIV說明:商超出AL(8位除)或AX(16位除)所能表示范圍,此時除數(shù)為0處理,產(chǎn)生零號中斷,所得商和余數(shù)均無效;當(dāng)被除數(shù)位數(shù)不夠時,應(yīng)進行符號位擴展,否則得到錯誤結(jié)果。

5)符號擴展指令:

CBW/CWD格式:CBW功能:將AL中的符號位數(shù)據(jù)擴展至AH。例:將字節(jié)數(shù)據(jù)擴展成字數(shù)據(jù)。

MOV AL,0A5H ;AL=0A5H CBW ;AX=0FFA5H,AH=0FFH ADD AL,70H ;AL=15H,AH=0FFH CBW ;AX=0015H,AH=00H第76頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令

5)符號擴展指令:

CBW/CWD格式:CWD功能:將AX中的符號位數(shù)據(jù)擴展至DX。例:將字數(shù)據(jù)擴展成雙字數(shù)據(jù)。

MOVDX,0 ;DX=0 MOVAX,0FFABH ;AX=0FFABH,DX=0 CWD ;DX=0FFFFH,AX=0FFABH例:求(V-(X*Y+Z-540))/X,其中X、Y、Z、V均為16位有符號數(shù),已分別裝入X、Y、Z、V字單元中,結(jié)果的商放AX中,余數(shù)放DX中。

MOVAX,X SUBCX,540 IMULY SBBBX,0 MOVCX,AX MOVAX,V MOVBX,DX CWD MOVAX,Z SUBAX,CX CWD SBBDX,BX ADDCX,AX IDIVX ADCBX,DX HLT第77頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令

6)十進制調(diào)整指令:

DAA/DAS與AAA/AAS算術(shù)運算指令都是二進制數(shù)的運算,實現(xiàn)目標(biāo):十進制輸入——二進制運算——十進制輸出。計算機中的十進制數(shù)實際上是十進制數(shù)的二進制編碼。通稱為二--十進制或BCD碼。常用8421BCD碼。壓縮BCD碼:一個字節(jié)表示兩位十進制數(shù),例:8759D壓縮BCD碼為8759H常用指令有DAA(加法)/DAS(減法)非壓縮BCD碼:一個字節(jié)表示一位十進制數(shù),其中低四位表示8421的BCD碼,高四位則沒有意義。例:8759D非壓縮BCD碼為08070509H常用指令有AAA(加法)/AAS(減法)第78頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令壓縮BCD調(diào)整指令DAA(加法)/DAS(減法)格式:DAA/(DAS)功能:AL寄存器的值調(diào)整成壓縮的BCD碼格式。用在ADD、ADC指令(SUB、SBB)之后,結(jié)果均影響SF、ZF、PF。例:壓縮BCD碼的加法運算。

MOVAL,68H ;AL=68H,表示壓縮BCD碼68 MOVBL,28H ;BL=28H,表示壓縮BCD碼28

ADDAL,BL

;二進制加法:AL=68H+28H=90H

DAA

;十進制調(diào)整:AL=96H

;實現(xiàn)壓縮BCD碼加法:68+28=96例:壓縮BCD碼的減法運算。

MOVAL,68H;AL=68H,表示壓縮BCD碼68 MOVBL,29H;BL=29H,表示壓縮BCD碼29

SUBAL,BL;二進制減法:AL=68H-29H=3FH DAS;十進制調(diào)整:AL=39H

;實現(xiàn)壓縮BCD碼減法:68-29=39第79頁/共121頁三、指令系統(tǒng)3.2算術(shù)運算指令例:編程計算1+2+3+4+…10AL清0ALAL+CL調(diào)整為十進制數(shù)CLCL-1CL=0NYCL10,計數(shù)初值

MOVAL,0MOVCL,10NEXT:ADDAL,CL

DAADECCLJNZNEXTHLT程序中將DAA指令去掉,最后AL結(jié)果是?;對AL調(diào)整為十進制數(shù);CL0轉(zhuǎn)

NEXT結(jié)果AL=55H結(jié)束第80頁/共121頁第三講指令系統(tǒng)內(nèi)容提要:一、指令概述二、尋址方式三、指令系統(tǒng)數(shù)據(jù)傳送類指令算術(shù)運算指令邏輯運算指令串操作指令控制轉(zhuǎn)移指令處理器控制指令第81頁/共121頁三、指令系統(tǒng)3.3邏輯運算指令邏輯運算指令:以二進制位為基本單位進行數(shù)據(jù)操作并影響標(biāo)志位。與指令:AND

或指令:OR

異或指令:XOR

測試指令:TEST

非指令:NOT這些指令會根據(jù)運算結(jié)果的特征,影響標(biāo)志位。語句格式:ANDDST,SRC;B/W 功能:將目的操作數(shù)和源操作數(shù)進行邏輯與運算,結(jié)果存目的地址DST。即DST∧SRC→DST;說明:使目的操作數(shù)的某些位保留(和“1”相“與”)或清除(和“0”相“與”),又稱為屏蔽某些位,同時可使CF=0;例:將AL中第3位和第7位清零。

MOV AL,0FFH AND AL,77H;77H=01110111B例:ANDDX,BUFFER[SI+BX]屏蔽字與指令:AND第82頁/共121頁三、指令系統(tǒng)3.3邏輯運算指令

或指令:OR格式:ORDST,SRC;B/W功能:將目的操作數(shù)和源操作數(shù)進行邏輯或運算,結(jié)果存目的地址DST。即DST∨SRC→DST;說明:使目的操作數(shù)的某些位保留(和“0”相“或”)或置1(和“1”相“或”);常用于對操作數(shù)某些位置1,形成某一特定數(shù);清CF(CF=0)。例:將AL寄存器中第3位和第7位置1。

MOV AL,0 OR AL,88H;88H=10001000B例:

ORAL,80H ;AL最高位置1,其余位不變

ORAL,AL ;AL不變,CF=0 ORAX,00FFH;AX低8位置1,高8位不變

ORBUFFER[SI],CX第83頁/共121頁三、指令系統(tǒng)3.3邏輯運算指令

異或指令:XOR格式:

XORDST,SRC ;B/W功能:目的操作數(shù)與源操作數(shù)做按位異或運算,結(jié)果送入目的地址。即DST⊕SRC→DST。說明:運算法則1⊕1=0, 1⊕0=1,0⊕1=1,0⊕0=0。常用于使某操作數(shù)清零同時進位位清零(CF=0);使目的操作數(shù)中若干位取反(不變位與0異或,取反位與1異或).例:按位異或運算。

MOV AL,45H ;AL=45H=01000101B XOR AL,31H ;AL=74H,00110001B例:XORAL,AL;使AL=00H,CF=0XORAL,3;3=00000011B,使AL低兩位取反,其余不變

XORAX,BXXORBUFFER[SI],CX01110100第84頁/共121頁三、指令系統(tǒng)3.3邏輯運算指令

測試指令:TEST格式:TESTDST,SRC;B/W功能:源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯與運算,據(jù)結(jié)果置SF、PF、ZF,且CF=OF=0,而AF位無定義。DST、SRC內(nèi)容不變,即DST∧SRC。常用于不改變原操作數(shù)下檢測某一位或某幾位是否為1或為0,編程時,可用在條件轉(zhuǎn)移指令前產(chǎn)生條件。例:測試AX中的第12位是否為0,不為0則轉(zhuǎn)L。TEST AX,1000H;0001000000000000BJNE L

例:TESTAL,01H;測AL最低位是否為1JNZTHERRTESTAL,99H;測AL第7,4,3,0位

JZERROR;是否同時為0,99H=10011001B以上四條均為雙操作數(shù)指令,尋址方式同算術(shù)運算指令;均能使CF=OF=0,AF無定義,結(jié)果影響SF、ZF和PF標(biāo)志位。第85頁/共121頁三、指令系統(tǒng)3.3邏輯運算指令

非指令:NOT格式:NOTOPR;B/W功能:將操作數(shù)OPR逐位取反后再送OPR。操作結(jié)果不影響任何標(biāo)志位。OPR是通用寄存器、存儲器。例:邏輯非運算。

MOVAX,878AH;AX=878AH

;=1000011110001010B NOTAX, ;AX=7875H

;=0111100001110101B第86頁/共121頁三、指令系統(tǒng)3.3邏輯運算指令例:從4000H開始的單元中有32個有符號數(shù),統(tǒng)計出其中負數(shù)個數(shù)并存入BUFFER單元。 XORDX,DX MOVSI,4000H MOVCX,20HAGAIN:MOVAL,[SI] INCSI TESTAL,80H JZNEXT INCDXNEXT:DECCX JNZAGAIN MOVBUFFER,DX HLT4000H4001H401FHMDS:SIBUFFER第87頁/共121頁第三講指令系統(tǒng)內(nèi)容提要:一、指令概述二、尋址方式三、指令系統(tǒng)數(shù)據(jù)傳送類指令算術(shù)運算指令邏輯運算指令串操作指令控制轉(zhuǎn)移指令處理器控制指令第88頁/共121頁三、指令系統(tǒng)3.4串操作指令串:存放在存儲器中某一連續(xù)地址區(qū)域的若干存儲單元。根據(jù)其表示的內(nèi)容可分為字符串或數(shù)據(jù)串;根據(jù)其基本單元的個數(shù)又分為:字節(jié)串、字串、雙字串。

串傳送指令:MOVSB/MOVSW/MOVSD

串掃描指令:SCASB/SCASW/SCASD

串裝入指令:LODSB/LODSW/LODSD與存儲指令:STOSB/STOSW/STOSDM串字節(jié)串,共8個字串,共4個雙字串,共2個操作數(shù)位于存儲器之間的指令:

串比較指令:CMPSB/CMPSW/CMPSD操作數(shù)位于存儲器和累加器之間的指令:第89頁/共121頁三、指令系統(tǒng)3.4串操作指令存儲器源串目的串DS:SIES:DI允許段超越不允許段超越串傳送MOVSB(W/D)串比較CMPSB(W/D)累加器AL/AX/EAX串掃描SCASB(W/D)串裝入LODSB(W/D)串存儲STOSB(W/D)結(jié)果影響標(biāo)志位存在數(shù)據(jù)流動沒有數(shù)據(jù)流動SI、DI的值根據(jù)DF標(biāo)志進行自增(DF=0,CLD)或自減(DF=1,STD)串操作要求數(shù)據(jù)類型一致,即同為字節(jié)、字、雙字。串長度存放在CX中,可結(jié)合REP前綴一起使用。第90頁/共121頁三、指令系統(tǒng)3.4串操作指令重復(fù)前綴:REP重復(fù)執(zhí)行其后的指令,次數(shù)由CX指定,直到減為0.例:將源串首地址為2000H:1200H開始的100個字節(jié)傳送到首地址為6000H:4000H開始的內(nèi)存單元中。源串目的串2000H:1200H6000H:4000HMOVSI,1200HMOVDI,4000HMOVCX,100;cx←字節(jié)串長度,

;循環(huán)次數(shù)CLD;置DF=0,地址增加again:MOVSB;將SI中指定的一個字節(jié)

;傳到DI表示的存儲單元

;SI,DI自增DECCX;cx←cx-1JNZagain;判cx=0?,不為0,

;轉(zhuǎn)again處執(zhí)行,否;則執(zhí)行下一條指令HLT;停機設(shè)置段基址MOVAX,2000HMOVDS,AXMOVAX,6000HMOVES,AX第91頁/共121頁三、指令系統(tǒng)3.4串操作指令使用REP前綴完成上例。MOVAX,2000HMOVDS,AXMOVAX,6000HMOVES,AXMOVSI,1200HMOVDI,4000HMOVCX,100CLDREPMOVSBHLT例:長度為5的ASCII字符串DS=2000H,SI=0050H搬到ES=3000H,DI=0100HMOVSI,0050HMOVDI,0100HMOVCX,5CLDREPMOVSBHLT其它指令的使用請參考教材相關(guān)例子第92頁/共121頁第三講指令系統(tǒng)內(nèi)容提要:一、指令概述二、尋址方式三、指令系統(tǒng)數(shù)據(jù)傳送類指令算術(shù)運算指令邏輯運算指令串操作指令控制轉(zhuǎn)移指令處理器控制指令第93頁/共121頁三、指令系統(tǒng)3.5控制轉(zhuǎn)移指令

用于改變程序的執(zhí)行順序的指令,也就是改變CS和IP中的內(nèi)容。包括五類:

1).無條件轉(zhuǎn)移指令;

2).條件轉(zhuǎn)移指令;

3).循環(huán)指令;

4).子程序調(diào)用與返回指令;

5).中斷與返回指令。1).無條件轉(zhuǎn)移指令格式:JMPOPR功能:使程序轉(zhuǎn)移到指定的目的地址OPR去執(zhí)行。分為:段內(nèi)轉(zhuǎn)移:在當(dāng)前代碼段內(nèi)進行轉(zhuǎn)移,即只改變IP值;段間轉(zhuǎn)移:轉(zhuǎn)到另一代碼段去執(zhí)行程序,即改變CS和IP值。注:JMP指令不影響標(biāo)志位。第94頁/共121頁三、指令系統(tǒng)3.5控制轉(zhuǎn)移指令1).無條件轉(zhuǎn)移指令段內(nèi)轉(zhuǎn)移(只改IP)指令有:(1)段內(nèi)直接短轉(zhuǎn)移:JMPSHORTOPR; (-128~+127)(8位)(2)段內(nèi)直接近轉(zhuǎn)移:JMPNEARPTROPR;

(-32768~+32767)(16位)(3)段內(nèi)間接轉(zhuǎn)移:JMPREG;REGIP JMPWORDPTR

OPR;單元字IP段間轉(zhuǎn)移(改變CS和IP)指令有:(1)段間直接轉(zhuǎn)移:JMPFARPTROPR;(2)段間間接轉(zhuǎn)移:JMPDWORDPTROPR;第95頁/共121頁三、指令系統(tǒng)3.5控制轉(zhuǎn)移指令1).無條件轉(zhuǎn)移指令操作過程:IPIP+8位位移量;IP為JMP指令后的地址;位移量用8位補碼表示;(1)段內(nèi)直接短轉(zhuǎn)移(轉(zhuǎn)移范圍用8位補碼表示)例:JMPSHORTNEXT;NEXT為任意標(biāo)號0000:2000H0000:2002H(CS:IP)

0000:2006H(目的地址NEXT)操作碼8位位移量當(dāng)前JMP指令地址下一條指令地址2字節(jié)第96頁/共121頁三、指令系統(tǒng)3.5控制轉(zhuǎn)移指令1).無條件轉(zhuǎn)移指令(2)段內(nèi)直接近轉(zhuǎn)移(轉(zhuǎn)移范圍用16位補碼表示)例:JMPNEARPTRNEXT操作:IPIP+16位位移量;位移量用16位補碼表示操作碼位移量低位位移量高位0000:2000H(JMP指令地址)0000:2250H

(目的地址NEXT)

3字節(jié)0000:2003H(IP所指地址)第97頁/共121頁三、指令系統(tǒng)3.5控制轉(zhuǎn)移指令1).無條件轉(zhuǎn)移指令格式2:JMPWORDPTR地址操作數(shù)操作:IP=(EA)EA為地址操作數(shù)的有效地址(3)段內(nèi)間接轉(zhuǎn)移(轉(zhuǎn)移地址的CS不變,偏移地址放在寄存器或內(nèi)存中)格式1:JMPBX操作:IP=BX地址EA偏移地址IP第98頁/共121頁三、指令系統(tǒng)3.5控制轉(zhuǎn)移指令1).無條件轉(zhuǎn)移指令內(nèi)存物理地址32000H32001H0130代碼段數(shù)據(jù)段0000:2000H目的地址

0000:3001H操作碼例:已知DS=3000H,BX=2000H,(32000H)=01H(32001H)=30H執(zhí)行:JMPWORDPTR[BX]過程:

PA=DS*16+BX=32000H

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論