第03章8086指令系統(tǒng)_第1頁(yè)
第03章8086指令系統(tǒng)_第2頁(yè)
第03章8086指令系統(tǒng)_第3頁(yè)
第03章8086指令系統(tǒng)_第4頁(yè)
第03章8086指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第3 3章章 8086的的指令系統(tǒng)指令系統(tǒng) 計(jì)算機(jī)是通過(guò)執(zhí)行計(jì)算機(jī)是通過(guò)執(zhí)行指令指令來(lái)管理計(jì)算機(jī)并完成一來(lái)管理計(jì)算機(jī)并完成一系列給定功能。每種計(jì)算機(jī)都有一組系列給定功能。每種計(jì)算機(jī)都有一組指令集指令集提供給提供給用戶使用,這組指令集叫做計(jì)算機(jī)的用戶使用,這組指令集叫做計(jì)算機(jī)的指令系統(tǒng)指令系統(tǒng)。3.1 3.1 8086指令的特點(diǎn)指令的特點(diǎn) 指令的一般格式為:指令的一般格式為: 操作碼操作碼 操作數(shù),操作數(shù),操作數(shù),操作數(shù)目目的的源源MOV AL,12HADD AL,24H不能作目的操作數(shù)不能作目的操作數(shù)不能直接將立即數(shù)不能直接將立即數(shù)傳送到段寄存器傳送到段寄存器不允許源和目的不允許源和目的操作

2、數(shù)同時(shí)都是操作數(shù)同時(shí)都是存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù)1) 1) 立即數(shù):操作數(shù)包含在指令中。立即數(shù):操作數(shù)包含在指令中。 如:如:MOV AX,080AH ADD AL,22) 2) 寄存器操作數(shù):操作數(shù)在寄存器操作數(shù):操作數(shù)在CPU的某個(gè)寄存器中。的某個(gè)寄存器中。 如:如:MOV DS,AX3) 3) 存儲(chǔ)器操作數(shù):操作數(shù)在內(nèi)存數(shù)據(jù)區(qū)內(nèi)。存儲(chǔ)器操作數(shù):操作數(shù)在內(nèi)存數(shù)據(jù)區(qū)內(nèi)。 如:如:MOV AX,22A0H MOV bufferSI,AX操作數(shù)存在方式操作數(shù)存在方式 在微機(jī)中,操作數(shù)有三種類(lèi)型:在微機(jī)中,操作數(shù)有三種類(lèi)型: 尋址方式是尋找指令中操作數(shù)所在地址的方法。尋址方式是尋找指令中操作數(shù)所在

3、地址的方法。3.2 80863.2 8086的尋址方式的尋址方式3.2.1 80863.2.1 8086尋址方式的說(shuō)明尋址方式的說(shuō)明外部總線外部總線內(nèi)部暫存器內(nèi)部暫存器 IP ES SS DS CS輸入輸入/輸出輸出控制電路控制電路執(zhí)行部分執(zhí)行部分控制電路控制電路1 2 3 4 5 6ALU標(biāo)志寄存器標(biāo)志寄存器 AH AL BH BLCH CL DH DL SP BP SI DI通用通用寄存寄存器器地址地址加法加法器器指令隊(duì)列緩沖器指令隊(duì)列緩沖器執(zhí)行部件執(zhí)行部件 (EU)總線接口部件總線接口部件 (BIU)16位位20位位16位位8位位80868086微處理器的內(nèi)部結(jié)構(gòu)框圖微處理器的內(nèi)部結(jié)構(gòu)框

4、圖FFFFFHFFFFFHFFFF0HFFFF0H00030H00030H0002FH0002FH00020H00020H0001FH0001FH00010H00010H0000FH0000FH00001H00001H00000H00000H第0節(jié)第0節(jié)16個(gè)單元16個(gè)單元第第65535節(jié)65535節(jié)16個(gè)單元16個(gè)單元第1節(jié)第1節(jié)16個(gè)單元16個(gè)單元第2節(jié)第2節(jié)16個(gè)單元16個(gè)單元CSCSIPIPSSSSSPSPBXBXDSDS代碼段代碼段64KB64KB堆棧段堆棧段64KB64KB數(shù)據(jù)段數(shù)據(jù)段64KB64KB存存儲(chǔ)儲(chǔ)器器的的分分段段及及存存儲(chǔ)儲(chǔ)器器地地址址分分配配 段內(nèi)偏移量由指令的操作數(shù)

5、部分規(guī)定,通段內(nèi)偏移量由指令的操作數(shù)部分規(guī)定,通常稱為常稱為有效地址有效地址,用,用EA表示。表示。1. 有效地址有效地址EA 8086的內(nèi)存地址的內(nèi)存地址 :段地址:段地址16 + 段內(nèi)偏移量段內(nèi)偏移量 段地址存放在段寄存器段地址存放在段寄存器CS、 DS、 ES、 SS中;中; 段內(nèi)偏移量即有效地址段內(nèi)偏移量即有效地址EA存放在存放在BX、BP、SI、DI 中;或直接地址,如中;或直接地址,如3000H中;或中;或上述形式的上述形式的組合組合中。見(jiàn)中。見(jiàn)p37圖圖3-1。 立即尋址立即尋址 變址尋址變址尋址 寄存器尋址寄存器尋址 基址基址+變址尋址變址尋址 直接尋址直接尋址 串尋址串尋址

6、寄存器間接尋址寄存器間接尋址 I/O端口尋址端口尋址 基址尋址基址尋址 隱含尋址隱含尋址3.2.2 3.2.2 尋址方式介紹尋址方式介紹 立即尋址立即尋址 例如:例如:MOV AX,1234H 如圖所示。如圖所示。 立即尋址主要用于給寄存器或立即尋址主要用于給寄存器或存儲(chǔ)單元賦存儲(chǔ)單元賦初值初值。(復(fù)制)。(復(fù)制) 寄存器尋址寄存器尋址 操作數(shù)存放在指令規(guī)定的寄存器中。操作數(shù)存放在指令規(guī)定的寄存器中。 16位:位:AX、BX、CX、DX、SI、DI、SP、BP、 CS、DS、SS或或ES 8位:位:AH、AL、BH、BL、CH、CL、DH或或DL 例如:例如:MOV AX,BX 將寄存器將寄存

7、器BXBX的內(nèi)容送入的內(nèi)容送入AXAX中。(復(fù)制)中。(復(fù)制)X XX XAXAXBXBX 執(zhí)行速度很快執(zhí)行速度很快 直接尋址直接尋址 默認(rèn)以默認(rèn)以DS的內(nèi)容為基準(zhǔn)。的內(nèi)容為基準(zhǔn)。 例如:例如:MOV AL,2000H有效地址有效地址EA為為2000H2000H,若,若段地址段地址DS=4000H,則段,則段起始物理地址為起始物理地址為4000H左左移移4 4位,即位,即40000H,此指,此指令將數(shù)據(jù)段中物理地址為令將數(shù)據(jù)段中物理地址為42000H單元的內(nèi)容傳至單元的內(nèi)容傳至AL寄存器。寄存器。 但允許利用但允許利用段超越方法段超越方法。 例如:例如:MOV AX,ES:BUFF4000H

8、56HA AX X D DS S 40000H2000H操作碼操作碼00H20H56H42000H符號(hào)地址符號(hào)地址 寄存器間接尋址寄存器間接尋址例如:例如:MOV AX,BXEAEA= =BPBPBXBXDIDISISIDSDSSSSS4000H34H 25HA AX X D DS S 40000H0100H25H40100H34H0100H B BX X數(shù)據(jù)段代碼段 基址尋址基址尋址 若使用若使用BPBP,則隱含地,則隱含地表示操作數(shù)存放在表示操作數(shù)存放在SSSS中。中。若使用若使用BXBX,則隱含地表示,則隱含地表示操作數(shù)存放在操作數(shù)存放在DSDS中。中。EA=EA=BXBXBPBP8 8

