微處理器的指令系統(tǒng)_第1頁(yè)
微處理器的指令系統(tǒng)_第2頁(yè)
微處理器的指令系統(tǒng)_第3頁(yè)
微處理器的指令系統(tǒng)_第4頁(yè)
微處理器的指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、微處理器的指令系統(tǒng)教學(xué)提示:指令是微處理器完成某種規(guī)定操作的命令。微處理器所能識(shí)別的全部指令稱為指令系統(tǒng)。指令系統(tǒng)是和微處理器的硬件結(jié)構(gòu)密切相關(guān)的,不同系列的微處理器具有不同的指令系統(tǒng)。計(jì)算機(jī)能直接識(shí)別和執(zhí)行的是由0和1組成的二進(jìn)制代碼,稱之為機(jī)器指令,而機(jī)器指令既不容易記憶,又不方便在編程中使用,所以,人們普遍采用匯編語(yǔ)言指令來編程序。匯編語(yǔ)言是一種符號(hào)語(yǔ)言,它用助記符來表示操作碼,用符號(hào)或符號(hào)地址來表示操作數(shù)或操作數(shù)地址,它與機(jī)器指令是一一對(duì)應(yīng)的。教學(xué)要求:本章介紹的7種尋址方式和常用指令系統(tǒng)是8088/8086匯編語(yǔ)言編程的重點(diǎn)內(nèi)容,它們對(duì)編程起著至關(guān)重要的作用。2.1 8088/808

2、6的尋址方式指令執(zhí)行時(shí)尋找操作數(shù)地址的過程稱為尋址;尋找操作數(shù)存放地址的各種方式稱為尋址方式。2.1.1 操作數(shù)類型8088/8086系統(tǒng)中的操作數(shù),從書寫形式可以分為3種類型:立即數(shù)操作數(shù)、寄存器操作數(shù)和存儲(chǔ)器操作數(shù)。1. 立即數(shù)操作數(shù)立即數(shù)是作為指令代碼的一部分出現(xiàn)在指令中。它通常作為源操作數(shù)使用。其書寫形式可以為二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制數(shù),也可以是一個(gè)可求出確定值的表達(dá)式。2. 寄存器操作數(shù)寄存器操作數(shù)是把操作數(shù)存放在寄存器中,用來參加運(yùn)算或存放結(jié)果。在雙操作數(shù)指令中,它可以作為源操作數(shù)和目的操作數(shù)。其書寫形式就是寄存器的名稱。3. 存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù)將存儲(chǔ)器某地址的內(nèi)容作

3、為指令的操作數(shù),即把操作數(shù)放在存儲(chǔ)器中。8088/8086系統(tǒng)中的操作數(shù),從其使用的角度可以分為:目的操作數(shù)(OPD)和源操作數(shù)(OPS)。目的操作數(shù)為指令提供操作數(shù)據(jù)及操作結(jié)果的存放位置,它的值是隨執(zhí)行結(jié)果而變化的;源操作數(shù)只為指令提供操作數(shù)據(jù),其值在指令執(zhí)行過程中是不變的。例如ADD AX,BX其中,AX是目的操作數(shù),BX是源操作數(shù),執(zhí)行前,AX存放被加數(shù),BX存放加數(shù),執(zhí)行后,AX和BX相加的結(jié)果存放在AX中。存儲(chǔ)器操作數(shù)存放的地址本來應(yīng)該是物理地址,但為了書寫方便,一般采用偏移地址EA(或稱有效地址)來代替物理地址,段地址以隱含方式給出,其書寫形式是,假如偏移地址是X,該地址中的內(nèi)容為

4、Y,則表示為(X)=Y,即用括號(hào)將偏移地址括起來表示該地址的內(nèi)容。2.1.2 尋址方式1. 寄存器尋址寄存器尋址方式中,指令所需要所操作數(shù)存放在指令指明的寄存器中。對(duì)16位操作數(shù),寄存器可以是AX、BX、CX、DX、SI、DI、SP、CS、DS、ES、SS和BP;對(duì)8位操作數(shù),寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。這種尋址方式速度較快。對(duì)于那些需要經(jīng)常存取的操作數(shù),采用寄存器尋址方式較為合適。若用R代表寄存器名,則該尋址方式如圖2.1所示。說明:寄存器R的內(nèi)容是操作數(shù)?!纠?.1】 INC AX。如圖2.2所示,執(zhí)行前:AX=45H,其中,INC為加1指令的操作符,其操作

5、數(shù)地址為寄存器AX,即操作數(shù)在AX之中,即執(zhí)行后:AX=46H 指 令 R 操 作 數(shù) 圖2.1 寄存器尋址圖2.2 INC AX A X 指 令 1234H 5620H B X 圖2.3 MOV AX,BX【例2.2】 MOV AX,BX。 ,執(zhí)行前:AX=1234H,BX=5620H這是一條雙操作數(shù)指令,其中MOV為傳送指令,AX為目的操作數(shù)地址,BX為源操作數(shù)地址,即執(zhí)行后:AX=5620H,BX未變。2. 寄存器間接尋址寄存器間接尋址方式中,操作數(shù)的偏移地址EA在指令指明的寄存器中,即寄存器的內(nèi)容為操作數(shù)的偏移地址EA,而操作數(shù)存放在存儲(chǔ)器中。能夠用來間接尋址的寄存器只能是寄存器SI、

6、DI、BP、BX其中之一。若指令中指定的寄存器是BX、DI或SI,則操作數(shù)在當(dāng)前數(shù)據(jù)段中,所以操作數(shù)的物理地址PA的形成是由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位,加上BX、DI或SI中的偏移地址EA。若指令中指定的寄存器是BP,則操作數(shù)在當(dāng)前堆棧段中,所以操作數(shù)的物理地址PA的形成是堆棧段寄存器SS的內(nèi)容左移4位,加上BP中的偏移地址EA形成操作數(shù)的物理地址PA,如圖2.4所示。即:如圖2.3所示圖2.4 寄存器間接尋址說明:R的內(nèi)容為操作數(shù)的偏移地址EA?!纠?.3】 MOV AX,BX。執(zhí)行前:AX=6,BX=100H,DS=1000H,(10100H)=60FEH這是一條雙操作數(shù)指令。AX是目

7、的操作數(shù)地址,其尋址方式為寄存器尋址方式;BX指明了源操作采用寄存器間接尋址方式,BX的內(nèi)容為源操作數(shù)的偏移地址EA,源操作數(shù)的物理地址為PA。源操作數(shù)的尋址過程如圖2.5所示。 圖2.5 MOV AX,BX執(zhí)行后:AX=60FEH,BX、DS、(10100H)的內(nèi)容未變?!纠?.4】 MOV AX,BP。執(zhí)行前:AX=0,BP=50H,SS=2000H,20050H=1A34H目的操作數(shù)地址是AX,源操作數(shù)BP使用寄存器間接尋址,所以,堆棧段寄存器SS的內(nèi)容左移4位與BP相加,形成源操作數(shù)的物理地址PA。源操作數(shù)的尋址過程如圖2.6所示。執(zhí)行后:AX=1A34H,BP、SS、(20050H)

