第4章 80X86尋址方式與指令系統(tǒng)_第1頁
第4章 80X86尋址方式與指令系統(tǒng)_第2頁
第4章 80X86尋址方式與指令系統(tǒng)_第3頁
第4章 80X86尋址方式與指令系統(tǒng)_第4頁
第4章 80X86尋址方式與指令系統(tǒng)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章80X86尋址方式與指令系統(tǒng).4.1微型機指令格式4.2微型機的尋址方式4.38086指令系統(tǒng)4.480X86指令系統(tǒng)4.1微型機指令格式 一條指令一般應提供兩方面的信息:一是指明操作的性質(zhì),即要求CPU做什么操作,這部分稱為操作碼:二是給出與操作數(shù)有關(guān)的信息,如直接給出操作數(shù)或以不同方式給出操作數(shù)的地址、運算結(jié)果的存儲位置等。1.操作碼格式操作碼的位數(shù)決定了操作類型的多少,位數(shù)越多,所能表示的操作類型就越多。常見的操作碼有定長操作碼和擴展操作碼。2.地址結(jié)構(gòu)地址碼部分可有一個、兩個或多個,分別形成不同地址結(jié)構(gòu)的指令。4.2微型機的尋址方式

指令中如何提供操作數(shù)或操作數(shù)的地址,稱為尋址方式。尋址方式是用來確定操作數(shù)的地址從而找到操作數(shù)的。

8086提供了七種尋址方式,它們是立即尋址方式、寄存器尋址方式、直接尋址方式、寄存器間接尋址方式、寄存器相對尋址方式、基址變址尋址方式、相對基址變址尋址方式。80X86/Pentium有10種尋址方式。與8086/8088相比增加的三種尋址方式是比例變址尋址方式、基址加比例變址尋址方式和帶位移量的比例變址尋址方式。

4.2.1立即尋址操作數(shù)直接存放在指令中,作為指令的一部分存放在代碼段里,這種操作數(shù)稱為立即數(shù)。一般常用于給寄存器或存儲單元賦初值(即初始化),立即數(shù)只能用于源操作數(shù)字段,不能用于目的操作數(shù)字段。

4.2.2寄存器尋址操作數(shù)在某寄存器中,寄存器可用來存放源操作數(shù),也可以用來存放目的操作數(shù)。存取這類操作數(shù)在CPU內(nèi)部進行,所以執(zhí)行速度快。存放32位操作數(shù)的寄存器有:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI。存放16位操作數(shù)的寄存器有:AX,BX,CX,DX,BP,SP,SI,DI。存放8位操作數(shù)的寄存器有:AH,AL,BH,BL,CH,CL,DH,DL。

4.2.3存儲器尋址操作數(shù)在存儲器中。存儲器是分段管理的,要找到操作數(shù),必須指明操作數(shù)所在的段(段基址由段寄存器指明)及段內(nèi)偏移地址(以有效地址EA的形成方式給出)。1.直接尋址方式指令中直接給出操作數(shù)在段內(nèi)的偏移量,段基址隱含給出或用段前綴指明。該尋址方式適用于處理單個變量。一般操作數(shù)存放在數(shù)據(jù)段,故操作數(shù)的物理地址為:物理地址=DS×16d+EA=(段基址的寄存器)×16+偏移地址2.寄存器間接尋址操作數(shù)有效地址在基址寄存器BP、BX或變址寄存器SI、DI中,而操作數(shù)則在存儲器中。適用于表格處理,執(zhí)行完一條指令后,只需修改寄存器內(nèi)容就可取出表格中的下一項。