9、位偏移量位偏移量1616位偏移量位偏移量 變址尋址變址尋址 EA=EA=SISIDIDI8 8位偏移量位偏移量1616位偏移量位偏移量 段地址規(guī)定為段地址規(guī)定為DSDS段寄段寄存器的內(nèi)容。存器的內(nèi)容。 變址尋址方式常用于變址尋址方式常用于存取表格或一維數(shù)組中的存取表格或一維數(shù)組中的元素。元素。 基址基址+變址尋址方式變址尋址方式 課堂練習(xí):課堂練習(xí):假設(shè)假設(shè)DS=4000H,CS=0000H,SS=2000H,ES=1000H,SI=0010H,DI=0100H,BX=0200H,COUNT=2000H,問(wèn)下列指令執(zhí)行后,寄存器,問(wèn)下列指令執(zhí)行后,寄存器AX、AH的內(nèi)容如何?的內(nèi)容如何?MOV

10、 AX,COUNTSIMOV AH,BX+DI+1234HAXAX的內(nèi)容為的內(nèi)容為40000H+2000H+0010H=42010H和和42011H單元的單元的內(nèi)容,前一個(gè)在低內(nèi)容,前一個(gè)在低8位,后一個(gè)在高位,后一個(gè)在高8位。位。AH的內(nèi)容為的內(nèi)容為40000H+0200H+0100H+1234H=41534H單單元的內(nèi)容。元的內(nèi)容。 串尋址串尋址如:如:MOVSBES:DI DS:SIDI DI 1 SI SI 1 I/O端口尋址端口尋址 直接端口尋址:由直接端口尋址:由指令直接給出輸入輸出指令直接給出輸入輸出設(shè)備的端口地址,規(guī)定設(shè)備的端口地址,規(guī)定為為8 8位位。 間接端口尋址:由間接端

11、口尋址:由寄存器寄存器DX給出輸入輸出給出輸入輸出設(shè)備的端口地址,規(guī)定設(shè)備的端口地址,規(guī)定為為1616位位。 如:如:IN AL,20H OUT DX,AL 隱含尋址隱含尋址 操作數(shù)是隱含的。操作數(shù)是隱含的。 如:如:AAA 隱含操作數(shù)是隱含操作數(shù)是AH、ALMOV AX,3100H 立即尋址立即尋址 寄存器尋址寄存器尋址 直接尋址直接尋址 寄存器間接尋址寄存器間接尋址 基址尋址基址尋址 變址尋址變址尋址 基址基址+ +變址尋址變址尋址 串尋址串尋址 I/O端口尋址端口尋址 隱含尋址隱含尋址MOV SS,AXMOV AX,3100H; ES:HMOV BX,DI; SI,BX;BPMOV SI

12、,DATABX; BPMOV BX,SI+1003H; DIMOV AX,COUNTBXSIMOVSBIN AL,data8; DXAAA尋址方式尋址方式 MOV BX,2000HMOV DX,DASSBX MOV DI,BX SUB AX,BXSIADD AX,DI+64HMOV AX,BP+10MOV AX,ES:BXCMP BX+SI+10,100IN AL,DXMOVS例:分別指出下列指令中源、目的操作數(shù)的尋址方式例:分別指出下列指令中源、目的操作數(shù)的尋址方式 源操作數(shù)源操作數(shù) 目的操作數(shù)目的操作數(shù) 立即立即 寄存器寄存器 基址基址 寄存器寄存器 寄存器寄存器 寄存器間址或變址寄存器間

13、址或變址 基址基址+ +變址變址 寄存器寄存器 變址變址 寄存器寄存器 基址基址 寄存器寄存器帶段超越寄存器帶段超越寄存器 寄存器寄存器 立即立即 基址基址+ +變址變址 寄存器間址寄存器間址 寄存器寄存器 隱含隱含 隱含隱含3.3 8086的指令格式及數(shù)據(jù)類(lèi)型的指令格式及數(shù)據(jù)類(lèi)型1. 8086的操作碼的操作碼2. 8086指令中寄存器的編碼指令中寄存器的編碼3. 指令中的操作數(shù)指令中的操作數(shù)4. 指令中的數(shù)據(jù)類(lèi)型指令中的數(shù)據(jù)類(lèi)型 無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù) 帶符號(hào)數(shù)帶符號(hào)數(shù) ASCII碼碼 BCD數(shù)數(shù)3.4 8086的指令集的指令集1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令2算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令3位操作指令位操作

14、指令4串處理指令串處理指令5程序控制轉(zhuǎn)移指令程序控制轉(zhuǎn)移指令6處理器控制指令處理器控制指令3.4.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 數(shù)據(jù)傳送指令是最基本的一種指令,主要用來(lái)數(shù)據(jù)傳送指令是最基本的一種指令,主要用來(lái)實(shí)現(xiàn)存儲(chǔ)器與寄存器、寄存器與寄存器以及立即數(shù)實(shí)現(xiàn)存儲(chǔ)器與寄存器、寄存器與寄存器以及立即數(shù)到寄存器或存儲(chǔ)器的字節(jié)或字的傳送。一般包括目到寄存器或存儲(chǔ)器的字節(jié)或字的傳送。一般包括目的操作數(shù)和源操作數(shù)。的操作數(shù)和源操作數(shù)。注意注意:源和目的操作數(shù)的數(shù)據(jù)長(zhǎng)度必須保持一致。:源和目的操作數(shù)的數(shù)據(jù)長(zhǎng)度必須保持一致。 除除POPFPOPF和和SAHFSAHF指令外,這類(lèi)指令的操作結(jié)果指令外,這類(lèi)指令的操作

15、結(jié)果 不影響不影響FRFR。1、通用數(shù)據(jù)傳送指令、通用數(shù)據(jù)傳送指令表表1 通用數(shù)據(jù)傳送指令格式通用數(shù)據(jù)傳送指令格式(1)傳送)傳送指令指令MOV 功能:將源操作數(shù)傳送到目的操作數(shù)中。功能:將源操作數(shù)傳送到目的操作數(shù)中。實(shí)際實(shí)際 上是進(jìn)行數(shù)據(jù)的上是進(jìn)行數(shù)據(jù)的“復(fù)制復(fù)制”。 格式:格式:MOV OP目,目,OP源源 OP目:寄存器、存儲(chǔ)器目:寄存器、存儲(chǔ)器 OP源:寄存器、存儲(chǔ)器、立即數(shù)源:寄存器、存儲(chǔ)器、立即數(shù)注意:注意:1) CS、立即數(shù)不能作目的操作數(shù);、立即數(shù)不能作目的操作數(shù); 2) 立即數(shù)與存儲(chǔ)器變量類(lèi)型要一致;立即數(shù)與存儲(chǔ)器變量類(lèi)型要一致; 3) 源與目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。