8、未變。寄存器的間接尋址方式可以用于表格處理,執(zhí)行完一條指令后,只需修改寄存器內(nèi)容就可取出表格中的下一項(xiàng),所以,通常將它們稱作地址指示器,用于存取存儲(chǔ)器數(shù)據(jù)。 20050H 指 令 BP 50H SS 2000H 1A34H AX 左 移4位 + 圖2.6 MOV AX,BP3. 寄存器相對(duì)尋址寄存器相對(duì)尋址又叫直接變址尋址,該方式中操作數(shù)的偏移地址EA是一個(gè)基址或變址寄存器的內(nèi)容和指令中給出的8位或16位位移量之和,即: 圖2.7 寄存器相對(duì)尋址說明:X表示位移量,R表示寄存器名,R的內(nèi)容與X之和為操作數(shù)的偏移地址EA。寄存器只能選擇SI、DI、BP、BX其中之一。所以,在寄存器相對(duì)尋址方式中

9、,操作數(shù)的偏移地址EA按如下公式計(jì)算:SI+X,用SI作變址寄存器時(shí)DI+X,用DI作變址寄存器時(shí)BX+X,用BX作變址寄存器時(shí)BP+X,用BP作變址寄存器時(shí)當(dāng)變址寄存器選用BX、SI或SI時(shí)段寄存器用DX;當(dāng)寄存器BP被選作變址寄存器時(shí),段寄存器用堆棧寄存器SS?!纠?.5】 MOV AX,NAMEBX。執(zhí)行前:AX=0,BX=1000H,DS=2000H,(21100H)=1234H,NAME=100H。NAME為16位位移量的符號(hào)地址,源操作數(shù)采用寄存器相對(duì)尋址方式,故X的值為100H,變址寄存器為BX,所以,源操作數(shù)的EA=BX+NAME=1100H,數(shù)據(jù)段寄存器DS的內(nèi)容左移4位為2

10、0000H,與EA相加,形成源操作數(shù)的物理地址PA=21100H。目的操作數(shù)采用寄存器尋址方式,其操作數(shù)地址為AX。源操作數(shù)的尋址方式過程如圖2.8所示。圖2.8 源操作數(shù)的尋址方式過程執(zhí)行后:AX=1234H,BX、DS、(20010H)未變?!纠?.6】 ADD 5BP,BX。執(zhí)行前:BX=40H,BP=30H,SS=2000H,(20035H)=50H。其中,目的操作數(shù)采用寄存器相對(duì)尋址方式,其偏移地址EA=BP+5。由于BP用作變址寄存器,所以,堆棧段寄存器SS的內(nèi)容左移4位與EA相加,形成目的操作數(shù)的物理地址PA。源操作數(shù)采用寄存器尋址方式,其操作數(shù)地址為BX。執(zhí)行后:(20035H

11、)=90H,BX、BP、SS未變。4. 基址變址尋址基址變址尋址中,操作數(shù)在存儲(chǔ)器中,操作數(shù)的偏移地址EA是一個(gè)寄存器和一個(gè)變址寄存器之和,兩個(gè)寄存器均由指令指定?;芳拇嫫髦荒苁褂肂X和BP,若選用BP作為基址寄存器,操作數(shù)的物理地址PA是由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址EA相加形成;若選用BX作為基址寄存器,操作數(shù)的物理地址PA是由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移地址EA相加形成,如圖2.9所示。圖2.9 基址變址尋址說明:BR表示基址寄存器,只能選用BX、BP之一;IR表示變址寄存器,只能選用SI、DI之一。BR的內(nèi)容加上IR的內(nèi)容是操作數(shù)的偏移地址EA,所以,在基址變址尋

12、址方式中,操作數(shù)的偏移地址EA按如下公式計(jì)算:【例2.7】 MOV AX,BXDI。執(zhí)行前:BX=2000H,DI=0002H,DS=3000H,(32002H)=1AFEH目的操作數(shù)地址是AX。源操作數(shù)采用基址變址尋址,基址寄存器選用了BX,變址寄存器選用了DI。由于源操作數(shù)選用BX作基址寄存器,所以其物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移地址EA相加形成,即源操作數(shù)的PA=(DS)左移4位+BX+DI=32002H,(32002H)=1AFEH,所以執(zhí)行后:AX=1AFEH,BX、DI、DS、(32002H)未變?!纠?.8】 MOV BX+SI,CX。執(zhí)行前:DS=1000H

13、,BX=300H,SI=50H,CX=1234H,(10350H)=0FFFFH目的操作數(shù)采用基址變址尋址方式,基址寄存器選用了BP,段寄存器就是DS,變址寄存器選用了SI。所以,其物理地址PA由堆棧段寄存器DS的內(nèi)容左移4位與偏移地址EA相加形成,即目的操作數(shù)的PA=(DS)左移4位+BX+SI =10350H,所以執(zhí)行后:(10350H)=1234H,BX、SI、CX的內(nèi)容不變。5. 相對(duì)基址加變址尋址在相對(duì)基址加變址尋址方式中,操作數(shù)的偏移地址EA是指令中指定的基址寄存器內(nèi)容、變址寄存器內(nèi)容及8位或16位位移量X三項(xiàng)相加之和,如圖2.10所示。BX+SI,用BX作基址寄存器,SI作變址寄

14、存器時(shí)BX+DI,用BX作基址寄存器,DI作變址寄存器時(shí)BP+SI,用BP作基址寄存器,SI作變址寄存器時(shí)BP+DI,用BP作基址寄存器,DI作變址寄存器時(shí) EA=圖2.10 相對(duì)基址加變址尋址說明:X表示位移量,其值是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù);BR表示基址寄存器,只能選用BX、BP之一;IR表示變址寄存器,只能選用SI、DI之一。BR的內(nèi)容加上IR的內(nèi)容,再加上X,所得之和是操作數(shù)的偏移地址EA。所以,在基址加變址尋址方式中,操作數(shù)的偏移地址EA按如下公式計(jì)算:BX+SI+X,用BX作基址寄存器,SI作變址寄存器時(shí) BX+DI+X,用BX作基址寄存器,DI作變址寄存 BP+SI

15、+X,用BP作基址寄存器,SI作變址寄存器時(shí)BP+DI+X,用BP作基址寄存器,DI作變址寄存器時(shí) EA= 圖2.11 立即尋址【例2.9】 MOV AX,80BX+SI。執(zhí)行前:AX=30H,BX=1000H,SI=100H,DS=3000H,(31180H)=1234H。目的操作數(shù)地址是AX。源操作數(shù)采用相對(duì)基址加變址尋址,位移量X為80H,基址寄存器選用了BX,變址寄存器選用了SI。由于源操作數(shù)選用BX作基址寄存器,所以其物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移地址EA相加形成,即源操作數(shù)的PA=(DS)左移4位+BX+SI+80H=31180H,(31180H)=1234H,

