指令系統(tǒng)和尋址方式_第1頁(yè)
指令系統(tǒng)和尋址方式_第2頁(yè)
指令系統(tǒng)和尋址方式_第3頁(yè)
指令系統(tǒng)和尋址方式_第4頁(yè)
指令系統(tǒng)和尋址方式_第5頁(yè)
已閱讀5頁(yè),還剩96頁(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、復(fù)習(xí):復(fù)習(xí): 16位微處理器位微處理器8086標(biāo)志寄存器標(biāo)志寄存器PSWo只定義了其中只定義了其中9位,另外位,另外7位未定義(不用)位未定義(不用)n6位狀態(tài)標(biāo)志:位狀態(tài)標(biāo)志:OF、SF、ZF、 PF、CF、AFn3位控制標(biāo)志:位控制標(biāo)志:DF、IF、TF OF DF IF TF SF ZF AF PF CF D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0進(jìn)位標(biāo)志進(jìn)位標(biāo)志奇偶標(biāo)志奇偶標(biāo)志輔助進(jìn)位標(biāo)志輔助進(jìn)位標(biāo)志零標(biāo)志零標(biāo)志符號(hào)標(biāo)志符號(hào)標(biāo)志單步跟蹤標(biāo)志單步跟蹤標(biāo)志中斷允許標(biāo)志中斷允許標(biāo)志方向標(biāo)志方向標(biāo)志益處標(biāo)志益處標(biāo)志補(bǔ)碼運(yùn)算用補(bǔ)碼運(yùn)

2、算用ORG 10100H ;偽指令偽指令: CS=1000h ; IP=0100HMOV AX, 0064H ;數(shù)據(jù)傳送指令;數(shù)據(jù)傳送指令 機(jī)器碼:機(jī)器碼:B8 64 00ADD AX, 0100 H ; 加法指令機(jī)器碼加法指令機(jī)器碼 機(jī)器碼:機(jī)器碼:05 00 01MOV 2000,AX ; 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 機(jī)器碼:機(jī)器碼:A3 00 20 ; DS=1492H 由操作系統(tǒng)安置由操作系統(tǒng)安置 ; IP=2000H 指令執(zhí)行位置指令執(zhí)行位置注:注:CS代碼段寄存器代碼段寄存器 DS數(shù)據(jù)段寄存器數(shù)據(jù)段寄存器 注:物理地址需要合成產(chǎn)生注:物理地址需要合成產(chǎn)生 IP指令指針寄存器指令指針寄

3、存器 復(fù)習(xí)復(fù)習(xí):邏輯地址、物理地址、指令、機(jī)器碼邏輯地址、物理地址、指令、機(jī)器碼第三章第三章 80X8680X86的指令系統(tǒng)和尋址方式的指令系統(tǒng)和尋址方式 3.1 3.1 指令的基本概念和基本格式指令的基本概念和基本格式指令格式:每條指令由兩部分組成:操作碼字段和操作數(shù)字段。 操作碼字段操作碼字段:用來(lái)說(shuō)明該指令所要完成的操作 操作數(shù)字段操作數(shù)字段:用來(lái)描述該指令的操作對(duì)象。 操作碼操作碼 操作數(shù)操作數(shù) . . 操作數(shù)操作數(shù)一地址指令: INC AX DEC CX二地址指令: MOV AX, 2000H ADD AH, BL注意注意: 操作碼后的第一個(gè)操作數(shù)是操作碼后的第一個(gè)操作數(shù)是目標(biāo)操作數(shù)

4、目標(biāo)操作數(shù),其它都是,其它都是源操作數(shù)源操作數(shù) 指令執(zhí)行后目標(biāo)操作數(shù)一般都要發(fā)生變化。指令執(zhí)行后目標(biāo)操作數(shù)一般都要發(fā)生變化。 3.2 3.2 指令的尋址方式指令的尋址方式3.2.1 3.2.1 尋址方式的基本概念尋址方式的基本概念尋找用到的數(shù)據(jù)在主存的哪一點(diǎn)放的?或在尋找用到的數(shù)據(jù)在主存的哪一點(diǎn)放的?或在CPU哪個(gè)寄存器中?哪個(gè)寄存器中?尋找下一條指令該轉(zhuǎn)移到主存的哪一點(diǎn)?尋找下一條指令該轉(zhuǎn)移到主存的哪一點(diǎn)?邏輯地址表達(dá)、物理地址表達(dá)邏輯地址表達(dá)、物理地址表達(dá) 邏輯地址邏輯地址 物理地址物理地址 2000H :0000H 20000H 2000H :0001H 20001H 2000H :00

5、02H 20002H 2000H :0003H 20003H 2000H :0004H 20004H 2000H :0005H 20005H 3.2.2 3.2.2 與數(shù)據(jù)有關(guān)的尋址方式(與數(shù)據(jù)有關(guān)的尋址方式(7 7種)種) 1.1.立即數(shù)尋址方式立即數(shù)尋址方式 這種尋址方式直接把參與操作的數(shù)據(jù)寫(xiě)在指令中,又稱為立即數(shù)或立即尋址。 例:例: MOV AL, 5執(zhí)行指令后執(zhí)行指令后: (AL) = 05HB005存儲(chǔ)器指令A(yù)L05例例: MOV AX, 3045H執(zhí)行指令后執(zhí)行指令后: (AX) = 3045H指令45AXOP45存儲(chǔ)器30低地址高地址30例:例: MOV AL, d執(zhí)行指令后執(zhí)

6、行指令后: (AL) = ?請(qǐng)看請(qǐng)看P9,ASCII碼表碼表(AL) = 64HB064存儲(chǔ)器指令A(yù)L64立即數(shù)尋址方式舉例立即數(shù)尋址方式舉例注意:注意:(1)立即數(shù)在指令中可直接由一個(gè)數(shù)值常數(shù)或字符型常數(shù)表示。)立即數(shù)在指令中可直接由一個(gè)數(shù)值常數(shù)或字符型常數(shù)表示。 (要通過(guò)下一章學(xué)的(要通過(guò)下一章學(xué)的“偽指令偽指令”來(lái)定義)來(lái)定義)(2)指令只允許源操作數(shù)使用立即數(shù)尋址方式,而目的操作數(shù)不允許。)指令只允許源操作數(shù)使用立即數(shù)尋址方式,而目的操作數(shù)不允許。 如指令:如指令: MOV 5, AL 為錯(cuò)誤指令!為錯(cuò)誤指令?。?)立即數(shù)作為指令的一部分直接從指令隊(duì)列中取出,不占用總線)立即數(shù)作為指令