3.寄存器相對尋址操作數(shù)的有效地址是一個基址寄存器或變址寄存器的內(nèi)容和指令中指定的8位或16位位移量(即偏移量)之和。位移量可為正數(shù),也可為負數(shù)。適用于表格處理,修改基址或變址寄存器的內(nèi)容來取得表格中的元素。進行16位尋址時,物理地址計算公式為:物理地址=16d×DS+BX+8位或16位的位移量物理地址=16d×DS+DI+8位或16位的位移量物理地址=16d×DS+SI+8位或16位的位移量物理地址=16d×SS+BP+8位或16位的位移量4.基址變址尋址操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器內(nèi)容之和。兩個寄存器均由指令指定。如基址寄存器為BX,段寄存器使用DS;基址寄存器為BP,段寄存器使用SS。因此物理地址計算為:物理地址=16d×DS+BX+SI物理地址=16d×DS+BX+DI物理地址=16d×SS+BP+SI物理地址=16d×SS+BP+DI5.相對基址變址尋址操作數(shù)據(jù)有效地址是一個基址寄存器與一個變址寄存器的內(nèi)容之和再加上8位或16位位移量。同樣,當基址寄存器為BX時,使用DS為段寄存器;而當基址寄存器為BP時,則使用SS為段寄存器。因此物理地址為:物理地址=16d×DS+BX+DI+8位或16位的位移量物理地址=16d×DS+BX+SI+8位或16位的位移量物理地址=16d×SS+BP+DI+8位或16位的位移量物理地址=16d×SS+BP+SI+8位或16位的位移量4.2.480X86尋址方式以下三種尋址方式適合于32位尋址的情況,它們是32位特有的尋址方式。1.比例變址尋址方式比例變址尋址方式的有效地址為EA=[變址寄存器]×比例因子+位移量這里,乘比例因子的操作在CPU內(nèi)部由硬件完成。2.基址加比例變址尋址方式基址加比例變址尋址方式的有效地址為

EA=[基址寄存器]+[變址寄存器]×比例因子3.帶位移量的基址加比例變址尋址方式的有效地址為

EA=[基址寄存器]+[變址寄存器]×比例因子+位移量在尋址過程中,變址寄存器內(nèi)容乘以比例因子的操作在CPU內(nèi)部由硬件完成。

4.2.5I/O端口尋址1.直接端口尋址方式

I/O端口地址以8位立即數(shù)方式在指令中直接給出。例如INAL,N;N為尋址端口編號,只能在0~255范圍內(nèi)。2.間接端口尋址方式

I/O端口地址超過8位時,應存放在DX寄存器,即通過DX間接尋址,所能尋址的端口編號為0~65535。如OUTDX,AL,表示將AL的內(nèi)容輸出到由DX指出的端口中去。在16位PC機中,僅用A9~A0十條地址線表示I/O端口,所以DX間接尋址的范圍為0~1023(即0~3FFH)。4.38086指令系統(tǒng)

8086指令系統(tǒng)可分為六大類:數(shù)據(jù)傳送、算術(shù)運算、邏輯運算和移位、串處理、控制轉(zhuǎn)移和處理機控制等。4.3.1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令負責將數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲單元中,它可分為五種。1.通用數(shù)據(jù)傳送指令(1)MOV傳送指令格式:MOVDST,SRC;B/W

執(zhí)行操作:(DST)(SRC)(1)MOV傳送指令格式:MOVDST,SRC;B/W

執(zhí)行操作:(DST)(SRC)

其中DST表示目的操作數(shù),SRC表示源操作數(shù)。即把源操作數(shù)的內(nèi)容送入目的操作數(shù)。此指令把一個字節(jié)或一個字操作數(shù)從源傳送到目的。源操作數(shù)內(nèi)容不變。

SRC源操作數(shù)可以是累加器、寄存器、存儲器操作數(shù)和立即數(shù);而DST目的操作數(shù)可以是累加器、寄存器和存儲器。源和目的操作數(shù)同時都是存儲器操作數(shù)。兩個操作數(shù)位數(shù)要相同,立即數(shù)不能直接送寄存器。MOV指令的執(zhí)行不影響標志位。(2)XCHG交換命令格式:XCHGOPR1,OPR2;B/W

執(zhí)行的操作:(OPR1)(OPR2)將操作數(shù)1(OPR1)與操作數(shù)2(OPR2)進行交換。不影響標志位。

(3)POP出棧指令格式:POPDST;W

執(zhí)行的操作:(DST)(SP+1,SP),(SP)(SP)+2

具體的操作過程:首先將SP所指的棧頂單元內(nèi)容送入DST低位字節(jié)單元,SP內(nèi)容加1;然后再將當前SP所指棧頂單元內(nèi)容送入DST的高字節(jié)單元,SP的內(nèi)容再加1。2.地址傳送指令這組指令有三條,LEA、LDS和LES,它們將地址送到指定的寄存器。(1)LEA有效地址送寄存器指令該指令把存儲器操作數(shù)的有效地址送到指定的寄存器中。格式:LEAREG,SRC