16、源與目的操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。 注意:注意:不能用一條不能用一條MOV指令實(shí)現(xiàn)以下傳送,若需要時(shí),指令實(shí)現(xiàn)以下傳送,若需要時(shí), 可用兩條可用兩條MOV指令來(lái)實(shí)現(xiàn),例如:指令來(lái)實(shí)現(xiàn),例如: 存儲(chǔ)單元之間的傳送存儲(chǔ)單元之間的傳送 MOV AX,MEM1;先將先將MEM1傳送至通用數(shù)據(jù)寄存器傳送至通用數(shù)據(jù)寄存器 MOV MEM2,AX;再?gòu)耐ㄓ脭?shù)據(jù)寄存器傳送至再?gòu)耐ㄓ脭?shù)據(jù)寄存器傳送至MEM2 立即數(shù)至段寄存器的傳送立即數(shù)至段寄存器的傳送 MOV AX,DATA;先將立即數(shù)傳送至通用數(shù)據(jù)寄存器先將立即數(shù)傳送至通用數(shù)據(jù)寄存器 MOV DS,AX ;再?gòu)耐ㄓ脭?shù)據(jù)寄存器傳送至段寄存器再?gòu)耐ㄓ脭?shù)據(jù)寄存

17、器傳送至段寄存器 段寄存器之間的傳送段寄存器之間的傳送 MOC AX,DS;段寄存器傳送至通用數(shù)據(jù)寄存器段寄存器傳送至通用數(shù)據(jù)寄存器 MOV ES,AX;從通用數(shù)據(jù)寄存器傳送至另一個(gè)段寄存器從通用數(shù)據(jù)寄存器傳送至另一個(gè)段寄存器 另外,對(duì)于另外,對(duì)于CS和和IP,通常不要求用戶利用傳送指令,通常不要求用戶利用傳送指令改變其中內(nèi)容。但改變其中內(nèi)容。但CS可作為源操作數(shù)。可作為源操作數(shù)。 變量的段地址和偏移地址分別用兩個(gè)算符變量的段地址和偏移地址分別用兩個(gè)算符SEG和和OFFSET來(lái)指定,加上變量名,就可以分別產(chǎn)來(lái)指定,加上變量名,就可以分別產(chǎn)生該變量的段地址或偏移地址,如:生該變量的段地址或偏移地

18、址,如:SEG W,OFFSET DATA。例:例:MOV DI,AX;寄存器間接尋址,;寄存器間接尋址,AX中的中的16位數(shù)送位數(shù)送 ;DI、DI+1單元單元MOV SI,ES:BP;寄存器間接尋址,缺省時(shí)段寄存;寄存器間接尋址,缺省時(shí)段寄存 ;器為;器為SS,這里特指附加段,這里特指附加段ES中中BP所指所指 ;向的兩個(gè)單元的內(nèi)容送;向的兩個(gè)單元的內(nèi)容送SI寄存器。寄存器。 MOV WORD PTRSI,6070H;立即數(shù);立即數(shù)6070H送送 ;到;到SI字單元。字單元。PTR是一個(gè)匯編操作符,是一個(gè)匯編操作符, ;與前面的;與前面的 WORD一起表示該單元類(lèi)型一起表示該單元類(lèi)型 ;是字

19、單元。;是字單元。 堆棧是按后進(jìn)先出原則組織的一段特殊存儲(chǔ)區(qū)域,堆棧是按后進(jìn)先出原則組織的一段特殊存儲(chǔ)區(qū)域,8086系統(tǒng)設(shè)置堆棧段寄存器系統(tǒng)設(shè)置堆棧段寄存器SS(存放堆棧段段地址)(存放堆棧段段地址)和堆棧指針和堆棧指針SP(存放偏移地址)。(存放偏移地址)。堆棧操作指令堆棧操作指令00000SS:0000SS:SP堆堆 棧棧 段段例:例:PUSH AX;將將AX內(nèi)容壓入堆棧,同時(shí)內(nèi)容壓入堆棧,同時(shí)SP-2 SP (2) 2) 進(jìn)棧指令進(jìn)棧指令PUSHPUSH格式:格式:PUSH OP 將將16位位寄存器或存儲(chǔ)單元的內(nèi)容送入堆棧。寄存器或存儲(chǔ)單元的內(nèi)容送入堆棧。注意注意:CS不能作為目的操作數(shù)

20、;操作數(shù)必須是不能作為目的操作數(shù);操作數(shù)必須是16位。位。 中斷服務(wù)程序中保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)時(shí)用到:中斷服務(wù)程序中保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)時(shí)用到: PUSH AX PUSH BX POP BX POP AX 將將SP所指向的堆棧棧頂?shù)囊粋€(gè)所指向的堆棧棧頂?shù)囊粋€(gè)字字彈到寄存器彈到寄存器或存儲(chǔ)單元中。或存儲(chǔ)單元中。 (3) 3) 出棧指令出棧指令POPPOP格式:格式:POP OPPOP OP(4 4)交換指令)交換指令XCHGXCHG格式:格式:XCHG OP1,OP2功能:將源操作數(shù)和目的操作數(shù)內(nèi)容相互交換。功能:將源操作數(shù)和目的操作數(shù)內(nèi)容相互交換。注意:注意:通用寄存器間、通用寄存器與存儲(chǔ)器間可以

21、,通用寄存器間、通用寄存器與存儲(chǔ)器間可以, 但段寄存器、存儲(chǔ)單元間不可。但段寄存器、存儲(chǔ)單元間不可。2. 累加器專(zhuān)用傳送指令累加器專(zhuān)用傳送指令 實(shí)現(xiàn)實(shí)現(xiàn)CPU與外設(shè)(打印機(jī)、顯示器等)交換數(shù)據(jù)、與外設(shè)(打印機(jī)、顯示器等)交換數(shù)據(jù)、傳送控制命令。傳送控制命令。 8086用專(zhuān)用輸入用專(zhuān)用輸入(in)輸出輸出(out)指令,通過(guò)累指令,通過(guò)累加器加器AX(AL)/DATA,AX(AL)/DX完成,前者為完成,前者為直接尋址(直接尋址(000FFH),后者為間接尋址),后者為間接尋址(00000FFFFH),并對(duì)所有的外設(shè)地址采用獨(dú)立于),并對(duì)所有的外設(shè)地址采用獨(dú)立于存儲(chǔ)器的編址方式,外設(shè)地址稱為存儲(chǔ)

22、器的編址方式,外設(shè)地址稱為端口號(hào)端口號(hào)。(1)輸入指令)輸入指令I(lǐng)N格式:格式:IN 累加器,端口累加器,端口例:例:IN AL,21H;將端口;將端口21H的的8位數(shù)讀到位數(shù)讀到AL中中 MOV DX,201H IN AX,DX ;將端口;將端口201H和和202H的的16位數(shù)位數(shù) ;讀入;讀入AX中中 格式:格式:OUT 端口,累加器端口,累加器例:例: OUT 22H,AX;將;將AX中的中的16位數(shù)傳到端口位數(shù)傳到端口 ;22H和和23H MOV DX,501H OUT DX,AL ;將;將AL中的中的8位數(shù)輸出到端口位數(shù)輸出到端口 ;501H(2)輸出指令)輸出指令OUT功能:將功能

23、:將BX和和AL的內(nèi)容相加作為有效地址的內(nèi)容相加作為有效地址 EA,在一個(gè)表格中找出此單元的內(nèi)容,在一個(gè)表格中找出此單元的內(nèi)容 并傳給并傳給AL。 該(查表)指令是在一個(gè)字節(jié)型變量表中該(查表)指令是在一個(gè)字節(jié)型變量表中取某個(gè)值存入取某個(gè)值存入AL。特殊之處:源操作數(shù)使用特殊之處:源操作數(shù)使用BX、AL這種這種BX 基址、基址、AL變址的尋址方式,變址的尋址方式,表的起表的起 始地址的偏移量始地址的偏移量應(yīng)事先裝入應(yīng)事先裝入BX寄存寄存 器,器, AL中存放中存放查找對(duì)象在表中地址查找對(duì)象在表中地址 與表起始地址相差的字節(jié)數(shù)與表起始地址相差的字節(jié)數(shù)。(3)換碼指令)換碼指令XLAT格式:格式:

24、XLAT MOV AL,9 ;9 AL MOV BX,OFFSET S_TAB;表首址;表首址 BX XLAT ;BX+AL AL 例:以下指令序列把例:以下指令序列把S_TABS_TAB表的第表的第1010個(gè)字節(jié)送入個(gè)字節(jié)送入ALAL。 用于將源操作數(shù)的地址傳送到目的操作數(shù),用于將源操作數(shù)的地址傳送到目的操作數(shù),其中源操作數(shù)必須是其中源操作數(shù)必須是存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù),目的操作數(shù),目的操作數(shù)必須是必須是16位的位的內(nèi)部寄存器內(nèi)部寄存器。共有三條如表。共有三條如表2:表表2 目標(biāo)地址傳送指令格目標(biāo)地址傳送指令格式式3. 目標(biāo)地址傳送指令目標(biāo)地址傳送指令(1) LEA(1) LEA指令指令格

25、式:格式:LEA OP目,目,OP源源功能:將源操作數(shù)的功能:將源操作數(shù)的有效地址有效地址EA送目的操作數(shù)。送目的操作數(shù)。比較下列兩條指令:比較下列兩條指令:LEADI,TABLEMOV DI,OFFSET TABLE;?。蝗ABLE偏移地址送偏移地址送DI(2) LDS(2) LDS和和LESLES指令指令 LDS和和LES指令指令的源操作數(shù)是一個(gè)具有的源操作數(shù)是一個(gè)具有雙字雙字類(lèi)型類(lèi)型(4字節(jié))的變量,取出后,低地址的兩字節(jié)送目的字節(jié))的變量,取出后,低地址的兩字節(jié)送目的操操作數(shù)作數(shù),高地址的兩字節(jié)分別送高地址的兩字節(jié)分別送DS和和ES段寄存器段寄存器。例:例:LDS DI,2300;將

26、;將2300和和2301單元的內(nèi)單元的內(nèi) ;容送;容送DI,將,將2302和和 ;2303單元的內(nèi)容送單元的內(nèi)容送DS。4. 標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令(1)讀標(biāo)志指令讀標(biāo)志指令 LAHF:將標(biāo)志寄存器:將標(biāo)志寄存器低低8位位送送AH(2)設(shè)置標(biāo)志指令設(shè)置標(biāo)志指令SAHF:將:將AH送送標(biāo)志寄存器標(biāo)志寄存器低低8位位(3)PUSHF指令:將指令:將16位標(biāo)志寄存器入棧,同時(shí)修改位標(biāo)志寄存器入棧,同時(shí)修改 棧指針棧指針(4)POPF指令:將棧頂?shù)囊粋€(gè)字送指令:將棧頂?shù)囊粋€(gè)字送標(biāo)志寄存器標(biāo)志寄存器入棧,入棧, 同時(shí)修改棧指針同時(shí)修改棧指針SP SAHF和和POPF指令將影響標(biāo)志寄存器的內(nèi)

27、容。指令將影響標(biāo)志寄存器的內(nèi)容。標(biāo)志寄存器結(jié)構(gòu)圖標(biāo)志寄存器結(jié)構(gòu)圖3.4.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令加法指令加法指令加法(字、字節(jié))加法(字、字節(jié))帶進(jìn)位加法指令帶進(jìn)位加法指令帶進(jìn)位加法帶進(jìn)位加法(字、字節(jié)字、字節(jié))加加 1 指令指令加加 1(字、字節(jié))(字、字節(jié))減法指令減法指令減法(字、字節(jié))減法(字、字節(jié))帶借位減法指令帶借位減法指令帶借位減法帶借位減法(字、字節(jié)字、字節(jié))減減 1 指令指令減減 1(字、字節(jié))(字、字節(jié))比較指令比較指令比較(字、字節(jié))比較(字、字節(jié))求補(bǔ)指令求補(bǔ)指令求補(bǔ)碼求補(bǔ)碼1. 1. 算術(shù)加法指令算術(shù)加法指令 (1 1)算數(shù)加法)算數(shù)加法ADDADD 格式:格式:

28、ADD OPADD OP目,目,OPOP源源功能:將源和目的操作數(shù)相加,結(jié)果保留在目的操作數(shù)功能:將源和目的操作數(shù)相加,結(jié)果保留在目的操作數(shù) 中。中。例:例:MOV AXMOV AX,F(xiàn)IRST FIRST ;FIRSTFIRST存儲(chǔ)區(qū)第一個(gè)數(shù)送存儲(chǔ)區(qū)第一個(gè)數(shù)送AXAX ADD AX ADD AX,SECOND SECOND ;兩數(shù)相加送;兩數(shù)相加送AXAX。見(jiàn)例。見(jiàn)例4-254-25(2 2)帶進(jìn)位算數(shù)加法)帶進(jìn)位算數(shù)加法ADCADC格式:格式:ADC OPADC OP目,目,OPOP源源功能:將源和目的操作數(shù)及功能:將源和目的操作數(shù)及CFCF的值相加,結(jié)果保留在目的值相加,結(jié)果保留在目 的

29、操作數(shù)中。的操作數(shù)中。(3 3)加)加1 1指令指令I(lǐng)NCINC 格式:格式:INC OPINC OP功能:將操作數(shù)加功能:將操作數(shù)加1 1,再送回該操作數(shù)。(不影響,再送回該操作數(shù)。(不影響CFCF)存儲(chǔ)器操作數(shù)要說(shuō)明類(lèi)型存儲(chǔ)器操作數(shù)要說(shuō)明類(lèi)型BCD數(shù)運(yùn)算調(diào)整指令數(shù)運(yùn)算調(diào)整指令 用一個(gè)字節(jié)表示一位十進(jìn)制數(shù),稱為用一個(gè)字節(jié)表示一位十進(jìn)制數(shù),稱為非組非組合(或非壓縮)式合(或非壓縮)式BCDBCD碼;碼;用一個(gè)字節(jié)表示兩位用一個(gè)字節(jié)表示兩位十進(jìn)制數(shù),稱為十進(jìn)制數(shù),稱為組合(或壓縮)式組合(或壓縮)式BCDBCD碼;碼; 例:例:0000 01100000 0110(6 6),),0001 011

30、00001 0110(1616)。)。 BCDBCD數(shù)向高位的進(jìn)位是逢數(shù)向高位的進(jìn)位是逢1010進(jìn)進(jìn)1 1,而,而4 4位二進(jìn)位二進(jìn)制數(shù)向高位進(jìn)位是逢制數(shù)向高位進(jìn)位是逢1616進(jìn)一,若加上進(jìn)一,若加上6 6,則可以,則可以得到正確的得到正確的BCDBCD數(shù)。數(shù)。DAA:對(duì)對(duì)AL中兩個(gè)中兩個(gè)組合組合BCD碼相加所得的結(jié)果進(jìn)行碼相加所得的結(jié)果進(jìn)行 調(diào)整,結(jié)果存于調(diào)整,結(jié)果存于AL中。中。方法:若方法:若(AL&0FH) 9或或AF=1,則則(AL+6)送送AL, AF1;若若(AL) 9FH或或CF=1,則則 (AL+60H)送送AL,CF1。例:例:MOV AX,3456H;AH34H,AL56