7、的一部分直接從指令隊(duì)列中取出,不占用總線 周期,因此,這種尋址方式執(zhí)行速度快。周期,因此,這種尋址方式執(zhí)行速度快。(4)立即數(shù)為)立即數(shù)為16位時(shí),低位字節(jié)存放在存儲(chǔ)器低地址單元,高位字節(jié)存放位時(shí),低位字節(jié)存放在存儲(chǔ)器低地址單元,高位字節(jié)存放 在存儲(chǔ)器高地址單元。在存儲(chǔ)器高地址單元。(5)由于立即數(shù)為指令的一部分,因此在存儲(chǔ)器中立即數(shù)是存放在代碼段)由于立即數(shù)為指令的一部分,因此在存儲(chǔ)器中立即數(shù)是存放在代碼段 中的。中的。(6)源操作數(shù)與目的操作數(shù)的長(zhǎng)度要一致。)源操作數(shù)與目的操作數(shù)的長(zhǎng)度要一致。 如指令:如指令:MOV AH, 3064H 為錯(cuò)誤指令!為錯(cuò)誤指令! 2. 2.寄存器尋址寄存器

8、尋址 寄存器在寄存器在CPU中,在中,在8086CPU中共有中共有8個(gè)通用寄存器。個(gè)通用寄存器。 例例: MOV AX, BX執(zhí)行指令前: (AX) = 3045H (BX) = 4000H 執(zhí)行指令后: (AX) = 4000H (BX) = 4000H 用途:用途:用寄存器提供操作數(shù)時(shí)存取速度快用寄存器提供操作數(shù)時(shí)存取速度快 注意:注意:寄存器可以是寄存器可以是8 8位或位或1616位的,在同一條指令中,源操作數(shù)位的,在同一條指令中,源操作數(shù)和目的操作數(shù)的位數(shù)必須相同。和目的操作數(shù)的位數(shù)必須相同。8 8位寄存器只有位寄存器只有 AH AL AH AL BH BL CH CL DH DLBH

9、 BL CH CL DH DL指令中源操作數(shù)、目的操作數(shù)都允許使用寄存器尋址方指令中源操作數(shù)、目的操作數(shù)都允許使用寄存器尋址方式。式。由于存取這種操作數(shù)完全在由于存取這種操作數(shù)完全在CPUCPU內(nèi)部進(jìn)行,不占用總線周內(nèi)部進(jìn)行,不占用總線周期,因此,這種尋址方式執(zhí)行速度極快。期,因此,這種尋址方式執(zhí)行速度極快。3.3.存儲(chǔ)器尋址方式存儲(chǔ)器尋址方式直接尋址方式直接尋址方式 有效地址EA由指令直接給出 例如:MOV AX,0002H 被尋找數(shù)據(jù)的地址計(jì)算公式:被尋找數(shù)據(jù)的地址計(jì)算公式: PA = 16d (DS) + EA PA:尋找數(shù)據(jù)的物理地址尋找數(shù)據(jù)的物理地址 EA:尋找數(shù)據(jù)尋找數(shù)據(jù)的偏移地址

10、,也叫有效地址的偏移地址,也叫有效地址 左移左移4位位操作數(shù)操作數(shù)PA段寄存器段寄存器指令指令段首址段首址EAEA例:例:設(shè) ( DS ) = 3000H MOV AX, 2000H要訪問(wèn)的存儲(chǔ)單元物理地址物理地址為: PA= 30000H+2000H=32000H設(shè): (32000H)=3050H執(zhí)行指令后: (AX)=3050H 2000H5030存儲(chǔ)器代碼段op0020數(shù)據(jù)段30000H32000HAX30 50如果2000H單元在附加段,則指令為: MOV AX, ES:2000H 段跨越前綴: 段寄存器名 改變默認(rèn)使用的段寄存器注意:注意: 隱含的段為數(shù)據(jù)段 DS 如果尋找的數(shù)據(jù)不在

11、數(shù)據(jù)段 DS,則指令須標(biāo)明 段跨越前綴,即 MOV AX, ES :2000H寄存器間接尋址方式寄存器間接尋址方式 EA在基址寄存器在基址寄存器(BX/BP) 或變址寄存器或變址寄存器(SI/DI)中中 物理地址物理地址 = 16d (DS) + 物理地址物理地址 = 16d (SS) + (BP)注意段和基址的潛規(guī)則注意段和基址的潛規(guī)則: BP (SS) ; BX, SI, DI (DS) MOV AX, BX PA = 16d (DS) + (BX) MOV ES:BX , AX PA = 16d (ES) + (BX) MOV DX, BP PA = 16d (SS) + (BP)(BX

12、)(SI)(DI)3.存儲(chǔ)器尋址方式存儲(chǔ)器尋址方式直接尋址方式直接尋址方式 有效地址有效地址EA由指令直接給出由指令直接給出周2用途: 可用于處理數(shù)組可用于處理數(shù)組例:例:設(shè) ( DS ) = 2000H ( BX ) = 1000H指令為: MOV AX, BX 20000H+1000H = 21000H 要訪問(wèn)的存儲(chǔ)單元物理地址為:設(shè): (21000H)=50A0H執(zhí)行指令后: (AX)=50A0H 1000HAX A0 50存儲(chǔ)器數(shù)據(jù)段20000H21000H XX XX21002H50A0 數(shù)組起始地址注意:注意:(1)如果操作數(shù)在默認(rèn)段之外,指令中必須加段超越前綴。 MOV AX,E

13、S SI ; 操作數(shù)在數(shù)據(jù)段寄存器ES中, 不在默認(rèn)段DS中。 MOV AX,DS BP ;操作數(shù)在數(shù)據(jù)段寄存器DS中, 不在默認(rèn)段SS中。(2)若在指令中規(guī)定是段超越的,則BP也可以與其它的段寄存器相加,形成操作數(shù)地址。 MOV AX,DS BP ;BP與DS段寄存器形成操作數(shù)地址。(3)寄存器間接尋址的應(yīng)用場(chǎng)合與直接尋址的應(yīng)用場(chǎng)合相似。(4)源操作數(shù)與目的操作數(shù)的位數(shù)要匹配。寄存器相對(duì)尋址寄存器相對(duì)尋址操作數(shù)的有效地址EA是基址寄存器(BX或BP)或變址寄存器(SI或DI)與指令中給出的位移量(8位或16位)兩個(gè)地址分量之和。例如:MOV BX, SI+100H 有效地址的計(jì)算方式: 指令

14、中指定的寄存器是BX、SI、DI,則操作數(shù)默認(rèn)在數(shù)據(jù)段DS中;如果指令中指定的寄存器是BP,則操作數(shù)默認(rèn)在堆棧段SS中。 有效地址有效地址EA =(BX)(BP)(SI)(DI)+8位位16位位位移量位移量【例3.5】假設(shè)指令:MOV BX, SI+100H,在執(zhí)行它時(shí):(DS)=1000H,(SI)=2345H,內(nèi)存單元12445H的內(nèi)容為2715H,問(wèn)該指令執(zhí)行后,BX的值是什么?解:EA=(SI)+100H=2345H+100H=2445H PA=(DS)*16+EA=1000H*16+2445H =12445H。所以,該指令的執(zhí)行結(jié)果是:把從物理地址為12445H開(kāi)始的一個(gè)字的值傳送給