16、所以執(zhí)行后:AX=1234H,BX、SI、DS、(31180H)未變?!纠?.10】 MOV -6BP+DI,AX。執(zhí)行前:AX=33H,BP=10H,DI=48H,SS=4000H,(40052H)=900H目的操作數(shù)采用相對(duì)基址加變址尋址方式,位移量是-6,基址寄存器選用了BP,段寄存器就是SS,變址寄存器選用了DI。所以,其物理地址PA由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址EA相加形成,即目的操作數(shù)的PA=(SS)左移4位+BP+DI+(-6)=40052H,而(40052H)=900H,所以執(zhí)行后:(40052H)=33H,BP、DI、SS、AX均未改變。6. 立即尋址立即尋址方式

17、中,操作數(shù)直接放在指令中,也就是說,操作數(shù)的存放地址就是指令操作數(shù)的下一單元。該操作數(shù)可以是8位或16位二進(jìn)制補(bǔ)碼表示的常數(shù),如圖2.11所示。說明:指令的下一單元的內(nèi)容為操作數(shù)n,n也稱為立即操作數(shù)。當(dāng)用立即尋址方式給寄存器賦值時(shí),立即數(shù)可以是8位或16位,若是16位,則高位字節(jié)存放在高地址中,低位字節(jié)存放在低地址中。【例2.11】 MOV CL,10。目的操作數(shù)地址是CL。源操作數(shù)是10,其地址是指令的下一單元。源操作數(shù)10緊跟著指令操作符存放在代碼段中。該指令的功能是將立即數(shù)10送入CL寄存器中?!纠?.12】 MOV AX,AB。目的操作數(shù)地址是AX。源操作數(shù)是字母A、B,其地址是指令

18、的下一單元。源操作數(shù)AB緊跟著指令操作符存放在代碼段中。該指令的功能是將高地址中的字母A的ASCII碼送入AH中、低地址中的字母B的ASCII碼送入AL中。注意: 立即數(shù)尋址方式不能用在單操作數(shù)指令中。 在雙操作數(shù)指令中,立即數(shù)尋址方式不能用于目的操作數(shù)字段,也就是說它只能用于源操作數(shù)字段。7. 直接尋址在直接尋址方式中,指令操作數(shù)字段中存放的是操作數(shù)的16位偏移地址EA,即操作數(shù)的偏移地址EA與操作碼一起存放在代碼段中,而操作數(shù)可以存放在數(shù)據(jù)段,也可以存放在其他段。操作數(shù)的物理地址由其所在段的寄存器內(nèi)容左移4位與指令中給出的偏移地址EA相加形成,如圖2.12所示。 段 寄 存 器 操 作 數(shù)

19、 指 令 EA PA 操 作 數(shù) 左 移4位 + 說明:指令下一字單元的內(nèi)容是操作數(shù)的偏移地址EA。EA可以用符號(hào)或數(shù)值表示。如果用數(shù)值表示EA則必須用方括號(hào)括起來,而且在方括號(hào)前應(yīng)給出段寄存器名;直接尋址的操作數(shù)可以是字或字節(jié)。圖2.12 直接尋址(1) MOV AX,DS:2005H (2) MOV DH,DS:2005H執(zhí)行前:AX=1,DS=3000H,32005H=10H ,32006H=20H。 目的操作數(shù)地址均為AX。源操作數(shù)都采用直接尋址方式,其偏移地址為2005H。(1) 執(zhí)行后:AX=2010H,DS、(32005H)字單元內(nèi)容未變。(2) 執(zhí)行后:DH=10H,DS、(3

20、2005)字節(jié)單元內(nèi)容未變。EA如果用符號(hào)表示,則方括號(hào)可用可不用。假定BUFA在數(shù)據(jù)段定義,其偏移地址是1000H,即(BUFA)=1000H,DS=2000H,AX=222H,21000H=1234H。其中,源操作數(shù)采用直接尋址方式,指令下一單元的內(nèi)容為變量BUFA的偏移地址EA。指令的功能是將字類型變量BUFA中的內(nèi)容送入AX之中。執(zhí)行后:AX=1234H。直接尋址方式適合于處理單個(gè)變量。當(dāng)需要對(duì)某個(gè)存放在存儲(chǔ)器中的變量進(jìn)行處理時(shí),可以先用直接尋址方式把該變量取到一個(gè)寄存器中,例如MOV AX,A1 ;A1中內(nèi)容AXMOV BX,A2 ;A2中內(nèi)容BXMOV CX,A3 ;A3中內(nèi)容CX

21、MOV DX,A4+6 ;A4中內(nèi)容DX【例2.13】【例2.14】 MOV AX,BUFA。8. 跨段的有關(guān)問題上述7種尋址方式中,除立即數(shù)尋址方式和寄存器尋址方式外,其他各種尋址方式的操作數(shù)都在除代碼段以外的存儲(chǔ)區(qū)中。8088/8086的存儲(chǔ)器是分段使用的。通常,若選用寄存器BP作間址寄存器、變址寄存器或基址寄存器,即在采用寄存器間接尋址、變址尋址或基址加變址尋址時(shí),只要BP出現(xiàn)在方括號(hào)之內(nèi),則操作數(shù)在當(dāng)前堆棧段。此時(shí),操作數(shù)的物理地址PA由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址EA相加形成;否則,操作數(shù)在當(dāng)前數(shù)據(jù)段,此時(shí)操作數(shù)的物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移地址EA

22、相加形成。這是8086的基本約定,即默認(rèn)狀態(tài)。當(dāng)要否定默認(rèn)狀態(tài),到非約定段尋找操作時(shí),必須用跨段前綴指明操作數(shù)所在段的段寄存器名。匯編格式:段寄存器名:功能:冒號(hào)“:”之前的段寄存器指明了操作數(shù)所在段。例如:(1) MOV AX,DS:BP。(2) MOV BX,ES:BX。(3) MOV CX,SS:SI。(4) MOV DX,SS:DI。其中,DS:、ES:、SS:均為跨段前綴。此時(shí),默認(rèn)不起作用。所以,操作數(shù)的物理地址由“:”前面的段寄存器內(nèi)容左移4位與偏移地址EA相加形成。按跨段前綴的說明,上述4條指令的源操作數(shù)物理地址分別如下計(jì)算:第(1)條:DS左移4位+BP。第(2)條:ES左移

23、4位+BX。第(3)條:SS左移4位+SI。第(4)條:SS左移4位+DI。假定刪去上述指令中的跨段前綴(DS:、ES:、SS:),則默認(rèn)狀態(tài)確定操作數(shù)所在的段。此時(shí),第(1)條的源操作數(shù)在堆棧段,第(2)到(4)條的源操作數(shù)在DS所指的數(shù)據(jù)段。最后需要說明的是:無論是段默認(rèn)狀態(tài),還是跨段情況,操作數(shù)的物理地址PA均由系統(tǒng)自動(dòng)計(jì)算。所以,在實(shí)際應(yīng)用中,當(dāng)要訪問某段之中某一單元時(shí),著重考慮的不是其物理地址的計(jì)算方法及結(jié)果,而是其類型及偏移地址的表示形式。因此,從本章之后,我們談到的存儲(chǔ)單元地址均指偏移地址。2.2 指 令 系 統(tǒng)8088/8086 CPU指令系統(tǒng)可以分為:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指