31、HADD AL,AH ;AL=8AHDAA ;AL=90H(A9, ;8AH 9,0EH614H ;08H1)方法:若方法:若(AL&0FH) 9或或AF=1,則則(AL+6)&0FH送送 AL,AH加加1,AFCF1;否則否則AL&0FH 送送AL,AFCF 0。 重要之處是將重要之處是將AL的高的高4位清零,表現(xiàn)在位清零,表現(xiàn)在&0FH ( “與與” )。)。2. 算數(shù)減法指令算數(shù)減法指令1、算數(shù)減法指令:、算數(shù)減法指令:SUB OP目,目,OP源源 功能:功能: OP目目- OP源源 OP目目2、帶借位的減法指令:、帶借位的減法指令: SBB OP目,目,OP源源 功能:功能: OP目目

32、- OP源源- CF OP目目3、減、減1指令:指令: DEC OP 功能:功能: OP-1 OP(不影響(不影響CF) 4、對(duì)壓縮、對(duì)壓縮BCD數(shù)減法操作的結(jié)果進(jìn)行校正數(shù)減法操作的結(jié)果進(jìn)行校正DASDAS:對(duì)對(duì)AL中兩個(gè)中兩個(gè)組合組合BCD碼相減所得的結(jié)果進(jìn)行碼相減所得的結(jié)果進(jìn)行 調(diào)整,結(jié)果存于調(diào)整,結(jié)果存于AL中。中。調(diào)整原則:調(diào)整原則:AL低低4位大于位大于9或或AF=1時(shí),時(shí),AL-6AL, AF=1;AL高高4位大于位大于9或者或者CF=1時(shí),時(shí), AL-60HAL,CF=1。 5、對(duì)非壓縮、對(duì)非壓縮BCD數(shù)減法操作的結(jié)果進(jìn)行校正數(shù)減法操作的結(jié)果進(jìn)行校正AASAAS:對(duì)對(duì)AL中兩個(gè)中

33、兩個(gè)非組合非組合BCD碼相減所得的結(jié)果進(jìn)行碼相減所得的結(jié)果進(jìn)行 調(diào)整,結(jié)果存于調(diào)整,結(jié)果存于AL中。中。調(diào)整原則:調(diào)整原則:AL低低4位位表示的數(shù)表示的數(shù)大于大于9或者或者AF=1時(shí),時(shí), AL-6AL,AH-1AH,AF=CF=1, 清除清除AL高高4位。位。 6 6、比較指令、比較指令CMPCMP格式:格式:CMP OPCMP OP目,目,OPOP源源功能:將目標(biāo)操作數(shù)與原操作數(shù)功能:將目標(biāo)操作數(shù)與原操作數(shù)相減相減,不回送結(jié)果,不回送結(jié)果, 只影響只影響標(biāo)志位標(biāo)志位。例如:例如:CMP ACMP A,B B 判斷兩個(gè)操作數(shù)是否相等:(零標(biāo)志位判斷兩個(gè)操作數(shù)是否相等:(零標(biāo)志位ZFZF) 若

34、若ZFZF1 1,則,則A AB B;若;若ZFZF0 0,則,則A BA B。 判斷兩個(gè)操作數(shù)的大小,分為:判斷兩個(gè)操作數(shù)的大小,分為: 判斷兩個(gè)無(wú)符號(hào)操作數(shù)的大?。海ㄟM(jìn)位標(biāo)志位判斷兩個(gè)無(wú)符號(hào)操作數(shù)的大?。海ㄟM(jìn)位標(biāo)志位CFCF) 若若CF=1CF=1,則,則ABAB;若;若CF=0CF=0,則,則ABAB。 判斷兩個(gè)帶符號(hào)操作數(shù)的大?。海ǚ?hào)標(biāo)志位判斷兩個(gè)帶符號(hào)操作數(shù)的大?。海ǚ?hào)標(biāo)志位SFSF及及 溢出標(biāo)志位溢出標(biāo)志位OFOF) 若若SF OFSF OF1 1,則,則ABAB; 若若SF OFSF OF0 0,則,則ABAB。 例:有兩組例:有兩組5050個(gè)字節(jié)的數(shù)據(jù),分別放在自個(gè)字節(jié)的數(shù)

35、據(jù),分別放在自FIRSTFIRST和和 SECONDSECOND開(kāi)始的存儲(chǔ)區(qū)中,試比較兩組數(shù)據(jù)是開(kāi)始的存儲(chǔ)區(qū)中,試比較兩組數(shù)據(jù)是 否相同,若相同則否相同,若相同則0 0AL,否則,否則FFHAL。 MOV SI,OFFSET FIRST MOV DI,OFFSET SECOND MOV CX,50 P :MOV AL,SI CMP AL,DI JZ NEXT MOV AL,0FFH JMP STOPNEXT:INC SI INC DI DEC CX JNZ P MOV AL,0STOP:HLT7、取補(bǔ)指令、取補(bǔ)指令NEG格式:格式:NEG OP功能:將操作數(shù)功能:將操作數(shù)取補(bǔ)取補(bǔ)(用(用0減去

36、操作數(shù))后送回原操作減去操作數(shù))后送回原操作 數(shù)。數(shù)。 OP是乘數(shù),可為是乘數(shù),可為8/16位通用寄存器及存儲(chǔ)器;位通用寄存器及存儲(chǔ)器;另一操作數(shù)另一操作數(shù)被乘數(shù)被乘數(shù)隱含在隱含在AL/AX中。中。AH或或DX的內(nèi)的內(nèi)容決定標(biāo)志位容決定標(biāo)志位CF和和OF。ALAL8 8位操作數(shù)位操作數(shù) AH AL AH AL AXAX1616位操作數(shù)位操作數(shù) DX AX DX AX乘法運(yùn)算示意圖乘法運(yùn)算示意圖3. 算術(shù)乘法指令算術(shù)乘法指令 (1)無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)乘法指令:乘法指令: MUL OP (2)帶符號(hào)數(shù)帶符號(hào)數(shù)乘法指令:乘法指令: IMUL OP例例1:MUL BL ;AL乘乘BL AXMUL BX

37、;AX乘乘BX DX、AXMUL BYTE PTRDI+6 ;AL乘存儲(chǔ)器乘存儲(chǔ)器(8位位)MUL WORD PTR ALPHA;AX乘存儲(chǔ)器乘存儲(chǔ)器(16位位)例例2:MOV AL,14H;(AL)14H(20)MOV CL,05H;(CL)05H(5)MUL CL ;(AX)0064H(100), ;(CF)(OF)0(AH)0)(3)非壓縮非壓縮BCD數(shù)數(shù)乘法乘法操作結(jié)果校正操作結(jié)果校正AAMAAM:對(duì)對(duì)AX中兩個(gè)非組合中兩個(gè)非組合BCD碼相乘所得的結(jié)果進(jìn)碼相乘所得的結(jié)果進(jìn) 行調(diào)整,結(jié)果存于行調(diào)整,結(jié)果存于AX中。中。方法:方法:AL中內(nèi)容中內(nèi)容10,商送,商送AH,余數(shù)送,余數(shù)送AL。

38、例:例:MUL OP(非組合(非組合BCD碼)碼) AAM4. 算術(shù)除法指令算術(shù)除法指令(1)無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)除法指令除法指令DIV格式:格式:DIV OP 除數(shù)除數(shù)OP必須是寄存器或存儲(chǔ)器,必須是寄存器或存儲(chǔ)器,被除數(shù)被除數(shù)隱含在隱含在AX(字節(jié)除字節(jié)除)或或DX、AX(字除法字除法)中,商在中,商在AL或或AX,余,余數(shù)在數(shù)在AH或或DX。例:例:DIVCL;AX中的數(shù)據(jù)除以中的數(shù)據(jù)除以CL中的數(shù)據(jù),中的數(shù)據(jù),AL存存 ;商,;商,AH存余數(shù)存余數(shù)DIV WORD PTRDI;DX和和AX中的中的32位位 ;數(shù)除以;數(shù)除以DI和和DI+1單元中的單元中的16位數(shù)位數(shù) ;據(jù),;據(jù),AX存商,