15、BX。OP CS DS15H27H 10000H 12445H SI:2345H 100H EA:2445H DS:1000H 12445H27 15 BX例: MOV AX, COUNTSI 或或 MOV AX, COUNT+SI假設(shè)(DS)=3000H, (SI)=2000H, COUNT=3000H那么 PA = 35000H 假設(shè)(35000H)=1234H, 那么 (AX)=1234H用途:適于數(shù)組、字符串、表格的處理用途:適于數(shù)組、字符串、表格的處理基址變址尋址方式基址變址尋址方式由指令中的基址寄存器內(nèi)容和變址寄存器內(nèi)容相加得到操作數(shù)的有效地址EA,即:EA基址寄存器基址寄存器變址

16、寄存器變址寄存器。 計(jì)算操作數(shù)物理地址的公式:計(jì)算操作數(shù)物理地址的公式: (1) 操作數(shù)物理地址PA (2) 操作數(shù)物理地址PA DISIBX16DS DISIBP16SS例:設(shè)( DS ) = 2100H( BX ) = 0158H( DI ) = 1000H指令為:MOV AX, BX+DI要訪問(wèn)的存儲(chǔ)單元物理地址為:21000H+0158H +1000H= 22158H 設(shè): (22158H)=1234H執(zhí)行指令后: (AX)=1234H用途: 可可用于處理數(shù)組用于處理數(shù)組 0158HAX1234 34 12存儲(chǔ)器數(shù)據(jù)段21000H22158H 1000H 數(shù)組起始地址 注意:注意:1.

17、基址加變址尋址可用于二維數(shù)組操作(如檢索數(shù)組元素)和二重循環(huán)等。2.必須是一個(gè)基址寄存器和一個(gè)變址寄存器的組合。如指令: MOV AX, BXBP 和MOV AX, SIDI 都是錯(cuò)誤的! 相對(duì)基址變址尋址方式相對(duì)基址變址尋址方式操作數(shù)的有效地址是三個(gè)地址分量之和,即一個(gè)基址寄存器(BX或BP)的內(nèi)容加上一個(gè)變址寄存器(SI或D1)的內(nèi)容,再加上指令中給出的位移量。即EA變址寄存器變址寄存器基址寄存器基址寄存器位移量。位移量。 計(jì)算操作數(shù)物理地址的公式:(1)操作數(shù)物理地址PA(2)操作數(shù)物理地址PASI8DS16BXDI16位位移量位位移量SI8SS16BPDI16位位移量位位移量 例3.6

18、 設(shè)(SS)=3000H,(BP)=2000H,(DI)=1000H,MASK=8H,(33008H)=34H,(AX)=12H。執(zhí)行指令: ADD AX, MASKBP+DI 后,AX寄存器的內(nèi)容是多少? 目的操作數(shù)采用寄存器尋址,地址在AX。 源操作數(shù)采用基址加變址尋址,EA = BP+DI+MASK。 執(zhí)行:(AX)+(33008H) AX 執(zhí)行后:(AX)= 46H, (BP)、(DI)、(SS)、 (33008H)不變。 SSBP指令2000H33008H左移4位81000HDI34H3000H3008H主存尋址方式小結(jié)主存尋址方式小結(jié)尋址方式尋址方式操作數(shù)地址操作數(shù)地址(PA)指令

19、格式舉例指令格式舉例立即尋址立即尋址操作數(shù)由指令給出操作數(shù)由指令給出MOV AX, 100H ;(AX)100H寄存器尋址寄存器尋址操作數(shù)在寄存器中操作數(shù)在寄存器中MOV AX, BX ;(AX)(BX)直接尋址直接尋址操作數(shù)的有效地址由指令直接給出操作數(shù)的有效地址由指令直接給出MOV AX, 100 ;(AX)(100)MOV AX,VAR ;(AX)(VAR)寄存器寄存器間接尋址間接尋址 PA=(DS)16+(BX)或或(SI)或或(DI)PA=(SS) 16+(BP)MOV AX, BX ; (AX)(DS)16+(BX) 寄存器寄存器相對(duì)尋址相對(duì)尋址 PA=(DS)16+(BX)或或(

20、SI)或或(DI)+位移位移量量PA=(SS) 16+(BP)+位移量位移量MOV AL, MESSSI ;(AL)(DS)16+(SI)+ MESS) 基址變址尋址基址變址尋址 PA=(DS)16+(BX)+(SI)或或(DI)PA=(SS) 16+(BP) +(SI)或或(DI) MOV AX, BX+DI ;(AX)(DS)16+(BX)+(DI) 相對(duì)相對(duì)基址變址尋址基址變址尋址 PA=(DS)16+(BX)+(SI)或或(DI)+位移量位移量PA=(SS) 16+(BP) +(SI)或或(DI)+位移量位移量 MOV AX, BUFF(BX+DI);(AX)(DS)16+(BX)+(

21、DI)+ BUFF)返 33.2.3 I/O3.2.3 I/O端口尋址方式端口尋址方式 80 x86實(shí)行實(shí)行I/O端口獨(dú)立編址方式,即內(nèi)存從端口獨(dú)立編址方式,即內(nèi)存從0開(kāi)始編址,開(kāi)始編址, I/O端口也從端口也從0開(kāi)始編址開(kāi)始編址。1.直接直接I/O端口尋址方式端口尋址方式 在這種尋址方式中,端口地址是在指令中以立即數(shù)形式直接在這種尋址方式中,端口地址是在指令中以立即數(shù)形式直接給出端口號(hào),這是一個(gè)給出端口號(hào),這是一個(gè)8位的立即數(shù),可對(duì)位的立即數(shù),可對(duì)0255個(gè)個(gè)8位端口進(jìn)行位端口進(jìn)行尋址。尋址。 如: IN AL,n IN AX,n OUT n,AL OUT n,AX 對(duì)照:對(duì)照:MOV AL

22、, n MOV AX, n MOV n ,AL MOV n ,AX2.間接間接I/O端口尋址方式端口尋址方式 這種尋址方式是用寄存器這種尋址方式是用寄存器DX的內(nèi)容來(lái)指定端口地址。由于的內(nèi)容來(lái)指定端口地址。由于DX為為16位寄存器,所以這種尋址方式可對(duì)位寄存器,所以這種尋址方式可對(duì)065535個(gè)個(gè)8位端口位端口進(jìn)行尋址。所以在這種尋址方式中,能訪問(wèn)的端口號(hào)為進(jìn)行尋址。所以在這種尋址方式中,能訪問(wèn)的端口號(hào)為0000HFFFFH。格式如下:。格式如下:如:IN AL,DX IN AX,DX OUT DX,AL OUT DX,AX注意注意1 1: 小地址用直接小地址用直接I/OI/O尋址方式比較方便

23、。尋址方式比較方便。注意注意2 2: 只能用只能用ALAL、AXAX,不能用其它寄存器,不能用其它寄存器 對(duì)照:對(duì)照:MOV AL, DX MOV AX, DX MOV DX ,AL MOV DX ,AX【例】IN AL,60H ;從端口60H讀入一個(gè)字節(jié)到AL中 IN AX,20H ;把端口20H、21H組成的字讀入AX MOV DX,2F8H IN AL,DX ;從端口2F8H讀入一個(gè)字節(jié)到AL中 IN AX,DX ;把端口2F8H、2F9H組成的字讀入AX I/O端口尋址方式端口尋址方式小結(jié)小結(jié)返 3例如某例如某I/O端口地址:端口地址:1234H 輸入:輸入:MOV DX,1234H