24、令、邏輯運(yùn)算指令、移位指令、轉(zhuǎn)移指令、字符串操作指令、處理器控制指令、輸入/輸出指令(將在第6章中介紹)、中斷指令。下面我們分別介紹各指令的格式及功能。2.2.1 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令用來實(shí)現(xiàn)寄存器和存儲(chǔ)器間的字節(jié)或字的數(shù)據(jù)傳送。其中包括堆棧操作、地址傳送等指令。1. 通用數(shù)據(jù)傳送指令1) 數(shù)據(jù)傳送指令MOV格式:MOV OPD,OPS。功能:OPD是目的操作數(shù),OPS是源操作數(shù),該語(yǔ)句的功能是將源操作數(shù)送至目的地址中,即(OPS)(OPD)。MOV指令可以在CPU內(nèi)或CPU和存儲(chǔ)器之間傳送字或字節(jié)。它傳送的信息可以有如下7種形式:( (1) 寄存器到寄存器,如MOV AX,BX;將BX的

25、內(nèi)容送到AX中。(2) 立即數(shù)到寄存器,如MOV AX,03H;將立即數(shù)03H送到AX中。(3) 立即數(shù)到存儲(chǔ)單元,但必須用PTR確定操作數(shù)類型,如:MOV BYTE PRT 2000H,12H;將立即數(shù)12H送到(2000H)中。(4) 存儲(chǔ)單元到寄存器,如MOV AX,YBPSI;將地址為16D(SS)(BP)(SI)10位移量Y的存儲(chǔ)單元的內(nèi)容送到AX中。(5) 寄存器到存儲(chǔ)單元,如MOV TABLE,AX;將寄存器AX中的內(nèi)容送到TABLE存儲(chǔ)單元中。(6) 寄存器或存儲(chǔ)單元到除CS外的段寄存器,如MOV DS,DATA;將DATA的內(nèi)容送到DS中。(7) 段寄存器到寄存器或存儲(chǔ)單元,

26、如MOV MOV AX,DS;將段寄存器的內(nèi)容送到AX中。使用MOV指令時(shí)要注意以下一些問題:(1) MOV指令不允許在兩個(gè)存儲(chǔ)單元之間直接傳送數(shù)據(jù)。(2) MOV指令不允許在兩個(gè)段寄存器之間直接傳送數(shù)據(jù)。(3) MOV指令不允許用立即數(shù)直接為段寄存器賦值。(4) MOV指令不影響標(biāo)志位。2) 堆棧操作指令堆棧是內(nèi)存中的一個(gè)特殊存儲(chǔ)區(qū)。堆棧中的數(shù)據(jù)只能通過堆棧的一端進(jìn)行存取,這一端稱為“棧頂”。由于堆棧數(shù)據(jù)總是通過棧頂進(jìn)行存取,因此,最后壓入堆棧的數(shù)據(jù)總是最先被取出,這稱為堆棧操作的“先進(jìn)后出”特性。IBM PC堆棧操作必須以“字”為單位進(jìn)行,堆棧中的數(shù)據(jù)在堆棧段中從地址高端向低端存放,棧頂指

27、針用SP寄存器表示。堆棧操作指令包括入棧指令PUSH和出棧指令POP。(1) PUSH入棧指令。格式:PUSH OPS。功能:將寄存器、段寄存器或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧中?!纠?.15】 PUSH AX。執(zhí)行前:(AX)=04F8H,(SP)=1000H,堆棧情況如圖2.13(a)所示。執(zhí)行后:(0FFEH)=04F8H,AX的內(nèi)容不變。堆棧情況如圖2.13(b)所示。(2) POP出棧指令。格式:POP OPS。功能:將堆棧棧頂內(nèi)容彈入寄存器、段寄存器或存儲(chǔ)器中。執(zhí)行的操作:(OPS) (SP+1),(SP)(SP)(SP)+2【例2.16】 POP AX。執(zhí)行前:AX=1111H,堆

28、棧情況如圖2.13(b)所示。執(zhí)行后:AX=04F8H,堆棧情況如圖2.13(a)所示。說明:(1) PUSH指令的操作數(shù)不能是“立即數(shù)”,POP指令的操作數(shù)不能是段寄存器CS。(2) PUSH和POP指令都不影響標(biāo)志位。(3) 在堆棧操作中,堆棧的正確存取順序十分重要。當(dāng)多個(gè)數(shù)據(jù)暫存時(shí),PUSH進(jìn)入數(shù)據(jù)的順序與POP彈出的順序正好相反?!纠?.17】 依次用堆棧保存AX、BX、CX.DX寄存器的內(nèi)容,然后再將它們復(fù)原。PUSH AXPUSH BCPUSH CXPUSH DX POP DXPOP CXPOP BX POP AX3) 交換指令與換碼指令(1) 交換指令XCHG。格式:XCHG O

29、PD,OPS。OPDOPS說明:(1) 它可在累加器、通用寄存器或存儲(chǔ)器之間相互交換,但兩個(gè)存儲(chǔ)器間不能直接交換,也不允許使用段寄存器。(2) XCHG指令可以是字節(jié)或字操作,且不影響標(biāo)志位。如:XCHG AX,2000H。其功能為交換AX寄存器和2000H地址單元的內(nèi)容,如指令執(zhí)行前AX=01F0H、DS=F000H、(F2000H)=4AB7H,則指令執(zhí)行后AX=4AB7H、(F2000H)=01F0H?!纠?.18】 寫出使兩個(gè)內(nèi)存單元NUM1和NUM2的內(nèi)容互換的指令。MOV AX,NUM1XCHG AX,NUM2MOV NUM1,AX由于XCHG指令不允許同時(shí)對(duì)兩個(gè)存儲(chǔ)單元進(jìn)行操作,

30、因而借助于一個(gè)通用寄存器AX。先把NUM1中的數(shù)據(jù)傳送到AX,再將AX中的內(nèi)容與NUM2進(jìn)行交換。功能:將兩個(gè)操作數(shù)的內(nèi)容互換,如圖2.14所示。圖2.14 XCHG指令示意ALBX+AL (2) 換碼指令XLAT。格式:XLAT或XLAT OPR。功能:XLAT指令將一種代碼轉(zhuǎn)換成另一種代碼。說明:OPR是一個(gè)換碼表首地址,執(zhí)行該命令后,換碼表的一個(gè)字節(jié)內(nèi)容送到AL中。XLAT指令所需的數(shù)據(jù)表格是預(yù)先建立的。當(dāng)需要進(jìn)行代碼轉(zhuǎn)換時(shí),應(yīng)先將表格的首地址存入BX寄存器,并把需要轉(zhuǎn)換的代碼(即相對(duì)于首地址的偏移值)存入AL寄存器。執(zhí)行XLAT指令則可把(BX+AL)內(nèi)存地址單元的內(nèi)容裝入AL寄存器,