執(zhí)行的操作:REGEASRC,指令把源操作數(shù)SRC的有效地址送到指定的寄存器中。

(2)LDS指針送寄存器和DS指令該指令把存儲器操作數(shù)的有效地址送到指定的寄存器中。格式:LDSREG,SRC

執(zhí)行的操作:REG(SRC),DS(SRC+2)指令把雙字的源操作數(shù)送到指定的寄存器中和DS段寄存器中。

(3)LES指針送寄存器和ES指令該指令把存儲器操作數(shù)的有效地址送到指定的寄存器中。格式:LESREG,SRC

執(zhí)行的操作:REG(SRC),ES(SRC+2)指令把雙字的源操作數(shù)送到指定的寄存器中和ES段寄存器中。

3.XLAT換碼指令

格式:XLAT;B

或XLATOPR

執(zhí)行的操作:AL(BX+AL)

指令功能將完成一個字節(jié)的查表轉(zhuǎn)換。它將數(shù)據(jù)段中偏移地址為BX與AL寄存器之和的存儲單元的內(nèi)容送入AL寄存器。在使用該指令時,應首先在數(shù)據(jù)段中建立一個表格,表的首地址置于BX中,AL中存放查找對象在表中的下標。指令執(zhí)行后,所查找的對象存于AL中,BX內(nèi)容保持不變。4.標志寄存器傳送指令這些指令的執(zhí)行,可以讀出當前標志寄存器(即PSW寄存器)中的內(nèi)容,也可以對標志寄存器設置新的值。(1)LAHF標志位送AH指令格式:LAHF

執(zhí)行的操作:AHPSW的低字節(jié)。將PSW寄存器中低8位的狀態(tài)標志送入AH的相應位。

(2)SAHFAH送標志寄存器指令格式:SAHF

執(zhí)行的操作:PSW的低字節(jié)AH。

將AH寄存器的相應位送入PSW寄存器中低8位的相應位。(3)PUSHF標志位進棧指令格式:PUSHF

執(zhí)行的操作:SPSP-1,(SP)PSW高8位

SPSP-1,(SP)PSW低8位將標志寄存器的值送入堆棧頂部,棧指針SP值減2。(4)POPF標志出棧指令格式:POPF

執(zhí)行的操作:PSW低8位(SP),SPSP+1PSW高8位(SP),SPSP+1

將堆棧頂部彈出二個字節(jié)送到PSW寄存器中,同時堆棧指針SP值加2。數(shù)據(jù)傳送指令除了SAHF和POPF兩條外,執(zhí)行結(jié)果都不影響標志位。

4.3.2算術(shù)運算指令算術(shù)運算指令包括二進制運算和十進制運算指令,算術(shù)運算指令有雙操作數(shù)指令(如加、減、乘、除、比較等),也有單操作數(shù)指令(如增1、減1、求補等)。加減運算標志位判斷方法:若8位數(shù)相加或相減,指令執(zhí)行后:相加(或相減)D7無進位(或無借位),CF=0否則CF=1;相加或相減結(jié)果不等于零,ZF=0否則ZF=1;運算結(jié)果D7=0,SF=0;D7=1,SF=1;運算結(jié)果1的個數(shù)為奇數(shù),PF=0否則PF=1;相加(或相減),D3無向D4進位(或借位),AF=0,否則AF=1;相加(或相減),最高位與次高位都有進位(或借位)或都無進位(或都無借位),OF=0,否則OF=1。

1.加法指令(1)ADD加法指令格式:ADDDST,SRC;B/W

執(zhí)行的操作:(DST)(DST)+(SRC),完成兩個操作數(shù)相加,和傳送到目的操作數(shù)中。指令執(zhí)行結(jié)果影響標志位AF、CF、OF、PF、SF和ZF。(2)ADC帶進位加法指令格式:ADCDST,SRC;B/W

執(zhí)行的操作:(DST)(DST)+(SRC)+CF完成兩個操作數(shù)及進位(CF)三者相加,和傳送到目的操作數(shù)中。此指令與ADD指令規(guī)定大部分相同。惟一不同之處還要加上進位標志位的值。這條指令主要用于多字節(jié)加法運算中。ADC指令的形式同ADD指令。