24、IN AL,DX輸出:輸出:MOV DX,1234H OUT DX,AX如果如果I/O地址為小地址(一個(gè)字節(jié)能裝下為標(biāo)準(zhǔn)),則地址為小地址(一個(gè)字節(jié)能裝下為標(biāo)準(zhǔn)),則輸入:輸入: IN AL,*H輸出:輸出: OUT *H , AL 注意:寄存器很多,這里只能是注意:寄存器很多,這里只能是“AL,AX” “DX”3.3 80863.3 8086指令系統(tǒng)指令系統(tǒng)計(jì)算機(jī)的指令有一、二百條,分六大類(lèi),分別是:數(shù)據(jù)傳送指令、計(jì)算機(jī)的指令有一、二百條,分六大類(lèi),分別是:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指令、邏輯運(yùn)算和移位指令、字符串處理指令、控制轉(zhuǎn)移指令算術(shù)運(yùn)算指令、邏輯運(yùn)算和移位指令、字符串處理指令、控制轉(zhuǎn)移指

25、令和處理器控制指令。前面講的處理器控制指令。前面講的尋址方式尋址方式是各類(lèi)指令都要涉及到的操作。是各類(lèi)指令都要涉及到的操作。3.3.1 3.3.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令v 通用數(shù)據(jù)傳送:如:通用數(shù)據(jù)傳送:如:MOV DX,100 ; MOV BX,100 v 累加器專用傳送(輸入輸出):累加器專用傳送(輸入輸出): IN AL,20H; OUT 21H,AL v 地址傳送:地址傳送: LEA LDS LESv 標(biāo)志寄存器傳送:標(biāo)志寄存器傳送: LAHF SAHF PUSHF POPF1.1.通用傳送指令通用傳送指令 (1) 基本的數(shù)據(jù)傳送指令MOV 指令格式:MOV 目的操作數(shù),源操作數(shù)目

26、的操作數(shù),源操作數(shù) 執(zhí)行操作:(目的操作數(shù)) (源操作數(shù))段寄存器CS、DS、ES、SS通用寄存器8位或者16位存儲(chǔ)器立即數(shù)8位或者16位注意:注意: 目的操作數(shù)不能是立即尋址方式。如:如:MOV 100H,AX 是不正確的!是不正確的! 不允許給CS、IP和PSW三個(gè)寄存器傳送數(shù)據(jù),即這三個(gè)寄存器的值用戶無(wú) 權(quán)改變。如:指令MOV CS, AX等不正確,等不正確,但指令MOV AX,CS等是正等是正 確的確的 源操作數(shù)和目的操作數(shù)必須字長(zhǎng)相等。如:如:MOV BL,AX 是不正確的!是不正確的! MOV指令不影響標(biāo)志位。v 從寄存器到寄存器。從寄存器到寄存器。 格式:格式:MOV REG1,

27、REG2 【例例】 MOV AX,BX MOV AH,CL MOV BX,SI MOV DI,DX 指令MOV AL,BX是錯(cuò)誤的。v 從寄存器到段寄存器。從寄存器到段寄存器。 格式:格式:MOV SEGREG1,REG 【例】MOV DS,AX ;借助AX給段賦值 MOV ES,DX MOV SS,DI 例:假定例:假定DATA是用戶定義的一個(gè)數(shù)據(jù)段的段名,則是用戶定義的一個(gè)數(shù)據(jù)段的段名,則 MOV AX,DATA MOV DS,AX此兩條指令完成對(duì)此兩條指令完成對(duì)DS 段寄存器的賦值。段寄存器的賦值。注意:如寫(xiě)成注意:如寫(xiě)成MOV DS,DATA是錯(cuò)誤的是錯(cuò)誤的v 從寄存器到存儲(chǔ)器從寄存器

28、到存儲(chǔ)器 格式:格式:MOV MEM,REG ; REG是某個(gè)寄存器 說(shuō)明:說(shuō)明:MEM指以下五種存儲(chǔ)器尋址方式:直接、寄存器間接、寄存器相對(duì)、基址變址和相對(duì)基址變址。 【例】如果TABLE是定義的字變量,則以下指令都是合法的。 MOV TABLE,AX MOV BX,BX MOV TABLEBX,CX MOV BXSI,DX MOV TABLEBXSI,AX注意:上述目的操作數(shù)與源操作數(shù)能互換位置嗎?什么情況不能?注意:上述目的操作數(shù)與源操作數(shù)能互換位置嗎?什么情況不能?v 從立即數(shù)到寄存器。從立即數(shù)到寄存器。 格式:格式:MOV REG,DATA【例】MOV AX,00H MOV BX,1

29、2H MOV CX,34H MOV SI,56Hv 從立即數(shù)到存儲(chǔ)器。從立即數(shù)到存儲(chǔ)器。 格式:格式:MOV MEM,DATA 【例】如果ABC是符號(hào)常數(shù),TABLE是變量名,則以下指令都是合法的。 MOV TABLE,00H MOV TABLEDI,ABC ;ABC為立即數(shù) MOV BXSI,ABC+2 MOV TABLEBPSI,0FFH(2)進(jìn)棧指令PUSH和出棧指令POP v PUSH指令指令 指令格式:指令格式:PUSH 源操作數(shù)源操作數(shù)功能:將16位寄存器、段寄存器、16位存儲(chǔ)單元數(shù)據(jù)壓入堆棧。例:PUSH AXv POP指令指令 指令格式:指令格式:POP 目的操作數(shù)目的操作數(shù)功

30、能:將堆棧中的16位數(shù)據(jù)送入16位寄存器、段寄存器或16位 存儲(chǔ)單元中。 例:POP AXPUSHPUSH、POPPOP遵循后進(jìn)先出規(guī)則遵循后進(jìn)先出規(guī)則PUSH AXPUSH BXPUSH CX.POP CXPOP BXPOP AX可以利用PUSH、POP實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)移:PUSH AXPOP BX等效執(zhí)行一條:等效執(zhí)行一條:MOV BX, AX說(shuō)明:說(shuō)明: 在8086/8088中PUSH和POP指令的操作數(shù)不能使用立即尋址方式。POP指令的操作數(shù)還不能使用CS寄存器。如: PUSH 1234HPUSH 1234H和和POP CSPOP CS都是錯(cuò)誤的!都是錯(cuò)誤的! 堆棧中數(shù)據(jù)的壓入和彈出必須以字

31、為單位進(jìn)行,所以PUSH和POP指令只能作字操作。 兩條堆棧指令不影響標(biāo)志位?!纠縓CHG BX,BP+SI 指令執(zhí)行前:(BX)=1234H,(BP)=0100H,(SI)=0020H, (SS)=1F00H,(1F120H)=0000H 則源操作數(shù)物理地址 PA=1F00H10H+0100H+0020H =1F00H10H+0120H=1F120H 所以,指令執(zhí)行后: (BX)=0000H,(1F120H)=1234H(3)XCHG指令指令 交換數(shù)據(jù)指令交換數(shù)據(jù)指令 指令格式:XCHG 目的操作數(shù),源操作數(shù) 執(zhí)行操作:互換源和目的兩個(gè)操作數(shù)的存放位置。XCHG指令指令說(shuō)明:說(shuō)明: 源和目