31、如圖2.15所示。該指令的執(zhí)行結(jié)果不影響標(biāo)志位。由于AL寄存器只有8位,所以表格長(zhǎng)度不能超過256個(gè)字節(jié)。 圖2.15 XLAT指令示意2. 地址傳送指令 1) 有效地址送寄存器指令LEA格式:LEA OPD,OPS。功能:該指令把源操作數(shù)的偏移地址送到指定的寄存器中。說明:(1) OPD可以為任一16位通用寄存器,OPS可以是變量名、標(biāo)號(hào)或地址表達(dá)式。LEA AX,TABLE;TABLE為標(biāo)號(hào)LEA CX,BX+SILEA DX,NUMSI+BX;NUM為變量(2) LEA指令取的是變量的偏移地址,而不是變量的值?!纠?.19】 比較以下兩條指令的區(qū)別。LEA DX,VALUEMOV AX,

32、VALUE如指令執(zhí)行前,VALUE的有效地址為100H,以VALUE為符號(hào)地址的字單元的內(nèi)容為3056H,則指令執(zhí)行后DX=0100H、AX=3056H。2) 數(shù)據(jù)段指針?biāo)图拇嫫鱈DS格式:LDS OPD,OPS。功能:該指令把源操作數(shù)指定的內(nèi)存中相繼4個(gè)字節(jié)單元(即雙字)中的低地址中的字(標(biāo)號(hào)或變量所在段的地址偏移量)送到由指令指定的通用寄存器中,通常指定SI寄存器, ALBX+AL將雙字的高地址中的字(標(biāo)號(hào)或變量所在的段基址)送到DS寄存器中。說明:OPD是一個(gè)16位通用寄存器,OPS是存儲(chǔ)器地址?!纠?.20】 LDS SI,BX。該指令執(zhí)行前DS=0C00H、BX=0200H、(0C2

33、00H)=2A35H、(0C202H)=4000H,則執(zhí)行后DS=4000H、SI=2A35H,如圖2.16所示。數(shù)據(jù)段 BX CS:XXXX DS SI DS:0200H 0200H OP 寄存器 35H 代碼段 2AH 00H 40H 4000H 2A35H 圖2.16 LDS SI,BX3) 附加段指針?biāo)图拇嫫鱈ES格式:LES OPD,OPS。功能:該指令與LDS相似,但它是對(duì)附加數(shù)據(jù)段工作。它把源操作數(shù)指定的內(nèi)存中相繼4個(gè)字節(jié)單元(即雙字)中的低地址中的字(標(biāo)號(hào)或變量所在段的地址偏移量)送到由指令指定的通用寄存器中,通常指定DI寄存器,將雙字的高地址中的字(標(biāo)號(hào)或變量所在的段基址)送

34、到ES寄存器中。如該指令執(zhí)行前DS=B000H、BX=0020H、(B0020H)=0076H、(B0022H)=1F00H,則3條地址傳送指令的目的操作數(shù)都不為段寄存器,且源操作數(shù)尋址方式必須是除立即數(shù)方式和寄存器方式以外的其他尋址方式。并且,它們不影響標(biāo)志位。3. 標(biāo)志寄存器傳送指令1) 標(biāo)志寄存器送AH指令LAHF格式:LAHF。功能:將標(biāo)志寄存器的第8位送到AH中。2) AH送標(biāo)志寄存器格式:SAHF。功能:將AH的內(nèi)容送到標(biāo)志寄存器的第8位中。3) 標(biāo)志寄存器入棧指令格式:PUSHF。功能:將標(biāo)志寄存器的內(nèi)容壓入堆棧。4) 標(biāo)志出棧指令格式:POPF。功能:將棧頂內(nèi)容彈出送入標(biāo)志寄存

35、器中。上面4條指令中,LAHF和PUSHF不影響標(biāo)志位。SAHF和POPF則由裝入值來確定標(biāo)志位的值。【例2.21】 LES DI,BX。執(zhí)行后ES=1F00H、DI=0076H。+ F0F0H + 1111 0000 1111 00000334H 1 0000 0011 0100 0100指令執(zhí)行后,BX=0344H、CF=1、ZF=0、SF=0、OF=0。【例2.23】 雙精度(32位)加法運(yùn)算。設(shè)目的操作數(shù)存放在DX和AX寄存器中,其中DX存放高位字。源操作數(shù)存放在CX和BX寄存器中,其中CX存放高位字,如指令執(zhí)行前:DX=0067H,AX=F000HCX=0001H,BX=2345H指

36、令序列:ADD AX,BXADC DX,CX第一條指令執(zhí)行后: F000H +2345H1 1 345HAX=1345H,CF=1,ZF=0,SF=0,OF=0第二條指令執(zhí)行后: 0067H 0001H + 1 (CF) 0069HDX=0069H,CF=0,ZF=0,SF=0,OF=0該指令序列執(zhí)行完后,DX=0069H、AX=1345H,結(jié)果正確。2. 減法指令1) 普通減法指令SUB格式:SUB OPD,OPS。功能:OPDOPDOPS,即從目的操作數(shù)中減去源操作數(shù),其差值送入目的地址中。本指令影響標(biāo)志位AF、CF、OF、PF、SF、ZF。2) 帶借位減法指令SBB格式:SBB OPD,

37、OPS。功能:(OPD)(OPD)(OPS)CF,即從目的操作數(shù)中減去源操作數(shù)和標(biāo)志位CF,結(jié)果送入目的地址中。其中CF為進(jìn)位位,在減法指令中表示向高位的借位。減法指令其他特征與加法指令相同。本指令只影響標(biāo)志位AF、CF、OF、PF、SF、ZF。3) 減1指令DEC格式:DEC OPD,即目的操作數(shù)減1,結(jié)果送回目的地址中。功能:(OPD)(OPD)1。本指令影響標(biāo)志位AF、OF、PF、SF、ZF?!纠?.24】求兩個(gè)三字節(jié)數(shù)之差。A1 DB 105,36,59A2 DB 120,64,72MOV AL,AISUB AL,A2;低字節(jié)數(shù)之差MOV AH,A1+1SBB AH,A2+1;帶借位中

38、間字節(jié)數(shù)之差MOV DL,A1+2SBB DL,A2+2;高位字節(jié)數(shù)之差4) 比較指令CMP格式:CMP OPD,OPS。功能:(OPD)(OPS),CMP指令與SUB指令一樣都是執(zhí)行減法操作,但它并不保存運(yùn)算的結(jié)果,而只是根據(jù)結(jié)果設(shè)置條件標(biāo)志位,即CMP指令執(zhí)行后OPD的內(nèi)容不變。在CMP指令后面常跟一條條件轉(zhuǎn)移指令,以便根據(jù)比較結(jié)果產(chǎn)生不同的程序分支。5) 求補(bǔ)指令NEG格式:NEG OPR。功能:操作數(shù)求反加1。NEG指令的條件碼按求補(bǔ)后的結(jié)果設(shè)置:當(dāng)操作數(shù)為0時(shí),求補(bǔ)運(yùn)算的結(jié)果使CF=0,其他情況CF均為1;只有當(dāng)字節(jié)運(yùn)算時(shí),對(duì)128求補(bǔ)以及字運(yùn)算時(shí)對(duì)32768求補(bǔ)時(shí)OF=1,其他情況