39、存商,DX存余數(shù)。存余數(shù)。(2)帶符號(hào)數(shù)帶符號(hào)數(shù)除法指令除法指令I(lǐng)DIV格式:格式: IDIV OP 除法不允許兩個(gè)字長(zhǎng)相等的操作數(shù)相除,被除數(shù)必除法不允許兩個(gè)字長(zhǎng)相等的操作數(shù)相除,被除數(shù)必須是除數(shù)的須是除數(shù)的雙倍字長(zhǎng)雙倍字長(zhǎng)。(3)帶符號(hào)數(shù)字節(jié)擴(kuò)展指令)帶符號(hào)數(shù)字節(jié)擴(kuò)展指令CBW格式:格式: CBW功能:將功能:將AL中的單字節(jié)數(shù)的中的單字節(jié)數(shù)的符號(hào)符號(hào)擴(kuò)展到擴(kuò)展到AH中,若中,若 AL80H,則,則0賦給賦給AH;若;若AL80H,則,則 0FFH賦給賦給AH例例1:MOV AL,4FH ;(AL)=0100 1111B CBW ;(AH)=0000 0000B例例2:MOV AL,0FB

40、H;(AL)=1111 1011B CBW ;(AH)=1111 1111B(4)帶符號(hào)數(shù)字?jǐn)U展指令)帶符號(hào)數(shù)字?jǐn)U展指令CWD格式:格式: CWD功能:將功能:將AX中的數(shù)的中的數(shù)的符號(hào)符號(hào)擴(kuò)展到擴(kuò)展到DX中,若中,若 AX8000H,0賦給賦給DX;若;若AX8000H, 0FFFFH賦給賦給DX(5)非壓縮非壓縮BCD數(shù)數(shù)除法除法校正校正AADAAD:對(duì)對(duì)AX中兩個(gè)非組合中兩個(gè)非組合BCD碼進(jìn)行調(diào)整。碼進(jìn)行調(diào)整。方法:方法:AH中內(nèi)容中內(nèi)容10與與AL中內(nèi)容相加,結(jié)果送中內(nèi)容相加,結(jié)果送AL, AH清零。清零。例:例:AAD DIV OP(非組合(非組合BCD碼)碼)3.4.3 位操作指令

41、位操作指令表表 邏輯運(yùn)算指令格式邏輯運(yùn)算指令格式NOT:逐:逐位位取反后送回原處。取反后送回原處。OR:將某些:將某些位位設(shè)置為設(shè)置為1(1),其余位不變,其余位不變(0);非組;非組 合合BCD碼轉(zhuǎn)換為碼轉(zhuǎn)換為ASCII碼。碼。AND:屏蔽:屏蔽(0)或保留或保留(1)某些某些位位。例例1:OR AX,8080H;(AX)V(1000 0000 1000 0000B)例例2:MOV AL,09H ;(AL)=09H(9) OR AL,30H ;(AL)=39H= 9表表 邏輯運(yùn)算指令格式邏輯運(yùn)算指令格式XOR:將某些:將某些位位“求反求反”(1),其余位不變,其余位不變(0);將將 寄存器清

42、零。寄存器清零。 1010 1010B例:例:MOV AL,0FH ;(AL)=0000 1111B XOR AL,0AAH;(AL)=1010 0101B(0A5H) XOR CX,CX ;CX清零清零TEST:作邏輯與運(yùn)算后置標(biāo)志位。用于:作邏輯與運(yùn)算后置標(biāo)志位。用于位位測(cè)試測(cè)試(1)。例:例:TEST AL,00000001B;第第0位是位是1還是還是0?(狀態(tài)?(狀態(tài) ;標(biāo)志如例;標(biāo)志如例4-46)2. 邏輯移位指令邏輯移位指令(1)邏輯左移指令:)邏輯左移指令:SHL OP目,計(jì)數(shù)值目,計(jì)數(shù)值 將操作數(shù)內(nèi)容左移,每移一次,最低位將操作數(shù)內(nèi)容左移,每移一次,最低位補(bǔ)補(bǔ)0,最高,最高位送

43、位送CF。(3)邏輯右移指令:)邏輯右移指令:SHR OP目,計(jì)數(shù)值目,計(jì)數(shù)值 將操作數(shù)內(nèi)容右移,每移一次,最高位將操作數(shù)內(nèi)容右移,每移一次,最高位補(bǔ)補(bǔ)0,最低,最低位送位送CF。(2)算術(shù)左移指令:)算術(shù)左移指令:SALOP目,計(jì)數(shù)值目,計(jì)數(shù)值 同同SHL(4)算術(shù)右移指令:)算術(shù)右移指令:SAR OP目,計(jì)數(shù)值目,計(jì)數(shù)值 將操作數(shù)內(nèi)容右移,每移一次,最高位的值將操作數(shù)內(nèi)容右移,每移一次,最高位的值不變不變,最低位送最低位送CF。CLCL(5)不帶進(jìn)位循環(huán)左移指令:)不帶進(jìn)位循環(huán)左移指令:ROL OP目,計(jì)數(shù)值目,計(jì)數(shù)值 將操作數(shù)內(nèi)容循環(huán)左移,每移一次,最高位將操作數(shù)內(nèi)容循環(huán)左移,每移一次,

44、最高位移入移入CF,同時(shí)移入同時(shí)移入最低位最低位。(6)不帶進(jìn)位循環(huán)右移指令:)不帶進(jìn)位循環(huán)右移指令:ROR OP目,計(jì)數(shù)值目,計(jì)數(shù)值 將操作數(shù)內(nèi)容循環(huán)右移,每移一次,最低位將操作數(shù)內(nèi)容循環(huán)右移,每移一次,最低位移入移入CF,同時(shí)移入同時(shí)移入最高位最高位。(7)帶進(jìn)位循環(huán)左移指令:)帶進(jìn)位循環(huán)左移指令:RCLOP目,計(jì)數(shù)值目,計(jì)數(shù)值 包括進(jìn)位位在內(nèi),一起循環(huán)左移,每移一次,最高包括進(jìn)位位在內(nèi),一起循環(huán)左移,每移一次,最高位移入位移入CF,原,原CF移入最低位。移入最低位。例:例:AL=abcde (abcde表示二進(jìn)制表示二進(jìn)制1或或0),CL=2, 循環(huán)右移指令:循環(huán)右移指令:ROR AL,

45、1 執(zhí)行后,執(zhí)行后,AL=eabcd,CF=e 帶進(jìn)位循環(huán)右移指令:帶進(jìn)位循環(huán)右移指令:RCR AL,CL 執(zhí)行后,執(zhí)行后,AL=deeab,CF=c(8)帶進(jìn)位循環(huán)右移指令:)帶進(jìn)位循環(huán)右移指令:RCR OP目,計(jì)數(shù)值目,計(jì)數(shù)值 包括進(jìn)位位在內(nèi),一起循環(huán)右移,每移一次,最低包括進(jìn)位位在內(nèi),一起循環(huán)右移,每移一次,最低位移入位移入CF,原,原CF移入最高位。移入最高位。 例:將一組例:將一組BCDBCD碼轉(zhuǎn)換成碼轉(zhuǎn)換成ASCIIASCII碼。設(shè)某緩沖區(qū)從碼。設(shè)某緩沖區(qū)從BUFBUF單單 元開(kāi)始連續(xù)存放著元開(kāi)始連續(xù)存放著8 8個(gè)組合個(gè)組合BCDBCD碼,要求將它們轉(zhuǎn)換碼,要求將它們轉(zhuǎn)換 成成AS