32、的操作數(shù)的尋址方式不允許是立即尋址方式。 如:XCHG AX,9988H 為錯(cuò)誤指令!為錯(cuò)誤指令! 兩個(gè)尋址方式中,必須有一個(gè)是寄存器尋址,即兩個(gè)存儲(chǔ)單元之間不能直接互換數(shù)據(jù)。如:XCHG 1000H,2000H 為錯(cuò)誤指令!為錯(cuò)誤指令! 所有的段寄存器和IP寄存器不允許使用本條指令與其他寄存器互換數(shù)據(jù)。 此指令不影響標(biāo)志位。 .4.標(biāo)志傳送指令標(biāo)志傳送指令(3) 標(biāo)志寄存器推入堆棧指令:PUSHF 指令格式:PUSHF執(zhí)行操作:(SP)(SP)2 ;先修改指針 (SP)+1,(SP) PSW指令功能:將標(biāo)志寄存器內(nèi)容壓入堆棧。(4) 標(biāo)志寄存器推出堆棧指令:標(biāo)志寄存器推出堆棧指令: POPF

33、指令指令指令格式:POPF執(zhí)行操作:(PSW)(SP)+1,(SP) ;先彈出數(shù)據(jù) (SP)(SP)+2 ;后修改,指向棧頂指令功能:將16位堆棧數(shù)據(jù)彈入標(biāo)志寄存器中。 只定義了其中只定義了其中9位,另外位,另外7位未定義(不用)位未定義(不用)6位狀態(tài)位狀態(tài)標(biāo)志:標(biāo)志:OF、SF、ZF、 PF、CF、AF3位控制位控制標(biāo)志:標(biāo)志:DF、IF、TFOF DF IF TF SF ZF AF PF CFD15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0進(jìn)位標(biāo)志進(jìn)位標(biāo)志奇偶標(biāo)志奇偶標(biāo)志輔助進(jìn)位標(biāo)志輔助進(jìn)位標(biāo)志零標(biāo)志零標(biāo)志符號(hào)標(biāo)志符號(hào)標(biāo)志單步跟蹤

34、標(biāo)志單步跟蹤標(biāo)志中斷允許標(biāo)志中斷允許標(biāo)志方向標(biāo)志方向標(biāo)志益處標(biāo)志益處標(biāo)志補(bǔ)碼運(yùn)算用補(bǔ)碼運(yùn)算用標(biāo)志寄存器標(biāo)志寄存器PSWPSW反反62總結(jié):總結(jié): 數(shù)據(jù)傳輸類(lèi),數(shù)據(jù)傳輸類(lèi), MOV # ,¥,¥ XCHG # , ¥ ;交換;交換 IN AL , ¥ ;累加器專用累加器專用 OUT ¥,¥,AL ;累加器專用累加器專用 PUSH # POP # PUSHF POPF 關(guān)于符號(hào)地址:關(guān)于符號(hào)地址:例例3.7(p34)TABLE是在數(shù)據(jù)段定義的一個(gè)字節(jié)是在數(shù)據(jù)段定義的一個(gè)字節(jié)數(shù)組的首地址標(biāo)號(hào)(變量名,符號(hào)地址),其真數(shù)組的首地址標(biāo)號(hào)(變量名,符號(hào)地址),其真實(shí)偏移地址為實(shí)偏移地址為1000H, 則下

35、列條指令是等效的:則下列條指令是等效的:MOV AL, TABLEMOV AL, TABLEMOV AL, 1000H補(bǔ):地址傳送指令補(bǔ):地址傳送指令將地址傳送到某寄存器中將地址傳送到某寄存器中 有有3條指令:條指令:LEA LDS LES 重點(diǎn)講重點(diǎn)講LEALEA AX,DAT1執(zhí)行操作:(執(zhí)行操作:(16位寄存器)位寄存器)源操作數(shù)的偏移地址源操作數(shù)的偏移地址等效于:等效于:MOV AX,OFFSET DAT1例如:例如:LEA BX,TABLE假定:假定:DS=2000H,TABLE=20020H 則執(zhí)行后:(則執(zhí)行后:(BX)=0020H3.3.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 1.加法指

36、令加法指令 加法指令包括3條指令:ADD加法、ADC帶進(jìn)位加法和INC加1。(1)ADD加法指令加法指令指令格式: ADD 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)【例】MOV AL,3FH; ADD AL,47H;OF DF IF TF SF ZF AF PF CF進(jìn)位標(biāo)志進(jìn)位標(biāo)志奇偶標(biāo)志奇偶標(biāo)志1為偶則為偶則1輔助進(jìn)位標(biāo)志輔助進(jìn)位標(biāo)志零標(biāo)志零標(biāo)志符號(hào)標(biāo)志符號(hào)標(biāo)志單步跟蹤標(biāo)志單步跟蹤標(biāo)志中斷允許標(biāo)志中斷允許標(biāo)志方向標(biāo)志方向標(biāo)志益處標(biāo)志益處標(biāo)志補(bǔ)碼運(yùn)算用補(bǔ)碼運(yùn)算用操作結(jié)果:操作結(jié)果:AL=86H,CF=0,AF=1, PF=0, ZF=0,SF=1,OF=1272(2) ADC帶進(jìn)位加法指令帶

37、進(jìn)位加法指令指令格式:ADC 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù)執(zhí)行操作:(目的操作數(shù))源操作數(shù)+目的操作數(shù)+CF(3)INC增量指令增量指令指令格式:INC 操作數(shù)執(zhí)行操作:(操作數(shù)) (操作數(shù))+1例:例:INC CX注意:注意: 以上三條指令都可作字或字節(jié)運(yùn)算,并且除以上三條指令都可作字或字節(jié)運(yùn)算,并且除INC指令不影響指令不影響CF標(biāo)標(biāo)志位外,其他指令的操作結(jié)果都影響下列標(biāo)志位:志位外,其他指令的操作結(jié)果都影響下列標(biāo)志位: CF、AF、OF、PF、SF、ZF 對(duì)加法指令來(lái)講,如果操作數(shù)是無(wú)符號(hào)數(shù),則最高有效位有向更對(duì)加法指令來(lái)講,如果操作數(shù)是無(wú)符號(hào)數(shù),則最高有效位有向更高位的進(jìn)位