39、OF均為0。3. 乘法指令1) 無符號(hào)數(shù)乘法指令MUL 格式:MUL OPS。功能:字節(jié)操作:AXAL(OPS)字操作: DX,AXAX(OPS)格式:IMUL OPS。字節(jié)操作:AXAL(OPS)字操作: DX,AXAX(OPS) 乘法指令格式中的操作數(shù)為源操作數(shù),可以使用除立即數(shù)以外的任何一種尋址方式。乘法指令的目的操作數(shù)為隱含操作數(shù),隱含累加器AX(字節(jié)操作用AL,字操作用AX)。乘法運(yùn)算的結(jié)果,如果源操作數(shù)是字節(jié)類型,則16位乘積存放在AX中;如果源操作數(shù)是字類型,32位乘積存放在DX和AX寄存器對(duì)中,其中DX存放高位字,AX存放低位字。乘法指令除影響條件碼標(biāo)志CF和OF位外,指令執(zhí)行

40、后,其他的條件碼標(biāo)志不定。在具體運(yùn)算中,是使用MUL指令還是使用IMUL指令,則操作數(shù)的類型確定。如果是無符號(hào)數(shù)乘法,則使用MUL指令;如果是有符號(hào)乘法則使用IMUL指令?!纠?.26】 無符號(hào)數(shù)乘法和有符號(hào)數(shù)乘法舉例。MUL BLIMUL BL【例2.25】 MUL BETABX MUL DI2) 有符號(hào)數(shù)乘法指令I(lǐng)MUL功能:(2) 當(dāng)作為有符號(hào)數(shù)時(shí),使用IMUL指令。AL=(9)CH的十進(jìn)制數(shù)為(100)DBL=(12)H的十進(jìn)制數(shù)為(18)D其結(jié)果為:AX=(F8F8)H=(1800)D,CF=OF=1。4. 除法指令1) 無符號(hào)數(shù)除法指令DIV格式:DIV OPS。功能:實(shí)現(xiàn)兩個(gè)無符

41、號(hào)數(shù)二進(jìn)制數(shù)除法運(yùn)算。字節(jié)相除,被除數(shù)在AX中。字相除,被除數(shù)在DX、AX中,除數(shù)在OPS中。字節(jié)操作:ALAX/(OPS)的商設(shè)AL=9CH,BL=12H,分別作為無符號(hào)數(shù)和有符號(hào)數(shù)參加運(yùn)算。(1) 當(dāng)作為無符號(hào)數(shù)時(shí),使用MUL指令。AL=(9)CH的十進(jìn)制數(shù)為(156)DBL=(12)H的十進(jìn)制數(shù)為(18)D其結(jié)果為:AX=(AF8)H=(2808)D,CF=OF=1。AHAX/(OPS)的余數(shù)字操作: AX(DX,AX)/(OPS)的商 DX(DX,AX)/(OPS)的余數(shù)字節(jié)操作的16位被除數(shù)存放在AX中,8位商在AL中,8位余數(shù)在AH中。字操作的32位被除數(shù)存放在DX和AX中(其中D

42、X存放高位字),16位商在AX中,16位余數(shù)在DX中。2) 有符號(hào)數(shù)除法指令I(lǐng)DIV 格式:IDIV OPS。功能:與DIV相同,但操作數(shù)必須為有符號(hào)數(shù)。計(jì)算的商和余數(shù)也為有符號(hào)數(shù),且余數(shù)的符號(hào)和被除數(shù)相同。除法指令的尋址方式與乘法指令相同。其源操作數(shù)可以用除立即數(shù)以外的任何一種尋址方式,而目的操作數(shù)隱含,必須存放在AX或(DX,AX)寄存器中。除法指令中所有條件碼標(biāo)志均不定?!纠?.27】 除法指令舉例。DIV CLIDIV CL設(shè)AX=(0400)H、CL=(A0)H,分別作為無符號(hào)數(shù)和有符號(hào)數(shù)參加運(yùn)算。(1) 為無符號(hào)數(shù)時(shí),使用DIV指令。AX=(0400)H的十進(jìn)制數(shù)為(1024)DC

43、L=(0A0)H的十進(jìn)制數(shù)為(160)D其結(jié)果為:商 AL=(06)H=(06)D 余數(shù) AH=(40)H=(64)D(2) 當(dāng)作為有符號(hào)數(shù)時(shí),使用IDIV指令。AX=(00)H的十進(jìn)制數(shù)為(+1024)DCL=(0A0)H的十進(jìn)制數(shù)為(96)H其結(jié)果為:商 AL=(0F6)H=(10)D余數(shù) AH=(40)H=(+64)D在使用除法指令時(shí)還應(yīng)注意:除法指令的字節(jié)除法的商為8位,字除法的商為16位。如果字節(jié)除法時(shí),被除數(shù)高8位的絕對(duì)值大于除數(shù)的絕對(duì)值;字除法時(shí),被除數(shù)高16位的絕對(duì)值大于除數(shù)的絕對(duì)值,得到的商就會(huì)產(chǎn)生溢出。這種溢出在IBM PC中是由系統(tǒng)直接轉(zhuǎn)入0型中斷處理的。5. 符號(hào)擴(kuò)展指

44、令由于字節(jié)除法要求被除數(shù)為16位,字除法要求被除數(shù)為32位,往往需要用符號(hào)擴(kuò)展的方法來得到所需的被除數(shù)格式,為此系統(tǒng)中提供了兩條符號(hào)擴(kuò)展指令。1) 字節(jié)轉(zhuǎn)換為字指令CBW格式:CBW。功能:把AL中的符號(hào)位擴(kuò)展到AH。即如果AL的最高位為0,則AH=(00)H;如AL的最高位為1,則AH=(FF)H。2) 字轉(zhuǎn)換為雙字指令CWD格式:CWD。功能:把AX的符號(hào)位擴(kuò)展到DX。即如果AX的最高位為0,則DX=(0000)H;如AX的最高位為0,則DX=(FFFF)H。這兩條指令不影響條件碼的標(biāo)志?!纠?.28】 在A、B、C這3個(gè)字型變量中各存有16位有符號(hào)數(shù)a、b、c。用程序?qū)崿F(xiàn)(ab+c)/a

45、的運(yùn)算。要求按上式計(jì)算,結(jié)果的商存入AX寄存器,余數(shù)存入DX寄存器。MOV AX,A;取操作數(shù)AIMUL B;AB,乘積為32位MOV BX,AX;乘積暫存CX:BXMOV CX,DMOV AX,C;取操作數(shù)ZCWD;符號(hào)擴(kuò)展為32位ADD AX,BX;32位加法ADC DX,CXIDIV X;除以A程序開始時(shí)是16位操作數(shù)參加運(yùn)算,但XY的乘積的32位,則后續(xù)運(yùn)算余部轉(zhuǎn)為32位運(yùn)算。2.2.3 邏輯運(yùn)算指令1. 邏輯與指令A(yù)ND格式:AND OPD,OPS。功能:(OPD) (OPD)(OPS)。本指令影響標(biāo)志位PF、SF、ZF、CF=0、OF=0?!纠?.29】 AND AX,0FH。執(zhí)行