46、CIIASCII碼,存放在以碼,存放在以RESRES單元開(kāi)始的緩沖區(qū)。高位單元開(kāi)始的緩沖區(qū)。高位 BCDBCD碼轉(zhuǎn)換成的碼轉(zhuǎn)換成的ASCIIASCII碼,放在地址較高的單元。碼,放在地址較高的單元。 MOV SI,OFFSET BUF MOV DI,OFFSET RES MOV BL,8TRAT:MOV AL,SI MOV BH,AL AND AL,0FH OR AL,30H MOV DI,AL INC DIMOV CL,4SHR BH,CLOR BH,30HMOV DI,BHINC SIINC DIDEC BLJNZ TRATHLT3.4.4 串處理指令串處理指令所有基本的串操作有如下共同點(diǎn)

47、:所有基本的串操作有如下共同點(diǎn):1 1、用、用SISI、 DIDI尋址源、目標(biāo)操作數(shù),且假定是在現(xiàn)行尋址源、目標(biāo)操作數(shù),且假定是在現(xiàn)行 的數(shù)據(jù)、附加段中(即段地址在的數(shù)據(jù)、附加段中(即段地址在DSDS、ESES中);中);2 2、每執(zhí)行一次串操作后自動(dòng)修改指針、每執(zhí)行一次串操作后自動(dòng)修改指針SISI、DIDI。若。若DFDF=0=0 (1 1),則每次操作后),則每次操作后SISI和和DIDI自動(dòng)加(減)自動(dòng)加(減)1 1(對(duì)字(對(duì)字 節(jié)串操作)或加(減)節(jié)串操作)或加(減) 2 2(對(duì)字串操作);(對(duì)字串操作);3 3、串長(zhǎng)(字或字節(jié)個(gè)數(shù))存放在、串長(zhǎng)(字或字節(jié)個(gè)數(shù))存放在CXCX中。中。

48、在執(zhí)行指令前必須在在執(zhí)行指令前必須在DSDS、ESES、SISI、DIDI、DFDF和和CXCX中中置好需要的值,它們是串操作指令的隱含操作數(shù)。置好需要的值,它們是串操作指令的隱含操作數(shù)。1、串傳送指令:、串傳送指令:MOVSOP目,目,OP源源 MOVSB MOVSW 2、串比較指令:、串比較指令:CMPSOP目,目,OP源源 CMPSB CMPSW 3、串搜索指令:用來(lái)從目標(biāo)串中尋找關(guān)鍵字、串搜索指令:用來(lái)從目標(biāo)串中尋找關(guān)鍵字 SCASOP SCASB SCASW功能:將功能:將AL/AX中的關(guān)鍵字,中的關(guān)鍵字,減去減去由由DI所指向的所指向的目目 標(biāo)串標(biāo)串中的元素,不回送結(jié)果,根據(jù)結(jié)果置

49、標(biāo)志中的元素,不回送結(jié)果,根據(jù)結(jié)果置標(biāo)志 位,并位,并修改修改DI寄存器內(nèi)容,指向下一個(gè)元素。寄存器內(nèi)容,指向下一個(gè)元素。 例:將偏移首地址為例:將偏移首地址為BUFF1的的20個(gè)字節(jié)型個(gè)字節(jié)型 數(shù)據(jù),傳送到首地址為數(shù)據(jù),傳送到首地址為BUFF2的內(nèi)存區(qū)。的內(nèi)存區(qū)。 MOV SI,OFFSET BUFF1 LEA DI,BUFF2 MOV CX,20PL1:MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ PL1 HLT用一般傳送指令實(shí)現(xiàn):用一般傳送指令實(shí)現(xiàn):用串傳送指令實(shí)現(xiàn):用串傳送指令實(shí)現(xiàn): CLDPL1:MOVSB 例:將偏移首地址為例:將偏移首地

50、址為BUFF1的的20個(gè)字節(jié)型個(gè)字節(jié)型 數(shù)據(jù),傳送到首地址為數(shù)據(jù),傳送到首地址為BUFF2的內(nèi)存區(qū)。的內(nèi)存區(qū)。 MOV SI,OFFSET BUFF1 LEA DI,BUFF2 CLD MOV CX,20 PL1:MOVSB LOOP PL1 HLTREP MOVSB用循環(huán)指令實(shí)現(xiàn):用循環(huán)指令實(shí)現(xiàn):用串指令前綴實(shí)現(xiàn):用串指令前綴實(shí)現(xiàn):例:比較兩組數(shù)是否相同,如果相同例:比較兩組數(shù)是否相同,如果相同 AL=0,否則,否則AL置位。置位。 MOV SI,OFFSET DATA1 LEA DI,DATA2 CLD MOV CX,50 REPZ CMPSB JZ EQQ MOV AL,0FFH JMP

51、 STOP EQQ:MOV AL,0STOP:HLT4 4、串裝入指令、串裝入指令LDSBLDSB或或LDSWLDSW 指令格式:指令格式:LODS LODS OPOP LODS LODSB B LODS LODSW W 功能:將源串中功能:將源串中SISI所指向的存儲(chǔ)單元中的一個(gè)字所指向的存儲(chǔ)單元中的一個(gè)字 節(jié)節(jié)/ /字取到字取到AL/AXAL/AX中,并中,并修改修改SISI的內(nèi)容,指的內(nèi)容,指 向下一個(gè)字節(jié)向下一個(gè)字節(jié)/ /字單元。字單元。5 5、串存儲(chǔ)指令、串存儲(chǔ)指令STOSBSTOSB或或STOSWSTOSW 指令格式:指令格式:STOS STOS OPOP STOS STOSB B

52、 STOS STOSW W 功能:將功能:將AL/AXAL/AX中的一個(gè)字節(jié)中的一個(gè)字節(jié)/ /字存到由字存到由DIDI所指向所指向 的目標(biāo)串存儲(chǔ)單元中,并的目標(biāo)串存儲(chǔ)單元中,并修改修改DIDI的內(nèi)容,的內(nèi)容, 指向下一個(gè)字節(jié)指向下一個(gè)字節(jié)/ /字的存放單元。字的存放單元。 6. 6. 指令前綴指令前綴(1 1)REPREP重復(fù)重復(fù) REPREP前綴用在前綴用在MOVSMOVS、STOSSTOS、LODSLODS指令前。指令前。功能:每執(zhí)行一次串指令,串長(zhǎng)功能:每執(zhí)行一次串指令,串長(zhǎng)(CX)-1(CX)-1,直到,直到(CX)=0(CX)=0 重復(fù)執(zhí)行才結(jié)束。重復(fù)執(zhí)行才結(jié)束。(2 2)REPZ/

53、REPEREPZ/REPE相等則重復(fù)相等則重復(fù) 該指令一般用在該指令一般用在CMPSCMPS、SCASSCAS指令前。指令前。功能:每執(zhí)行一次串指令功能:每執(zhí)行一次串指令(CX)-1(CX)-1,并判斷,并判斷ZFZF標(biāo)志是否標(biāo)志是否 為為0 0。只要。只要(CX)0(CX)0且且ZFZF1 1(對(duì)應(yīng)數(shù)據(jù)相等),(對(duì)應(yīng)數(shù)據(jù)相等), 則重復(fù)執(zhí)行,直到則重復(fù)執(zhí)行,直到(CX)(CX)0 0或或ZFZF0 0(不等)。(不等)。(3 3)REPNZ/REPNEREPNZ/REPNE不相等則重復(fù)不相等則重復(fù) 該指令一般用在該指令一般用在CMPSCMPS、SCASSCAS指令前。指令前。功能:每執(zhí)行一次