38、說(shuō)明運(yùn)算結(jié)果超出了機(jī)器位數(shù)所能表示的最大數(shù)。因高位的進(jìn)位說(shuō)明運(yùn)算結(jié)果超出了機(jī)器位數(shù)所能表示的最大數(shù)。因此,此,CF標(biāo)志位實(shí)質(zhì)上是表示無(wú)符號(hào)數(shù)有溢出,而標(biāo)志位實(shí)質(zhì)上是表示無(wú)符號(hào)數(shù)有溢出,而OF標(biāo)志位表示有標(biāo)志位表示有符號(hào)數(shù)有溢出。符號(hào)數(shù)有溢出。 2. 2. 減法指令減法指令 (1) SUB減法指令減法指令 指令格式:SUB 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) 執(zhí)行操作:(目的操作數(shù))目的操作數(shù)-源操作數(shù), 即目的操作數(shù)減去源操作數(shù),結(jié)果存于目的地 址,源地址的內(nèi)容不變?!纠繙p法運(yùn)算: MOV AX ,5678H ;(AX)=5678H SUB AX ,1234H;(AX)=4444H M

39、OV BX ,3354H ;(BX)=3354H SUB BX ,3340H;(BX)=0014H(2) DEC減減1指令指令 指令格式:DEC操作數(shù)操作數(shù) 執(zhí)行操作:(操作數(shù))操作數(shù)-1, 即將目的操作數(shù)減1,結(jié)果送目的地址。例:DEC AX INC AX ;AX結(jié)果不變(3) CMP比較指令比較指令 指令格式:CMP 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) 執(zhí)行操作:目的操作數(shù)-源操作數(shù),即目的操作數(shù)減源操作數(shù), 結(jié)果只影響標(biāo)志位,不送入目的地址。 指令功能:比較數(shù)的大小,查找數(shù)據(jù)類(lèi)型,產(chǎn)生轉(zhuǎn)移條件等。注意:此指令對(duì)一個(gè)目的操作數(shù)目的操作數(shù)與多個(gè)源操作數(shù)源操作數(shù)作比較很有利。乘法指令,除

40、法指令等不講,自學(xué)。乘法指令,除法指令等不講,自學(xué)。6. 6. 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令 BCD有兩種存儲(chǔ)格式:壓縮和非壓縮。壓縮BCD碼指每個(gè)字節(jié)存儲(chǔ)兩個(gè)BCD碼;非壓縮BCD碼指每個(gè)字節(jié)存儲(chǔ)一個(gè)BCD碼,其中低4位存儲(chǔ)數(shù)字的BCD碼,高4位為0。 壓縮的壓縮的BCD碼調(diào)整指令碼調(diào)整指令 指令格式:DAA 此指令使用條件:此指令使用條件:只能對(duì)AL中的數(shù)進(jìn)行調(diào)整?!纠烤帉?xiě)程序段,完成1234+3099的BCD碼操作。程序段如下: MOV DX,1234H ;1234為BCD碼 MOV BX,3099H ;3099為BCD碼 MOV AL,BL ADD AL,DL DAA MOV CL,

41、AL MOV AL,BH ADC AL,DH DAA 3.3.3 3.3.3 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令 1.1.邏輯運(yùn)算指令邏輯運(yùn)算指令(1) AND 邏輯與指令邏輯與指令 指令格式:AND 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) 執(zhí)行操作:(目的地址) 目的操作數(shù)源操作數(shù) 功能:可屏蔽某些位(將這些位置0) 說(shuō)明:說(shuō)明: 符號(hào)“”表示邏輯“與”操作。 各位相與: 11=1, 10=0, 01=0, 00=0 【例】要屏蔽AL中的高4位。低4位不能改變. AND AL,00001111B【例】已知(BH)=67H,要求把其的第0、1和5位置為0。 解:可以構(gòu)造一個(gè)立即數(shù),其第0、

42、1和5位的值為0,其它位的值為 1,該立即數(shù)即為:0DCH或11011100B,然后用指令 AND BH, 0DCH 來(lái)實(shí)現(xiàn)此功能。 (2) OR邏輯或指令邏輯或指令 指令格式:OR 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) 執(zhí)行操作:(目的地址) 目的操作數(shù)源操作數(shù)【例】AL的高4位不變,低4位全置1 OR AL,00001111B(3) XOR 邏輯異或指令邏輯異或指令 指令格式:XOR目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) 執(zhí)行操作:(尋址到的目的地址) 目的操作數(shù)源操作數(shù) 功能:使操作數(shù)的某些位取反或測(cè)試兩數(shù)是否相等.【例】XOR AL,AL ; 指令執(zhí)行后指令執(zhí)行后( AL)=?

43、指令執(zhí)行后,使(AL)= 0,CF=0,OF=0, ZF=1 。清零作用【例】測(cè)試(AL)是否等于33H。XOR AL,33H JZ MATCH 這種方法常用于檢測(cè)數(shù)值是否匹配。【例】若想使AL中的最高位和最低位取反,其他位保持不變,則 XOR AL,10000001B(4) TEST測(cè)試指令測(cè)試指令 指令格式:TEST目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) 執(zhí)行操作:目的操作數(shù)源操作數(shù),不保存結(jié)果但影響標(biāo)志 功能:檢測(cè)某種條件是否滿足說(shuō)明:說(shuō)明: 與AND指令基本相同,但兩個(gè)操作數(shù)相與的結(jié)果不保存,只根據(jù)其 特征置條件碼。 本條指令通常用于在不改變?cè)胁僮鲾?shù)的情況下,檢測(cè)某一位或某 幾位的

44、條件是否滿足,并用于條件轉(zhuǎn)移指令的先行指令。不檢測(cè)的 那些位與0相“與”,即將不檢測(cè)的位屏蔽掉;檢測(cè)的那些位與1相 “與”,保持不變。 【例1】檢測(cè)(AL)的最高位是否為1,若為1則轉(zhuǎn)移,否則順序執(zhí)行。 請(qǐng)編寫(xiě)程序.TEST AL,10000000B JNZ AA AA: 【例2】檢測(cè)(AL)的最低3位是否為1,都為0則轉(zhuǎn)移,否則順序執(zhí)行。 請(qǐng)編寫(xiě)程序.TEST AL,00000111B JZ AA AA:(5) NOT 邏輯非指令邏輯非指令 指令格式:NOT目的操作數(shù)目的操作數(shù) 執(zhí)行操作:(目的地址)(操作數(shù))變反 功能:將操作數(shù)按位取反說(shuō)明:說(shuō)明: 尋址方式不允許為立即尋數(shù)和段寄存器。 本

45、條指令不影響標(biāo)志位?!纠縉OT AL若執(zhí)行前:(AL)=00111100B,則執(zhí)行后:(AL)=11000011B。 指令指令 OF CF SF PF ZF AF AND =0 =0 0 或 1 0 或 1 0 或 1 無(wú)定義 OR =0 =0 0 或 1 0 或 1 0 或 1 無(wú)定義 XOR =0 =0 0 或 1 0 或 1 0 或 1 無(wú)定義 TEST =0 =0 0 或 1 0 或 1 0 或 1 無(wú)定義 NOT 不影響 不影響 不影響 不影響 不影響 不影響 邏輯運(yùn)算指令對(duì)標(biāo)志位的影響邏輯運(yùn)算指令對(duì)標(biāo)志位的影響 2. 2. 移位指令移位指令 此部分自學(xué)此部分自學(xué) CF0RSBLS