46、前:AX=0FBFAH。1111101111111010 0000000000001111 0000000000001010故執(zhí)行后:AX=000AH。2. 邏輯或指令OR格式:OR OPD,OPS。功能:(OPD)(OPS)(OPD)。本指令只影響標(biāo)志位CF=0、OF=0、PF、SF、ZF?!纠?.30】 OR AX,55H。執(zhí)行前:AX=0AAAAH。 1010101010101010 0000000001010101 1010101011111111故:AX=0AAFFH。3. 邏輯非指令NOT5. 測(cè)試指令TEST格式:TEST OPD,OPS。功能:(OPD)(OPS)。本指令根據(jù)O

47、PD和OPS邏輯與的結(jié)果置標(biāo)志位SF、ZF、PF,操作結(jié)束后,源操作數(shù)和目的操作數(shù)內(nèi)容不變。邏輯運(yùn)算指令可以對(duì)字節(jié)或字進(jìn)行邏輯運(yùn)算操作。由于邏輯運(yùn)算是按位操作的,其操作數(shù)一般應(yīng)是位串而不是數(shù)。邏輯操作結(jié)果見表2-1。格式:NOT OPD。功能:(OPD)(OPD)。本指令不影響標(biāo)志位。4. 異或指令XOR格式:XOR OPD,OPS。功能:(OPD)(OPS) (OPS)?!纠?.31】 XOR AX,0FFFFH。執(zhí)行前:AX=0AAAAH。101010101010101011111111111111110101010101010101故:AX=5555H。 表2-1 AND、OR和XOR操

48、作源操作數(shù)目的操作數(shù)ANDORXOR00110101000101110110邏輯運(yùn)算指令可以對(duì)特定的位進(jìn)行操作,在各種操作及接口操作中會(huì)經(jīng)常用到。利用邏輯運(yùn)算指令可以完成屏蔽、置位以及測(cè)試等操作。2.2.4 移位指令1. 邏輯左移指令SHL與算術(shù)左移指令SAL格式:SHL OPD,COUNT SAL OPD,COUNT。功能:將(OPD)向左移動(dòng)指定的位數(shù),而最低位補(bǔ)入相應(yīng)個(gè)數(shù)的0。CF的內(nèi)容為最后移入位的值。其中OPD可以是除立即數(shù)以外的任何尋址方式,移位次數(shù)由COUNT決定,COUNT可以是1或CL(當(dāng)移位次數(shù)大于1時(shí),需先將移位次數(shù)放入CL中)。執(zhí)行操作如圖2.17所示。 圖2.17 算

49、術(shù)/邏輯左移SAL和SHL常常用來做乘以2n(n為移位次數(shù))的運(yùn)算。使用時(shí)要注意是否發(fā)生溢出,若有溢出則應(yīng)使用乘法指令。 圖2.18 算術(shù)右移【例2.32】 設(shè)DI=00FFH,計(jì)算DI4DI。MOV CL,2SAL DI,CL執(zhí)行后,DI=03FCH。2. 算術(shù)右移指令SAR格式:SAR OPD,COUNT。功能:將(OPD)向右移動(dòng)指定的位數(shù),這里是將最高有效位右移,同時(shí)再用它自身的值填入,即如果原來是0則仍為0,原來是1則仍為1。CF的內(nèi)容為最后移入位的值。其中OPD可以是除立即數(shù)以外的任何尋址方式,移位次數(shù)由COUNT決定,COUNT可以是1或CL(當(dāng)移位次數(shù)大于1時(shí),需先將移位次數(shù)放

50、入CL中)。執(zhí)行操作如圖2.18所示。3. 邏輯右移指令SHR格式:SHR OPD,COUNT。功能:將(OPD)向右移動(dòng)指定的位數(shù),最高位補(bǔ)以相應(yīng)個(gè)數(shù)的0,CF的內(nèi)容為最后移入位的值。其中OPD可以是除立即數(shù)以外的任何尋址方式,移位次數(shù)由COUNT決定,COUNT可以是1或CL(當(dāng)移位次數(shù)大于1時(shí),需先將移位次數(shù)放入CL中)。執(zhí)行操作如圖2.19所示。 圖2.19 邏輯右移SAR和SHR指令常常用來做除以2n(n為移位次數(shù))的運(yùn)算。SAR用于有符號(hào)數(shù),SHR用于無符號(hào)數(shù)?!纠?.33】MOV CL,2SHR VALUE,CL如指令執(zhí)行前:DS=F800H,VALUE=180H,(F980A)

51、=0008H。則指令執(zhí)行后:(F980A)=0002H,CF=0,相當(dāng)于(VALUE)除以4。4. 循環(huán)左移指令ROL格式:ROL OPD,COUNT。功能:將目的操作數(shù)的最高位與最低位連接起來,組成一個(gè)環(huán),將環(huán)中所有位一起向左移動(dòng)由COUNT指定的次數(shù)。CF的內(nèi)容為最后移入位的值。COUNT的含義與前面相同。執(zhí)行操作如圖2.20所示。5. 循環(huán)右移指令ROR格式:ROR OPD,COUNT。功能:將目的操作數(shù)的最高位與最低位連接起來,組成一個(gè)環(huán),將環(huán)中所有位一起向右移動(dòng)由COUNT指定的次數(shù)。CF的內(nèi)容為最后移入位的值。COUNT的含義與前面相同。執(zhí)行操作如圖2.21所示。圖2.20 循環(huán)左

52、移 圖2.21 循環(huán)右移6. 帶進(jìn)位循環(huán)左移RCL格式:RCL OPD,COUNT。功能:將目的操作數(shù)連同CF標(biāo)志位一起向左循環(huán)由COUNT指定的次數(shù)。執(zhí)行操作如圖2.22所示。 CF OPD 最低位 CF OPD 最高位 7. 帶進(jìn)位循環(huán)右移指令RCR格式:RCR OPD,COUNT。功能:將目的操作數(shù)連同CF標(biāo)志位一起向右循環(huán)由COUNT指定的次數(shù)。執(zhí)行可操作如圖2.23所示。循環(huán)移位指令可以改變操作數(shù)中所有位的位置?!纠?.34】 如AX=0012H、BX=0034H。要求指導(dǎo)它們裝配在一起形成AX=1234H,可編程如下:MOV CL,8ROL AX,CLADD AX,BX可以看出,這

53、8種指令可以分為兩組:前4種為移位指令,后4種為循環(huán)指令。所有移位指令都可以作字或字節(jié)操作。所有移位指令都影響CF和OF標(biāo)志位,其中,CF位根據(jù)各條指令的規(guī)定設(shè)置。OF位只有當(dāng)COUNT=1時(shí)才有效,當(dāng)移位后最高有效位的值發(fā)生變化時(shí)(原來為0,移位后為1;或原來為1,移位后為0),OF位置1,否則置0。循環(huán)移位指令不影響除CF和OF以外的其他條件標(biāo)志。而算術(shù)和邏輯移位指令則根據(jù)移位后的結(jié)果設(shè)置SF、ZF和PF位,AF位則無定義。2.2.5 轉(zhuǎn)移指令8088/8086提供了4種轉(zhuǎn)移指令:無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、重復(fù)控制指令和子程序調(diào)用指令。下面我們分別來介紹這4種指令。1. 無條件轉(zhuǎn)移指令