(3)INC加1指令格式:INCOPR;B/W執(zhí)行的操作:(OPR)(OPR)+1此指令的操作是使操作數(shù)加1,送回操作數(shù)。此指令影響OF、SF、ZF、PF和AF。CF標志位不受影響。2.減法運算指令(1)SUB不帶借位的減法指令格式:SUBDST,SRC;B/W執(zhí)行的操作:(DST)(DST)-(SRC)執(zhí)行的操作:目的操作數(shù)與源操作數(shù)相減,差傳送到目的操作數(shù)中。指令執(zhí)行結(jié)果影響標志位AF、CF、OF、PF、SF和ZF。

(2)SBB帶借位減法指令格式:SBBDST,SRC;B/W執(zhí)行的操作:(DST)(DST)-(SRC)-CF該指令與SUB的操作基本相同,惟一不同是還需減去借位位CF。一般在多字節(jié)相減時,先進行低字節(jié)內(nèi)容相減,然后再進行高字節(jié)內(nèi)容相減,這時需減去低字節(jié)所產(chǎn)生的借位。SBB指令的形式同SUB指令。(3)DEC減1指令格式:DECOPR執(zhí)行的操作:(OPR)(OPR)-1

此指令與INC指令極為相似,不同之處只是將操作數(shù)減1,結(jié)果送入操作數(shù)。指令執(zhí)行結(jié)果不影響CF標志位外,其余標志位都受影響。

(4)NEG求補指令格式:NEGOPR

執(zhí)行的操作:(OPR)0-(OPR)把操作數(shù)按位求反并在最末位加1。(5)CMP比較指令格式:CMPOPR1,OPR2

執(zhí)行的操作:(OPR1)-(OPR2),該指令與SUB指令一樣執(zhí)行減法操作,但它并不保存結(jié)果只是根據(jù)結(jié)果設置狀態(tài)標志位。用于分支程序。比較指令執(zhí)行結(jié)果影響全部標志位。說明:若OPR1與OPR2為無符號數(shù),OPR1≥OPR2,則CF=0,OF=0;OPR1<OPR2,則CF=1,OF=0。

若OPR1、OPR2為有符號數(shù),OPR1與OPR2符號相同則OF=0,根據(jù)SF判其大小。若OPR1-OPR2為有符號數(shù),執(zhí)行OPR1-OPR2后,SF=0并且OF=0,或者SF=1并且OF=1,即SFOF=0,則OPR1≥OPR2;若SF=0并且OF=1(負數(shù)減正數(shù),溢出),或者SF=1并且OF=0(負數(shù)減正數(shù),未溢出),即SFOF=1,則OPR1<OPR2。

3.乘法指令乘法指令包括無符號數(shù)乘法、帶符號數(shù)乘法兩種。(1)MUL無符號乘法指令格式:MULSRC;B/W執(zhí)行的操作:字節(jié)操作數(shù):AXAL(SRC)

字操作數(shù):DX、AXAX(SRC)

該指令要求被乘數(shù)必須存放在AL或AX中,乘數(shù)必須放在寄存器或存儲器單元中,不能是立即數(shù)。乘積存放在AX或DX、AX中。

(2)IMUL有符號數(shù)乘法指令格式:IMULSRC

執(zhí)行的操作:字節(jié)操作數(shù):AXAL(SRC)

字操作數(shù):DX、AXAX(SRC)

該指令與MUL指令字操作一樣,僅操作數(shù)為有符號數(shù)。指令的形式與MUL相同。無符號數(shù)和有符號數(shù)的乘法指令的執(zhí)行結(jié)果是不同的。

4.除法指令(1)DIV無符號數(shù)除法指令格式:DIVSRC執(zhí)行的操作:16位被除數(shù),除數(shù)為8位:

AL(商)

AX/(SRC)AH(余數(shù))

AX/(SRC)32位被除數(shù),除數(shù)為16位:

AX(商)

DX、AX/(SRC)DX(余數(shù))

DX、AX/(SRC)DIV指令的形式同MUL指令,DIV指令的被除數(shù)、除數(shù)、商和余數(shù)全部為無符號數(shù)。全部為有符號數(shù)。

(2)IDIV有符號數(shù)除法指令格式:IDIVSRC執(zhí)行的操作:帶符號16位被除數(shù),帶符號除數(shù)為8位:

AL(商)

AX/(SRC)AH(余數(shù))AX/(SRC)

帶符號32位被除數(shù),帶符號除數(shù)為16位:

AX(商)

DX、AX/(SRC) DX(余數(shù))

DX、AX/(SRC)

IDIV指令的形式同MUL指令,IDIV指令的被除數(shù)、除數(shù)、商和余數(shù)全部為有符號數(shù)。

(3)CBW字節(jié)轉(zhuǎn)換為字指令格式:CBW

執(zhí)行的操作:將AL中的內(nèi)容按其符號擴展到AH中,成為一個16位數(shù),即將AL中的字節(jié)數(shù)值按符號擴展成AX中的字。(4)CWD字轉(zhuǎn)換為雙字指令格式:CWD

執(zhí)行的操作:AX的內(nèi)容按符號擴展到DX。即當AX的最高有效位0,則DX=0000;如AX的最高位有效位為1,則DX=0FFFFH。CBW和CWD指令執(zhí)行結(jié)果都不影響標志位。(5)十進制調(diào)整指令加、減、乘法十進制調(diào)整指令的實質(zhì)是對二進制形式的運算結(jié)果進行修正,從而得到BCD碼表示的十進制數(shù)的形式;

DAA加法十進制調(diào)整指令①格式:DAA

執(zhí)行的操作:AL把AL中的和調(diào)整為壓縮的BCD碼。若(AL∧0FH)>9或AF=1,則ALAL+06H,AF1

若AL>9FH或CF=1,則ALAL+60H,CF1說明:該指令在ADD或ADC指令后使用,而且和一定放在AL寄存器中。

②DAS減法十進制調(diào)整指令格式:DAS執(zhí)行的操作:AL把AL中的差調(diào)整為壓縮的BCD碼格式。若(AL∧0FH)>9或AF=1,則ALAL-6,AF1

若AL>9FH或CF=1,則ALAL-60H,CF1

說明:該指令在SUB或SBB指令后使用,并且差一定在AL寄存器中。③AAA加法ASCⅡ調(diào)整指令格式:AAA

執(zhí)行的操作:將AL中的兩個非壓縮BCD碼之和調(diào)整非壓縮BCD碼,結(jié)果送AX。在ADD或ADC指令之后使用,并且結(jié)果在AL中。若(AL∧0FH)>9或AF=1,則ALAL+06H,AHAH+1,AF1,CFAF;否則ALAL∧0FH,AF0,CFAF

④AAS減法ASCII調(diào)整指令格式:AAS

執(zhí)行的操作:將AL中的兩個非壓縮BCD碼的差調(diào)整成非壓縮BCD碼,結(jié)果送AX。若(AL∧0FH)>9或AF=1,則ALAL-06H,AHAH-1,AF1,CFAF

否則ALAL∧0FH,AF0,AFCF⑤AAM非壓縮BCD碼乘法調(diào)整指令 格式:AAM

執(zhí)行的操作:將AL中兩個非壓縮BCD碼之積調(diào)整成非壓縮BCD碼,結(jié)果送AX。

即:AHAL/0AH(商),ALAL/0AH(余數(shù))。

⑥AAD非壓縮BCD碼除法調(diào)整指令 格式:AAD

執(zhí)行的操作:在除法運算前,必須用AAD指令把AX中的非壓縮BCD碼被除數(shù)調(diào)整為二進制數(shù),即執(zhí)行下面操作:AL10×AH+AL,AH0。4.3.3邏輯運算和移位指令邏輯運算類指令包括邏輯與、邏輯或、邏輯非、邏輯異或及按位測試。位操作指令可對字節(jié)或字進行操作,并且按位進行。1.邏輯運算指令(1)AND邏輯與指令格式:ANDDST,SRC;B/W

執(zhí)行的操作:(DST)(DST)∧(SRC)

對兩個操作數(shù)按位作“與”運算。根據(jù)執(zhí)行結(jié)果影響SF、ZF和PF標志位。且置OF和CF為0。

AND指令通常用于使某個操作數(shù)中的若干位維持不變,而使另外若干為0的情況,也稱為屏蔽某些位。(2)OR邏輯或指令格式:ORDST,SRC;B/W

執(zhí)行的操作:(DST)(DST)∨(SRC)