46、B(a) 邏輯左移指令操作示意圖(b) 邏輯右移指令操作示意圖CF0RSBLSBCF0RSBLSB(c) 算術(shù)左移指令操作示意圖(d) 算術(shù)右移指令操作示意圖CFRSBLSBCF0RSBLSB(e) 小循環(huán)左移指令操作示意圖(f) 小循環(huán)右移指令操作示意圖CFRSBLSBCF0RSBLSB(g) 大循環(huán)左移指令操作示意圖(h) 大循環(huán)右移指令操作示意圖CFRSBLSB3.3.4 3.3.4 串操作指令串操作指令(SI)低地址高地址數(shù)據(jù)段附加段(DI)0100H(DI)ABCD0050H(SI) 基本串傳送指令示意圖基本串傳送指令示意圖3.3.4 3.3.4 串操作指令串操作指令串操作指令共串操

47、作指令共5條條:MOVSLODSSTOSCMPSSCAS5條分兩大類(lèi):條分兩大類(lèi): 串傳送類(lèi)(串傳送類(lèi)(3條)條)MOVS 存儲(chǔ)器內(nèi)數(shù)據(jù)塊搬遷 LODS 數(shù)據(jù)依次放入AL/AXSTOS (AL)/(AX)依次放入 數(shù)據(jù)塊中 串比較類(lèi)(串比較類(lèi)(2條)條)CMPS 兩數(shù)據(jù)塊依次敘比較 SCAS 在數(shù)據(jù)塊中搜索與(AL)/(AX) 相等的串傳送類(lèi)串傳送類(lèi)3個(gè):個(gè):指令格式:指令格式:REP MOVS / LODS / STOS說(shuō)明:說(shuō)明:REP 重復(fù)前綴。重復(fù)前綴。 如不加如不加REP ,只能傳送一次(字節(jié)或字),只能傳送一次(字節(jié)或字)1、MOVS 具體格式有兩個(gè):具體格式有兩個(gè): MOVSB

48、一次傳送一個(gè)字節(jié)一次傳送一個(gè)字節(jié) (數(shù)據(jù)段數(shù)據(jù)段向向附加段附加段傳一個(gè)字節(jié))傳一個(gè)字節(jié)) MOVSW 一次傳送一個(gè)字一次傳送一個(gè)字 (數(shù)據(jù)段數(shù)據(jù)段向向附加附加段段傳一個(gè)節(jié))傳一個(gè)節(jié)) 執(zhí)行操作:執(zhí)行操作: (1)()(ES):():(DI) (DS):():(SI) (2) 傳送字節(jié):(傳送字節(jié):(SI)(SI)+/- 1 (DI)(DI)+/- 1 傳送字:傳送字: (SI)(SI)+/- 2 (DI)(DI)+/- 2 方向標(biāo)志方向標(biāo)志DF=0時(shí)用時(shí)用 + 方向標(biāo)志方向標(biāo)志DF=1時(shí)用時(shí)用 - 指令指令CLD 使使DF=0 ; 指令指令STD 使使DF=1 重復(fù)傳送時(shí),要加前綴重復(fù)傳送時(shí),

49、要加前綴 REP 重復(fù)次數(shù)重復(fù)次數(shù) (CX);); 每重復(fù)一次(每重復(fù)一次(CX)(CX)- 1 注意:本條指令不影響標(biāo)志位注意:本條指令不影響標(biāo)志位 地址增大地址增大例:串操作指令例:串操作指令MOVSB的應(yīng)用的應(yīng)用 執(zhí)行前必須做好以下執(zhí)行前必須做好以下初始化工作初始化工作: 把存放于數(shù)據(jù)段中的源數(shù)據(jù)串的首地址(如反向傳送則應(yīng)是末地址)把存放于數(shù)據(jù)段中的源數(shù)據(jù)串的首地址(如反向傳送則應(yīng)是末地址)存入(存入(SI)。)。 把將要存放于附加段中的目的數(shù)據(jù)串的首地址(如反向傳送則應(yīng)是把將要存放于附加段中的目的數(shù)據(jù)串的首地址(如反向傳送則應(yīng)是末地址)存入(末地址)存入(DI)。)。 把數(shù)據(jù)串長(zhǎng)度存入

50、(把數(shù)據(jù)串長(zhǎng)度存入(CX)。)。 設(shè)置方向標(biāo)志位設(shè)置方向標(biāo)志位DF的值。(的值。(CLD指令使指令使DF=0,STD指令使指令使DF=1。加重復(fù)操作前綴加重復(fù)操作前綴 REP【例】 MOV SI,0050H MOV DI,0100H MOV CX,4 CLD REP MOVSB 作業(yè):反方向?qū)崿F(xiàn)串轉(zhuǎn)移,請(qǐng)編寫(xiě)程序作業(yè):反方向?qū)崿F(xiàn)串轉(zhuǎn)移,請(qǐng)編寫(xiě)程序【例】 MOV SI,0050H MOV DI,0100H MOV CX,4 CLD REP MOVSB 討論:討論:如果用符號(hào)地址,如下圖,如何編程?如果用符號(hào)地址,如下圖,如何編程?LEA SI ,TABLE1LEA DI ,TABLE2MOV C

51、X,4CLD REP MOVSBMOV SI ,OFFSET TABLE1MOV DI ,OFFSET TABLE2(2) 從串中取出一個(gè)字節(jié)(或字)從串中取出一個(gè)字節(jié)(或字): LODS指令指令 功能:將功能:將SI所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)取出來(lái)送所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)取出來(lái)送 入入AL(或(或AX)中。)中。 格式格式1:LODSB 格式格式2:LODSW 格式格式3:LODS 源操作數(shù)(存儲(chǔ)器尋址方式)源操作數(shù)(存儲(chǔ)器尋址方式) 執(zhí)行的操作:執(zhí)行的操作: 第一步:第一步: 若字節(jié):若字節(jié): AL (DS):():(SI)。)。 若字:若字:

52、AX (DS):():(SI)。)。 第二步:第二步: 若字節(jié):(若字節(jié):(SI)(SI)1(DF=0用用“+”,否則用,否則用“” 若字:若字: (SI) (SI)2(DF=0用用“+”,否則用,否則用“”說(shuō)明:說(shuō)明: 本條指令不影響標(biāo)志位。本條指令不影響標(biāo)志位。 本條指令是隱含尋址。將數(shù)據(jù)段中(本條指令是隱含尋址。將數(shù)據(jù)段中(SI)指向的一個(gè)字或字節(jié)送入)指向的一個(gè)字或字節(jié)送入AL或或AX,格式格式3中的源操作數(shù)只供匯編程序作類(lèi)型檢查。中的源操作數(shù)只供匯編程序作類(lèi)型檢查。 本條指令一般不與本條指令一般不與REP聯(lián)用。聯(lián)用。 (3)將一個(gè)字節(jié)(或字)存入串中將一個(gè)字節(jié)(或字)存入串中: ST

53、OS指令指令 功能:將功能:將AL或或AX中的數(shù)據(jù)送入中的數(shù)據(jù)送入ES:DI所指的目的串中的字節(jié)(或字)存所指的目的串中的字節(jié)(或字)存 儲(chǔ)單元中。注意:隱含段為附加段儲(chǔ)單元中。注意:隱含段為附加段ES 格式格式1:STOSB 格式格式2:STOSW 格式格式3:STOS 目的操作數(shù)目的操作數(shù) 執(zhí)行的操作:執(zhí)行的操作: 若字節(jié):(若字節(jié):(ES):():(DI)(AL)。)。 若字:(若字:(ES):(:(DI)(AX)。)。 若字節(jié):(若字節(jié):(DI)(DI)1(DF=0用用“+”,否則用,否則用“”)。)。 若字:(若字:(DI)(DI)2(DF=0用用“+”,否則用,否則用“”)。)。說(shuō)

54、明:說(shuō)明: 本條指令不影響標(biāo)志位。本條指令不影響標(biāo)志位。 與上兩條指令相同,匯編格式與上兩條指令相同,匯編格式3中的目的操作數(shù)只供匯編程序作類(lèi)型檢查中的目的操作數(shù)只供匯編程序作類(lèi)型檢查。置字符串?dāng)?shù)據(jù)指令示意圖置字符串?dāng)?shù)據(jù)指令示意圖(SI)低地址低地址高地址高地址附加段ES附加段ES(DI)0050H(DI)A$B$C$D$0050H(DI) 程序: MOV DI,0050H MOV AL, $ MOV CX,4 CLD REP STOSB 任務(wù):將原串中數(shù)據(jù)任務(wù):將原串中數(shù)據(jù)全部換成全部換成“$”2.2.串比較指令串比較指令v REPE / REPZ或或REPNE / REPNZ,前綴,可按一

55、定條件重復(fù)比較。,前綴,可按一定條件重復(fù)比較。(1)REPE / REPZ的含義:當(dāng)相等的含義:當(dāng)相等 / 為零時(shí)重復(fù)比較。為零時(shí)重復(fù)比較。 指令格式:指令格式:REPE/REPZ CMPS / SCAS 執(zhí)行的操作:執(zhí)行的操作: 當(dāng)(當(dāng)(CX)=0即數(shù)據(jù)串比較完成,或即數(shù)據(jù)串比較完成,或ZF=0即某次比較結(jié)果不相等即某次比較結(jié)果不相等 時(shí)退出,否則(即(時(shí)退出,否則(即(CX)0且且ZF=1)往下執(zhí)行。)往下執(zhí)行。 (CX)(CX)1。 執(zhí)行其后的串比較指令。執(zhí)行其后的串比較指令。 執(zhí)行。執(zhí)行。 結(jié)論:只要相等就結(jié)論:只要相等就 依次重復(fù)比較直到(依次重復(fù)比較直到(CX)=0v REPNE/

56、REPNZ的含義:當(dāng)不相等的含義:當(dāng)不相等 / 不為零時(shí)重復(fù)比較。不為零時(shí)重復(fù)比較。 指令格式:指令格式:REPNE / REPNZ CMPS / SCAS 執(zhí)行操作:除退出條件為(執(zhí)行操作:除退出條件為(CX)=0或或ZF=1外,其他操作與外,其他操作與 REPE/REPZ相同。也就是說(shuō),只要兩數(shù)不相等就可繼續(xù)比較,如相同。也就是說(shuō),只要兩數(shù)不相等就可繼續(xù)比較,如果遇到兩數(shù)相等可提前結(jié)束比較操作。果遇到兩數(shù)相等可提前結(jié)束比較操作。 結(jié)論:只要不相等就結(jié)論:只要不相等就 依次重復(fù)比較直到(依次重復(fù)比較直到(CX)=0(1) 兩個(gè)串比較:兩個(gè)串比較:CMPS 指令指令 功能:將功能:將SI所指的

57、源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)與所指的源串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)與DI所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,并根所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。 格式格式1:CMPSB 格式格式2:CMPSW 格式格式3:CMPS 源操作(數(shù)存儲(chǔ)器尋址方式),目的操作數(shù)(存儲(chǔ)源操作(數(shù)存儲(chǔ)器尋址方式),目的操作數(shù)(存儲(chǔ) 器尋址方式)。器尋址方式)。(SI)低地址高地址數(shù)據(jù)段DS附加段ES(DI)0200H(DI)AABBCDDD1500H(SI) 說(shuō)明:說(shuō)明: 該指令執(zhí)

58、行后,根據(jù)兩操作數(shù)相減結(jié)果置標(biāo)志位,但不保存結(jié)果。該指令執(zhí)行后,根據(jù)兩操作數(shù)相減結(jié)果置標(biāo)志位,但不保存結(jié)果。 該指令與該指令與REPE / REPNE聯(lián)合可實(shí)現(xiàn)兩個(gè)數(shù)據(jù)串的比較。聯(lián)合可實(shí)現(xiàn)兩個(gè)數(shù)據(jù)串的比較?!纠勘容^兩個(gè)字符串,找出它們不相匹的位置。比較兩個(gè)字符串,找出它們不相匹的位置。 MOV SI,1500H MOV DI,0200H MOV CX,17 CLD REPE CMPSB(SI)低地址高地址數(shù)據(jù)段DS附加段ES(DI)0200H(DI)AABBCDDD1500H(SI) (2) 串搜索串搜索SCAS 指令指令 功能:功能:AL(字節(jié))或(字節(jié))或AX(字)中的內(nèi)容與(字)中的

59、內(nèi)容與DI所指的目的串中的一個(gè)字節(jié)所指的目的串中的一個(gè)字節(jié)(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存。(或字)存儲(chǔ)單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存。 格式格式1:SCASB 格式格式2:SCASW 格式格式3:SCAS 目的操作數(shù)目的操作數(shù) 執(zhí)行的操作:執(zhí)行的操作: 若字節(jié):(若字節(jié):(AL)(ES):():(DI);();(DI)(DI)1 (DF=0用用“+”,否則用,否則用“”)。)。 若字:(若字:(AX) (ES):():(DI);();(DI)(DI)2 (DF=0用用“+”,否則用,否則用“”)。)。說(shuō)明:說(shuō)明: 本條指令根據(jù)相減結(jié)果置標(biāo)

60、志位。本條指令根據(jù)相減結(jié)果置標(biāo)志位。 本條指令與本條指令與REPE / REPNE聯(lián)合可實(shí)現(xiàn)從一個(gè)字符串中查找一個(gè)指定的聯(lián)合可實(shí)現(xiàn)從一個(gè)字符串中查找一個(gè)指定的 字符。字符。 【例例】從一個(gè)字符串中找出一個(gè)指定字符。從一個(gè)字符串中找出一個(gè)指定字符。 MOV DI,0100H MOV AL,S MOV CX,10H CLD REPNZ SCASB AL3000H:0100HSPERST(ES)3000H串操作指串操作指 令共令共5條條:像C語(yǔ)言for() MOVS :串傳送指令LODS :串取出指令STOS :存入串指令CMPS :串比較指令SCAS :串搜索指令 串傳送類(lèi)(串傳送類(lèi)(3條)條)M

溫馨提示

  • 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)論