54、串指令功能:每執(zhí)行一次串指令(CX)-1(CX)-1,并判斷,并判斷ZFZF標(biāo)志是否標(biāo)志是否 為為0 0,只要,只要(CX)0(CX)0且且ZF=0ZF=0,則重復(fù)執(zhí)行,直到,則重復(fù)執(zhí)行,直到 (CX)(CX)0 0或或ZFZF1 1 。3.4.5 程序控制轉(zhuǎn)移指令程序控制轉(zhuǎn)移指令 一般情況下,程序是順序執(zhí)行的,但不可能一般情況下,程序是順序執(zhí)行的,但不可能總是順序執(zhí)行,改變程序執(zhí)行順序的指令稱為總是順序執(zhí)行,改變程序執(zhí)行順序的指令稱為轉(zhuǎn)移指令轉(zhuǎn)移指令。(1)轉(zhuǎn)移指令,分為無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn))轉(zhuǎn)移指令,分為無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn) 移指令;移指令; (2)循環(huán)指令;)循環(huán)指令; (3)過(guò)程調(diào)

55、用與返回指令;)過(guò)程調(diào)用與返回指令; (4)中斷與返回指令。)中斷與返回指令。1、無(wú)條件轉(zhuǎn)移指令(、無(wú)條件轉(zhuǎn)移指令(JMP指令)指令)(1)段內(nèi)直接轉(zhuǎn)移指令)段內(nèi)直接轉(zhuǎn)移指令段內(nèi)段內(nèi)直接直接短轉(zhuǎn)移:短轉(zhuǎn)移:JMP SHORT OP 執(zhí)行操作執(zhí)行操作:(IP)(IP)+ 8位位位移量位移量(補(bǔ)碼補(bǔ)碼)段內(nèi)段內(nèi)直接直接近轉(zhuǎn)移:近轉(zhuǎn)移:JMP NEAR PTR OP 執(zhí)行操作執(zhí)行操作:(IP)(IP)+ 16位位位移量位移量例:例: JMP NEXT;符號(hào)地址即標(biāo)號(hào)符號(hào)地址即標(biāo)號(hào) NEXT: (2)段內(nèi))段內(nèi)間接間接轉(zhuǎn)移:轉(zhuǎn)移:JMP WORD PTR OP或或 JMP OP 執(zhí)行操作:執(zhí)行操作:(

56、IP)(EA)例:例: JMP WORD PTRBXDI;EA=BX+DI(存儲(chǔ)器存儲(chǔ)器) JMP BX ;EA=BX(通用寄存器通用寄存器)(3)段間)段間直接直接(遠(yuǎn)遠(yuǎn))轉(zhuǎn)移:轉(zhuǎn)移:JMP FAR PTR OP 執(zhí)行操作:執(zhí)行操作:(IP)OP的段內(nèi)的段內(nèi)偏移地址偏移地址 (CS)OP所在段的段地址所在段的段地址例:例: JMP FAR PTR NEXT;NEXT所在段的段地址、偏移所在段的段地址、偏移 ;地址送;地址送CS、IPJMP 2000H:1000H ;CS=2000H,IP=1000H(4)段間)段間間接間接轉(zhuǎn)移:轉(zhuǎn)移:JMP DWORD PTR OP 執(zhí)行操作:執(zhí)行操作:(I

57、P)(EA) (CS)(EA+2)例:例: JMP DWORD PTR SI;EA存放在存放在SI、SI+1,段地,段地 ;址存放在;址存放在SI+2,SI+32、條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令 單條件單條件轉(zhuǎn)移指令:轉(zhuǎn)移指令:格式格式 測(cè)試條件測(cè)試條件 格式格式 測(cè)試條件測(cè)試條件 JZ(JE) OP ZF=1 JP OP PF=1JNZ(JNE) OP ZF=0 JNP OP PF=0 JS OP SF=1 JC OP CF=1 JNS OP SF=0 (JB、JNAE) JO OP OF=1 JNC OP CF=0 JNO OP OF=0 (JAE、JNB)注意:注意:只能用只能用段內(nèi)段內(nèi)直接

58、尋址的直接尋址的8位位移量位位移量(-128127) 指令執(zhí)行時(shí),首先測(cè)試條件,滿足則程序轉(zhuǎn)移指令執(zhí)行時(shí),首先測(cè)試條件,滿足則程序轉(zhuǎn)移 到指令給出的目標(biāo)標(biāo)號(hào),否則順序執(zhí)行下一條到指令給出的目標(biāo)標(biāo)號(hào),否則順序執(zhí)行下一條 指令語(yǔ)句。指令語(yǔ)句。條件條件A處理處理?xiàng)l件條件A判斷判斷條件條件B處理處理?xiàng)l件條件B判斷判斷NYYN 無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令無(wú)符號(hào)數(shù)的條件轉(zhuǎn)移指令 格式格式 測(cè)試條件測(cè)試條件 JNBE(JA) OP CF且且ZF=0 不低于也不等于不低于也不等于/高于高于例:在例:在DATA1開(kāi)始的存儲(chǔ)區(qū)中存放了開(kāi)始的存儲(chǔ)區(qū)中存放了100 個(gè)個(gè)8位無(wú)符號(hào)數(shù),找出其中最大的數(shù)位無(wú)符號(hào)數(shù),找出其中最

59、大的數(shù) 存入存入MAX單元。單元。 MOV BX,OFFSET DATA1 MOV AL,BX MOV CX,63H P1:INC BX CMP AL,BX JAE NEXT MOV AL,BX NEXT:DEC CX JNZ P1 MOV MAX,AL HLT 帶符號(hào)數(shù)的條件轉(zhuǎn)移指令帶符號(hào)數(shù)的條件轉(zhuǎn)移指令 格式格式 測(cè)試條件測(cè)試條件 JNLE(JG) OP (SF OF)且且ZF=0 3. 循環(huán)控制指令循環(huán)控制指令注意:注意:* CX中存放循環(huán)次數(shù),中存放循環(huán)次數(shù), * 只能用段內(nèi)直接尋址的只能用段內(nèi)直接尋址的8位位移量位位移量(-128127)。 LOOP 目標(biāo)標(biāo)號(hào)目標(biāo)標(biāo)號(hào):計(jì)數(shù)循環(huán),:計(jì)數(shù)循環(huán),CX=0退出循環(huán)。退出循環(huán)。 LOOPZ / LOOPE 目標(biāo)標(biāo)號(hào)目標(biāo)標(biāo)號(hào):結(jié)果為:結(jié)果為0/相等循環(huán),相等循環(huán), CX=0或或ZF=0退出循環(huán)。退出循環(huán)。 LOOPNZ / LOOPNE 目標(biāo)標(biāo)號(hào)目標(biāo)標(biāo)號(hào):結(jié)果不為:結(jié)果不為0/不相等不相等 循環(huán),循環(huán),CX=0或或ZF=1退出循環(huán)。退出循環(huán)。 JCXZ 目標(biāo)標(biāo)號(hào)目標(biāo)標(biāo)號(hào):計(jì)數(shù)為:計(jì)數(shù)為0轉(zhuǎn)移,若轉(zhuǎn)移,若CX=0 時(shí),則時(shí),則 控制轉(zhuǎn)向目標(biāo)標(biāo)號(hào),否則順序執(zhí)行??刂妻D(zhuǎn)向目標(biāo)標(biāo)號(hào),否則順序執(zhí)行。執(zhí)行步驟:執(zhí)行步驟: (C

溫馨提示

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

評(píng)論

0/150

提交評(píng)論