對兩個操作數(shù)按位作“或”運算。執(zhí)行結(jié)果影響SF、ZF和PF標志位,使CF=0,OF=0。OR邏輯指令的形式同AND指令。

(3)NOT邏輯非指令格式:NOTOPR;B/W執(zhí)行的操作:(OPR)()對操作數(shù)所指定的內(nèi)容按位求反。不影響任何標志位。

(4)XOR“異或”指令格式:XORDST,SRC;B/W

執(zhí)行的操作:(DST)(DST)(SRC)

對操作數(shù)所指定的內(nèi)容按位求異或運算。執(zhí)行結(jié)果影響SF、ZF和PF標志位,且CF=0,OF=0。XOR邏輯指令的具體形式同AND指令。

XOR指令執(zhí)行后也可使某個操作數(shù)中的若干位維持不變,而若干位取反。

(5)TEST測試指令 格式:TESTOPR1,OPR2;B/W

執(zhí)行的操作:(OPR1)∧(OPR2)

對兩個操作數(shù)所指定的內(nèi)容按位相與運算,結(jié)果不保存,只根據(jù)其特征置相應狀態(tài)標志位。XOR邏輯指令的具體形式同AND指令。對應要測試的位將源操作數(shù)中相應位設為“1”,其余位為0,然后用條件轉(zhuǎn)換指令來判斷ZF位是否為1。2.移位指令(1)邏輯/算術(shù)左移指令格式:SHL/SALOPR,CNT;B/W

執(zhí)行的操作:指令按照OPR指定的移位次數(shù)對目的操作數(shù)進行左移位,移位結(jié)果送OPR,最高位移出的位進入標志位CF中。CNT移位次數(shù),CNT只能是1或CL。SHL/SAL指令的形式如表4-15所示。8086時移位次數(shù)>1必須先送CL,286以上可以直接在指令中給出。

(2)SHR邏輯右移指令格式:SHROPR,CNT;B/W

執(zhí)行的操作:指令按照OPR指定的移位次數(shù)對目的操作數(shù)進行右移位,移位結(jié)果送OPR,D0位移出的位進入標志位CF中。CNT移位次數(shù),CNT只能是1或CL。

(3)SAR算術(shù)右移 格式:SAROPR,CNT;B/W

執(zhí)行的操作:最高有效位保持不變并同時右移(稱符號復制)。與SHL/SAL指令相同。對于有符號數(shù),執(zhí)行SAR指令一次相當于除以2。

(4)ROL循環(huán)左移指令格式:ROLOPR,CNT;B/W執(zhí)行的操作:ROL為不通過進位位的循環(huán)左移指令,從操作數(shù)的一端移出來的位循環(huán)地進入該操作數(shù)的另一端。

(5)ROR循環(huán)右移指令格式:ROROPR,CNT;B/W執(zhí)行的操作:ROR為不通過進位位的循環(huán)右移指令,從操作數(shù)的一端移出來的位循環(huán)地進入該操作數(shù)的另一端。

(6)RCL帶進位循環(huán)左移指令格式:RCLOPR,CNT;B/W執(zhí)行的操作:RCL操作數(shù)連同CF一起循環(huán)左移指令。(7)RCR帶進位循環(huán)右移指令格式:RCROPR,CNT;B/W執(zhí)行的操作:RCR操作數(shù)連同CF一起循環(huán)右移指令。

1.無條件轉(zhuǎn)移指令指令格式:JMPOPRD使程序無條件地從當前位置轉(zhuǎn)移到由指令操作數(shù)所指定的目的地址,并開始執(zhí)行程序。其中操作數(shù)所代表的目的地址可以利用各種尋址方式得到。(1)段內(nèi)直接轉(zhuǎn)移格式:JMPNEARPTROPR JMPSHORTOPR

執(zhí)行的操作:IPIP+16位位移量

IPIP+8位位移量轉(zhuǎn)移目標地址OPR,在匯編格式中可直接使用符號地址(稱為標號)來表示。

(2)段內(nèi)間接尋址格式:JMPWORDPTROPR

執(zhí)行的操作:IP(EA)

其中有效地址EA值由OPR的尋址方式確定。尋址方式可使用通用寄存器或存儲器單元的操作數(shù)方式。