54、JMP無條件轉(zhuǎn)移指令可以轉(zhuǎn)到內(nèi)存任何地方,該指令不影響標(biāo)志位的值,但它改變IP寄存器或CS寄存器的內(nèi)容。它有如下5種方式。 圖2.22 帶進(jìn)位循環(huán)左移 圖2.23 帶進(jìn)位循環(huán)左移1) 段內(nèi)直接短轉(zhuǎn)移格式:JMP SHORT OPD。執(zhí)行的操作:(IP) (IP)+8位位移量。2) 段內(nèi)直接近轉(zhuǎn)移格式:JMP NEAR PTR OPD。執(zhí)行的操作:(IP) (IP)+16位位移量。說明:上述兩條指令匯編時(shí),目的地址的值是用當(dāng)前IP的值加上OPD與當(dāng)前IP值的差,其中OPD常用標(biāo)號(hào)表示。這兩條指令也可以直接寫成:JMP OPD,在這種格式中,用戶不需要考慮是短轉(zhuǎn)移,還是近轉(zhuǎn)移,匯編程序在匯編時(shí),計(jì)

55、算出JMP下一條指令與目標(biāo)地址間的相對(duì)偏移量,若該偏移量在127B之內(nèi)時(shí),產(chǎn)生一個(gè)短轉(zhuǎn)移,否則,產(chǎn)生一個(gè)在32KB范圍內(nèi)的近轉(zhuǎn)移。3) 段內(nèi)間接轉(zhuǎn)移格式:JMP WORD PTR OPD。執(zhí)行的操作:(IP) (EA)。說明:在這種指令中,轉(zhuǎn)移的偏移地址放在一個(gè)寄存器或一個(gè)存儲(chǔ)單元中,可以用除立即數(shù)以外的任何一種尋址方式取得。在將取得的偏移地址裝入指令寄存器IP,實(shí)現(xiàn)程序轉(zhuǎn)移?!纠?.35】 JMP BX。執(zhí)行前:BX=2010H,(2010H)=0FA34H。執(zhí)行后:IP=OFA34H。如圖2.24所示。C S D S 2 0 1 0 H B X 2 0 1 0 H JM P 寄 存 器 號(hào)

56、 0 3 4 H 0 FA H 圖2.24 段內(nèi)間接轉(zhuǎn)移 4) 段間直接(遠(yuǎn))轉(zhuǎn)移格式:JMP FAR PTR OPD。執(zhí)行的操作:IPOPD的段內(nèi)偏移地址。CSOPD所在段的段地址。說明:在這種指令尋址方式中,指令轉(zhuǎn)移的段地址和偏移地址直接存放在指令的操作數(shù)字段中,所以只要用其中的段地址和偏移地址分別取代CS和IP寄存器中的內(nèi)容,就可以實(shí)現(xiàn)從一個(gè)段到另一個(gè)段的轉(zhuǎn)移操作。5) 段間間接轉(zhuǎn)移格式:JMP DWORD PTR OPD。執(zhí)行的操作:IP(EA)CS(EA+2)說明:這種指令尋址方式,轉(zhuǎn)移的段地址和偏移地址存放在內(nèi)存中4個(gè)相鄰的字節(jié)單元中,指令只能用存儲(chǔ)器尋址方式取得段地址和偏移地址的

57、值,修改CS寄存器和IP寄存器的內(nèi)容。【例2.36】 JMP DWORD PTR BUFBX執(zhí)行前:DS=3000H,BX=0020H,BUF=0100H(30120H)=1234H,(30122H)=5678H其物理地址=3000H+0100H+0020H=30120H故執(zhí)行后:CS=5678H,IP=1234H2. 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是根據(jù)標(biāo)志寄存器的單個(gè)條件標(biāo)志的設(shè)置情況進(jìn)行相應(yīng)的轉(zhuǎn)移。條件轉(zhuǎn)移指令有如下一些。1) 根據(jù)標(biāo)志位的條件轉(zhuǎn)移指令(1) JZ(或JE)結(jié)果為零(或相等)則轉(zhuǎn)移。格式:JE(或JZ) OPD。測(cè)試條件:ZF=1。(2) JNZ(或JNE)結(jié)果不為零(或不相等

58、)則轉(zhuǎn)移。格式:JNZ(或JNE) OPD。測(cè)試條件:ZF=0。(3) JS結(jié)果為負(fù)則轉(zhuǎn)移。格式:JS OPD。測(cè)試條件:SF=1。(4) JNS 結(jié)果為正則轉(zhuǎn)移。格式:JNS OPD。測(cè)試條件:SF=0。(5) JO溢出則轉(zhuǎn)移。 格式:JO OPD。測(cè)試條件:OF=1。(6) JNO 不溢出則轉(zhuǎn)移。格式:JNO OPD。測(cè)試條件:OF=0。(7) JP(或JPE) 奇偶位為1則轉(zhuǎn)移。格式:JP OPD。測(cè)試條件:PF=1。(8) JNP(或JPO)奇偶位為0則轉(zhuǎn)移。格式:JNP(或JPO) OPD。測(cè)試條件:PF=0。2) 比較兩個(gè)無符號(hào)數(shù),并根據(jù)比較的結(jié)果轉(zhuǎn)移(1) JB(或JNAE,JC

59、)低于/不高于且不等于,或進(jìn)位位為1則轉(zhuǎn)移。格式:JB(或JNAE,JC) OPD。測(cè)試條件:CF=1。(2) JNB(或JAE,JNC)不低于,或者高于或者等于,或進(jìn)位位為0則轉(zhuǎn)移。格式:JNB(或JAE,JNC) OPD。測(cè)試條件:CF=0。(3) JBE(或JNA)低于或等于,或不高于則轉(zhuǎn)移。格式:JBE(或JNA) OPD。測(cè)試條件:CF=1或ZF=1。(4) JNBE(或JA)不低于或不等于,或者高于則轉(zhuǎn)移。格式:JNBE(或JA) OPD。測(cè)試條件:CF=0且ZF=0。3) 比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較的結(jié)果轉(zhuǎn)移(1) JL(或LNGE)小于,或者不大于且不等于則轉(zhuǎn)移。格式:JL(

60、或JNGE) OPD。測(cè)試條件:SF、OF異號(hào)。(2) JNL(或JGE)不小于,或者大于或者等于則轉(zhuǎn)移。格式:JNL(或JGE) OPD。測(cè)試條件:SF、OF同號(hào)。(3) JLE(或JNG)小于或等于,或者不大于則轉(zhuǎn)移。格式:JLE(或JNG) OPD。測(cè)試條件:SF、OF異號(hào)或ZF=1。(4) JNLE(或JG)不小于且不等于,或者大于則轉(zhuǎn)移。格式:JNLE(或JG) OPD。測(cè)試條件:SF、OF同號(hào)且ZF=0。4) 測(cè)試CX的值為0則轉(zhuǎn)移指令JCXZ CX寄存器的內(nèi)容為零則轉(zhuǎn)移。格式:JCXZ OPD。測(cè)試條件:(CX)=0。注意:上述條件轉(zhuǎn)移全為8位短跳。3. 重復(fù)控制指令該組指令使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論