(3)段間直接轉(zhuǎn)移格式:JMPFARPTROPR執(zhí)行的操作:IPOPR偏移地址,CSOPR所在的段基址

OPR為轉(zhuǎn)向的符號地址,F(xiàn)ARPTR是表示段間轉(zhuǎn)移的操作符。

(4)段間間接轉(zhuǎn)移格式:JMPDWORDPTROPR

執(zhí)行的操作:IP(EA),CS(EA+2)

其中EA由OPR尋址方式確定。它只能采用存儲器尋址方式,即轉(zhuǎn)移地址的偏移地址和段地址只能存放在存儲器的相鄰四個字節(jié)存儲單元中。DWORDPTR為雙字操作符,說明轉(zhuǎn)向地址需取雙字(一個字表示偏移量,一個字表示段基址)。用存儲器中的二個相繼字單元的內(nèi)容來取代IP和CS寄存器中的原先內(nèi)容,以達到段間轉(zhuǎn)移的目的。

2.條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令有18條,轉(zhuǎn)移的條件依據(jù)對狀態(tài)標志位和IF控制標志位共7個標志的判斷??蓪σ粋€標志位進行判斷,也可對兩個甚至三個標志位進行判斷。

3.LOOP循環(huán)指令(1)LOOPOPR測試條件:CX≠0,跳轉(zhuǎn)OPR(2)LOOPZ/LOOPEOPR

測試條件:CX≠0且ZF=1(結(jié)果為零/兩者相等),跳轉(zhuǎn)OPR(3)LOOPNZ/LOOPNEOPR

測試條件:CX≠0且ZF=0(結(jié)果不為零/兩者不相等),跳轉(zhuǎn)OPR

三條指令的執(zhí)行步驟是:①CXCX-1②檢查是否滿足測試條件,如滿足則IPIP+D8。OPR是跳轉(zhuǎn)的目的標號。其中8位位移量D8是轉(zhuǎn)向地址與當前IP值的差。由于是8位,所以轉(zhuǎn)向指令地址的范圍為-128~+127字節(jié)。4.子程序調(diào)用子程序調(diào)用時,系統(tǒng)將自動保護返回地址,以使調(diào)用結(jié)束后返回調(diào)用程序。(1)段內(nèi)調(diào)用格式1:CALL<子程序名>;段內(nèi)直接調(diào)用操作1:SP(SP)-2,(SP)+1、(SP)IP,IPIP+DISP16格式2:CALL<REG/MEM>;段內(nèi)間接調(diào)用操作2:SP(SP)-2,(SP)+1、(SP)IP,IP(REG)或IP(MEM)

DISP16為十六位偏移量,REG為寄存器,MEM為存儲單元,段內(nèi)間接調(diào)用子程序入口地址存放在REG或MEM中。段內(nèi)調(diào)用是將IP指向子程序的入口地址,從而進入子程序。(2)段間調(diào)用格式1: CALLFARPRT<子程序名>操作1:SP(SP)-2,(SP)+1、(SP)CSSP(SP)-2,(SP)+1、(SP)IPIP子程序名對應的偏移量,CS子程序所在段的段基址格式2:CALLDWORDPRT<MEM>操作2:SP(SP)-2,(SP)+1、(SP)CS SP(SP)-2,(SP)+1、(SP)IPIP(EA),CS(EA+2)

段間直接調(diào)用先保護當前斷點CS和IP入棧,再將子程序所在段的段基址送CS寄存器,子程序入口偏移量送IP寄存器。(3)段內(nèi)返回格式:RET操作:IP(SP)+1、(SP) SP(SP)+2(4)段間返回格式:RET操作:IP(SP)+1、(SP),SP(SP)+2 CS(SP)+1、(SP),SP(SP)+2

子程序結(jié)束之前必須要有一條RET指令,才能保證調(diào)用程序正確返回調(diào)用處。段內(nèi)返回,系統(tǒng)自動從堆棧頂部彈出一個字的內(nèi)容,送到IP寄存器,使子程序返回到主程序中CALL指令的下一條指令。段間返回時系統(tǒng)自動地從堆棧頂部彈出兩個字的內(nèi)容,分別送到IP和CS寄存器中。5.中斷指令(1)中斷指令格式:INTtype

溫馨提示

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

評論

0/150

提交評論