




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章第三章 8048680486微處理器指令系統(tǒng)微處理器指令系統(tǒng) 第一節(jié)第一節(jié)8048680486微處理器尋址方式微處理器尋址方式 第二節(jié)第二節(jié) 8048680486微處理器指令系統(tǒng)微處理器指令系統(tǒng) 第一節(jié)第一節(jié)8048680486微處理器的尋址方式微處理器的尋址方式 一、操作數(shù)尋址方式一、操作數(shù)尋址方式 要使微處理器能夠完成指令規(guī)定的操作,則指令中須包含要使微處理器能夠完成指令規(guī)定的操作,則指令中須包含2 2種信種信 息,一是執(zhí)行什么操作,二是該操作所涉及的數(shù)據(jù)在哪里和結(jié)果存息,一是執(zhí)行什么操作,二是該操作所涉及的數(shù)據(jù)在哪里和結(jié)果存 于何處,而于何處,而尋找操作數(shù)所在地址尋找操作數(shù)所在地址
2、的方法即為的方法即為尋址方式尋址方式(Addressing (Addressing Mode)Mode)。80X8680X86的尋址方式可分為兩類:的尋址方式可分為兩類:操作數(shù)的尋址方式操作數(shù)的尋址方式和和轉(zhuǎn)移地轉(zhuǎn)移地 址的尋址方式址的尋址方式。 由于由于操作數(shù)操作數(shù)作為指令的操作對象,作為指令的操作對象,可以存儲在存儲器中可以存儲在存儲器中(稱為存(稱為存 儲器操作數(shù))、儲器操作數(shù))、寄存在寄存器中寄存在寄存器中(稱為寄存器操作數(shù))或(稱為寄存器操作數(shù))或直接包含在直接包含在 指令中指令中(稱為立即數(shù)),因此,與之對應(yīng)有多種尋址方式。(稱為立即數(shù)),因此,與之對應(yīng)有多種尋址方式。80X868
3、0X86粗粗 略地劃分可有略地劃分可有3 3類類1010種尋址方式種尋址方式,其中訪問存儲器操作數(shù)有,其中訪問存儲器操作數(shù)有8 8種尋址方種尋址方 式。式。 (1 1)立即數(shù)尋址)立即數(shù)尋址 在這種尋址的方式下,操作數(shù)作為立即數(shù)直接存在指令中,可為在這種尋址的方式下,操作數(shù)作為立即數(shù)直接存在指令中,可為 8 8位,位,1616位和位和3232位。位。 例:例: MOV AXMOV AX,1234H1234H MOV BL MOV BL,78H78H MOV ECX MOV ECX,12345678H12345678H 以第一條指令為例的立即以第一條指令為例的立即 數(shù)尋址方式的執(zhí)行過程如圖。數(shù)尋
4、址方式的執(zhí)行過程如圖。 立即尋址示意圖立即尋址示意圖 (2 2)寄存器尋址)寄存器尋址 在這種方式下,操作數(shù)存放在在這種方式下,操作數(shù)存放在CPUCPU某個某個8 8位、位、1616位或位或32 32 位寄存器中。位寄存器中。 例:例: MOV EAXMOV EAX,EDXEDX INC CL INC CL MOV DS MOV DS,AXAX 該尋址方式指令碼短,且無需從存儲該尋址方式指令碼短,且無需從存儲 器取操作數(shù),故執(zhí)行速度快器取操作數(shù),故執(zhí)行速度快 (3 3)直接尋址)直接尋址 在這種方式下,指令中的操作在這種方式下,指令中的操作 數(shù)部分直接給出了操作數(shù)的有效地數(shù)部分直接給出了操作數(shù)
5、的有效地 址址EAEA,它和操作碼一起放在存儲器,它和操作碼一起放在存儲器 的代碼段中,可以是的代碼段中,可以是1616位或位或3232位整位整 數(shù)。但操作數(shù)一般在數(shù)據(jù)段數(shù)。但操作數(shù)一般在數(shù)據(jù)段DSDS中。中。 例:例:MOV AXMOV AX,DSDS:1000H1000H ;將;將DSDS段中段中1000H1000H和和1001H1001H單元單元 的內(nèi)容送到的內(nèi)容送到AXAX中。中。 應(yīng)注意的是,指令中的應(yīng)注意的是,指令中的DSDS不能省略。不能省略。 直接尋址示意圖直接尋址示意圖 (4 4)寄存器間接尋址)寄存器間接尋址 這種尋址方式下,操作數(shù)所在內(nèi)存單元的這種尋址方式下,操作數(shù)所在內(nèi)
6、存單元的EAEA由規(guī)定的寄存器指出。由規(guī)定的寄存器指出。 如果操作數(shù)不在上述規(guī)定的默認(rèn)段,而是在其他的段,則必如果操作數(shù)不在上述規(guī)定的默認(rèn)段,而是在其他的段,則必 須在指令中相應(yīng)的操作數(shù)前加上須在指令中相應(yīng)的操作數(shù)前加上段超越前綴段超越前綴。例如:。例如: MOV AXMOV AX,ESES:SISI MOV AXMOV AX,DSDS:BPBP 1616位尋址時,位尋址時,EAEA可以由可以由SISI,DIDI,BPBP或或BXBX提供。提供。 若以若以SISI,DIDI,BXBX間接尋址,則默認(rèn)操作數(shù)在間接尋址,則默認(rèn)操作數(shù)在DSDS段中。段中。 若以若以BPBP間接尋址,則默認(rèn)操作數(shù)在間
7、接尋址,則默認(rèn)操作數(shù)在SSSS段中。段中。 32 32位尋址時,位尋址時,8 8個個3232位通用寄存器均可作間址寄存器。位通用寄存器均可作間址寄存器。除除ESPESP, EBPEBP默認(rèn)段寄存器為默認(rèn)段寄存器為SSSS外,其余外,其余6 6個通用寄存器均默認(rèn)段寄存器為個通用寄存器均默認(rèn)段寄存器為DSDS。 (5 5)寄存器相對尋址方式)寄存器相對尋址方式 在這種方式中,操作數(shù)所在內(nèi)存單元的有效地址為規(guī)定的基址寄存器在這種方式中,操作數(shù)所在內(nèi)存單元的有效地址為規(guī)定的基址寄存器 或變址寄存器的內(nèi)容與一個常量(即位移量)之和?;蜃冎芳拇嫫鞯膬?nèi)容與一個常量(即位移量)之和。 1616位尋址時,位尋址
8、時,BXBX和和BPBP作為基址寄存器,作為基址寄存器,BXBX默認(rèn)默認(rèn)DSDS為段寄存器,為段寄存器,BPBP默認(rèn)默認(rèn)SSSS為段為段 寄存器;寄存器;SISI和和DIDI作為變址寄存器,默認(rèn)作為變址寄存器,默認(rèn)DSDS為段寄存器。為段寄存器。位移量可以為位移量可以為8 8位或位或1616位。位。 3232位尋址時,位尋址時,8 8個個3232位通用寄存器均可作基址位通用寄存器均可作基址/ /變址寄存器,變址寄存器,其中其中ESPESP、 EBPEBP以以SSSS為默認(rèn)段寄存器,其余為默認(rèn)段寄存器,其余6 6個通用寄存器均以個通用寄存器均以DSDS為默認(rèn)段寄存器。為默認(rèn)段寄存器。位位 移量可
9、以為移量可以為8 8位或位或3232位。位。 例如:例如: MOV EAXMOV EAX,BX+24 BX+24 ;也可以寫成;也可以寫成 MOV EAXMOV EAX,24BX24BX MOV DX MOV DX ,EAX+1500EAX+1500;也可以寫成;也可以寫成 MOV DXMOV DX,1500EAX1500EAX 在指令格式中,地址表達(dá)式寫成:在指令格式中,地址表達(dá)式寫成: 段寄存器:段寄存器: 基址寄存器基址寄存器 / / 變址寄存器變址寄存器 + + 位移量位移量 或:或:段寄存器:位移量段寄存器:位移量 基址寄存器基址寄存器 / / 變址寄存器變址寄存器 (6 6)基址變
10、址尋址方式)基址變址尋址方式 操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容之和。操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容之和。 在指令格式中,地址表達(dá)式寫成:在指令格式中,地址表達(dá)式寫成: 段寄存器:段寄存器: 基址寄存器基址寄存器 + + 變址寄存器變址寄存器 在這種方式中,基址寄存器和變址寄存器都必須是規(guī)定的在這種方式中,基址寄存器和變址寄存器都必須是規(guī)定的1616位寄存器。位寄存器。 當(dāng)基址寄存器和變址寄存器默認(rèn)的段寄存器不同時,一般規(guī)定由基址寄存器當(dāng)基址寄存器和變址寄存器默認(rèn)的段寄存器不同時,一般規(guī)定由基址寄存器 來決定默認(rèn)哪一個段寄存器作段基址指針。來決定默認(rèn)
11、哪一個段寄存器作段基址指針。 (7 7)相對基址變址尋址方式)相對基址變址尋址方式 該方式中,操作數(shù)所在內(nèi)存單元的有效地址是一個基址寄存器與該方式中,操作數(shù)所在內(nèi)存單元的有效地址是一個基址寄存器與 一個變址寄存器的內(nèi)容和一個常量(即位移量)之和。一個變址寄存器的內(nèi)容和一個常量(即位移量)之和。 在指令格式中,地址表達(dá)式寫成:在指令格式中,地址表達(dá)式寫成: 段寄存器:段寄存器: 基址寄存器基址寄存器 / / 變址寄存器變址寄存器 + + 位移量位移量 或:或:段寄存器:位移量段寄存器:位移量 基址寄存器基址寄存器 / / 變址寄存器變址寄存器 或:或:段寄存器:位移量段寄存器:位移量 基址寄存器
12、基址寄存器 變址寄存器變址寄存器 這種尋址方式主要用于二維數(shù)組操作和二重循環(huán)等。這種尋址方式主要用于二維數(shù)組操作和二重循環(huán)等。 (8 8)比例變址尋址方式)比例變址尋址方式 這種尋址方式只適合于這種尋址方式只適合于3232位尋址的一種情況。位尋址的一種情況。 MOV EAX TABLEESIMOV EAX TABLEESI* *4 4 ;TABLETABLE是位移量,是位移量,4 4是比例因子是比例因子 操作數(shù)的操作數(shù)的EAEA是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上位移量之和。是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上位移量之和。 在指令格式中,地址表達(dá)式寫成:在指令格式中,地
13、址表達(dá)式寫成: 段寄存器:段寄存器: 變址寄存器變址寄存器 比例因子比例因子 位移量位移量 或:段寄存器:位移量或:段寄存器:位移量 變址寄存器變址寄存器 比例因子比例因子 其中比例因子可以是其中比例因子可以是1 1,2 2,4 4,8 8中的任一個數(shù)。中的任一個數(shù)。除除ESPESP外的任何通用寄外的任何通用寄 存器均可作變址寄存器,且存器均可作變址寄存器,且EBPEBP默認(rèn)默認(rèn)SSSS作段寄存器,其余以作段寄存器,其余以DSDS作段寄存器。作段寄存器。 該方式適用于對一維數(shù)組的數(shù)組元素進(jìn)行檢索操作。位移量表示數(shù)組起該方式適用于對一維數(shù)組的數(shù)組元素進(jìn)行檢索操作。位移量表示數(shù)組起 始地址的偏移量
14、,變址表示數(shù)組元素的下標(biāo),可變。當(dāng)數(shù)組元素大小為始地址的偏移量,變址表示數(shù)組元素的下標(biāo),可變。當(dāng)數(shù)組元素大小為2 2,4 4, 8 8時,用帶比例因子的變址尋址方式更方便、更高效。時,用帶比例因子的變址尋址方式更方便、更高效。 (9 9)基址比例變址尋址方式)基址比例變址尋址方式 操作數(shù)的操作數(shù)的EAEA是變址寄存器的內(nèi)容乘以比例因子再加上基址寄存器的內(nèi)容之和。是變址寄存器的內(nèi)容乘以比例因子再加上基址寄存器的內(nèi)容之和。 在指令格式中,地址表達(dá)式寫成:在指令格式中,地址表達(dá)式寫成: 段寄存器:段寄存器: 變址寄存器變址寄存器 比例因子比例因子 基址寄存器基址寄存器 或:段寄存器:或:段寄存器:
15、基址寄存器基址寄存器 變址寄存器變址寄存器 比例因子比例因子 (1010)相對基址比例變址尋址方式)相對基址比例變址尋址方式 操作數(shù)的操作數(shù)的EAEA是變址寄存器的內(nèi)容乘以比例因子,加上基址寄存器的內(nèi)是變址寄存器的內(nèi)容乘以比例因子,加上基址寄存器的內(nèi) 容,再加上位移量之和。容,再加上位移量之和。 在指令格式中,地址表達(dá)式寫成:在指令格式中,地址表達(dá)式寫成: 段寄存器:段寄存器: 基址寄存器基址寄存器 比例因子比例因子 變址寄存器變址寄存器 位移量位移量 或:段寄存器:位移量或:段寄存器:位移量 基址寄存器基址寄存器 比例因子比例因子 變址寄存器變址寄存器 或:段寄存器:位移量或:段寄存器:位移
16、量 基址寄存器基址寄存器 比例因子比例因子 變址寄存器變址寄存器 訪存操作類型訪存操作類型默認(rèn)段寄默認(rèn)段寄 存器存器 允許超越的段寄存允許超越的段寄存 器器 偏移地址寄存器偏移地址寄存器 取指令代碼取指令代碼CSCS無無(E)IP(E)IP 堆棧操作堆棧操作SSSS無無(E)SP(E)SP 源串?dāng)?shù)據(jù)訪問源串?dāng)?shù)據(jù)訪問DSDSCS, SS ,ES FS ,GSCS, SS ,ES FS ,GS(E)SI(E)SI 目的串?dāng)?shù)據(jù)訪問目的串?dāng)?shù)據(jù)訪問ESES無無(E)DI(E)DI 通用數(shù)據(jù)訪問通用數(shù)據(jù)訪問DSDSCS,SS,ES,FS,GSCS,SS,ES,FS,GS偏移地址偏移地址 以(以(E E)B
17、PBP、(、(E E)SPSP 間接尋址的指令間接尋址的指令 SSSSCS,DS,ES,FS,GSCS,DS,ES,FS,GS偏移地址偏移地址 存儲器尋址時的段約定存儲器尋址時的段約定 若以若以SISI,DIDI,BXBX間接尋址,則默認(rèn)操作數(shù)在間接尋址,則默認(rèn)操作數(shù)在DSDS段中。段中。 若以若以BPBP間接尋址,則默認(rèn)操作數(shù)在間接尋址,則默認(rèn)操作數(shù)在SSSS段中。段中。 ESPESP、EBPEBP以以SSSS為默認(rèn)段寄存器,其余為默認(rèn)段寄存器,其余6 6個通用寄存器均以個通用寄存器均以DSDS為默認(rèn)段寄存器。為默認(rèn)段寄存器。 二、轉(zhuǎn)移地址尋址方式二、轉(zhuǎn)移地址尋址方式 在指令系統(tǒng)中,有一組指
18、令為在指令系統(tǒng)中,有一組指令為程序轉(zhuǎn)移指令程序轉(zhuǎn)移指令。程序轉(zhuǎn)移指令的尋。程序轉(zhuǎn)移指令的尋 址方式涉及如何址方式涉及如何確定轉(zhuǎn)移的目標(biāo)地址確定轉(zhuǎn)移的目標(biāo)地址。目標(biāo)地址可以在段內(nèi),也可以。目標(biāo)地址可以在段內(nèi),也可以 在段外。在段外。 段內(nèi)直接尋址段內(nèi)直接尋址 轉(zhuǎn)移的目標(biāo)地址是當(dāng)前轉(zhuǎn)移的目標(biāo)地址是當(dāng)前IPIP寄存器寄存器的內(nèi)容和一個的內(nèi)容和一個8 8位或位或1616位位位移量之和位移量之和。 指令的匯編語言格式表示為:指令的匯編語言格式表示為: JMP NEAR PTR PROGRMJMP NEAR PTR PROGRM JMP SHORT OUTSET JMP SHORT OUTSET 段內(nèi)間接
19、尋址段內(nèi)間接尋址 該方式中,轉(zhuǎn)移的目標(biāo)地址是寄存器或存儲單元的內(nèi)容。寄存器或該方式中,轉(zhuǎn)移的目標(biāo)地址是寄存器或存儲單元的內(nèi)容。寄存器或 存儲單元的內(nèi)容可以用數(shù)據(jù)尋址方式中除立即數(shù)以外的任何一種尋址方存儲單元的內(nèi)容可以用數(shù)據(jù)尋址方式中除立即數(shù)以外的任何一種尋址方 式取得,所得到的內(nèi)容將用來取代式取得,所得到的內(nèi)容將用來取代IPIP寄存器的值。寄存器的值。 段內(nèi)間接尋址轉(zhuǎn)移指令的匯編格式可以表示為:段內(nèi)間接尋址轉(zhuǎn)移指令的匯編格式可以表示為: JMP CXJMP CX JMP WORD PTR BX+TAB1JMP WORD PTR BX+TAB1 段間直接尋址段間直接尋址 這種尋址方式用于段間轉(zhuǎn)移
20、,指令中直接這種尋址方式用于段間轉(zhuǎn)移,指令中直接提供了目標(biāo)地址提供了目標(biāo)地址的的段基段基 址址和和偏移地址偏移地址,所以,所以, ,只要用只要用指令中指令中指定的指定的偏移地址取代偏移地址取代IPIP寄存器寄存器的內(nèi)的內(nèi) 容,用容,用指令中指令中指定的指定的段基址取代段基址取代CSCS寄存器寄存器的內(nèi)容就完成了從一個段到的內(nèi)容就完成了從一個段到 另一個段的轉(zhuǎn)移操作,另一個段的轉(zhuǎn)移操作, 指令的匯編語言格式可表示為:指令的匯編語言格式可表示為: JMP FAR PTR NEXTJMP FAR PTR NEXT 段間間接尋址段間間接尋址 該方式下,用存儲器中該方式下,用存儲器中兩個相繼字的內(nèi)容兩個
21、相繼字的內(nèi)容來來取代取代IPIP和和CSCS寄存器寄存器中中 的的原始原始內(nèi)容,以達(dá)到內(nèi)容,以達(dá)到段間轉(zhuǎn)移段間轉(zhuǎn)移的目的。這里,存儲單元的地址是由指的目的。這里,存儲單元的地址是由指 令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式取得。令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式取得。 指令的匯編語言格式可表示為:指令的匯編語言格式可表示為: JMP DWORD PTR REL+BXJMP DWORD PTR REL+BX 第二節(jié)第二節(jié) 8048680486微處理器指令系統(tǒng)微處理器指令系統(tǒng) 80X86 80X86的指令系統(tǒng)向上兼容,都是在的指令系統(tǒng)向上兼容,都是在8086
22、8086指令的基礎(chǔ)上發(fā)展形成指令的基礎(chǔ)上發(fā)展形成 的。與的。與8028680286相比,增加了相比,增加了3232位操作和訪問存儲器的位操作和訪問存儲器的3232位尋址方式。位尋址方式。 8048680486可以工作在實(shí)模式、保護(hù)模式和虛擬可以工作在實(shí)模式、保護(hù)模式和虛擬8686模式,為了支持系統(tǒng)模式,為了支持系統(tǒng) 工作模式,指令系統(tǒng)中設(shè)計了系統(tǒng)管理指令、保護(hù)模式控制指令以工作模式,指令系統(tǒng)中設(shè)計了系統(tǒng)管理指令、保護(hù)模式控制指令以 及高級語言支持指令等等。及高級語言支持指令等等。 8048680486的基本指令的基本指令按功能可分為按功能可分為7 7類類:數(shù)據(jù)傳送指令、算術(shù)運(yùn)算指:數(shù)據(jù)傳送指令
23、、算術(shù)運(yùn)算指 令、邏輯運(yùn)算指令、字符串操作指令、控制轉(zhuǎn)移指令、處理器控制令、邏輯運(yùn)算指令、字符串操作指令、控制轉(zhuǎn)移指令、處理器控制 指令和按條件設(shè)置字節(jié)指令。下面分別給予介紹。指令和按條件設(shè)置字節(jié)指令。下面分別給予介紹。 指令類型和格式、指令功能、對操作數(shù)的要求、指指令類型和格式、指令功能、對操作數(shù)的要求、指 令應(yīng)用條件以及對標(biāo)志的影響令應(yīng)用條件以及對標(biāo)志的影響 一一 、數(shù)據(jù)傳送指令、數(shù)據(jù)傳送指令 1)通用數(shù)據(jù)傳送指令:)通用數(shù)據(jù)傳送指令: 基本傳送指令(基本傳送指令(MOV) 格式:格式:MOV 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 例如:例如:MOVBYTE PTR BX,55H ;5
24、5H送給送給BX間址的字節(jié)型單元間址的字節(jié)型單元 MOVBX,55H ;0055H送給送給BX間址的字型單元間址的字型單元 符號擴(kuò)展傳送指令符號擴(kuò)展傳送指令MOVSX(用于帶符號數(shù)擴(kuò)展)(用于帶符號數(shù)擴(kuò)展) 格式:格式:MOVSX 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 例如:例如:MOV DL,-16;DL = F0H MOVSX BX,DL;BX = FFF0H,而,而DH,DL不變不變 零擴(kuò)展傳送指令零擴(kuò)展傳送指令MOVZX (用于無符號數(shù)擴(kuò)展)(用于無符號數(shù)擴(kuò)展) 格式:格式:MOVZX 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 例如:例如:MOVZX EAX,CX ;將;將CX中中
25、16位數(shù)高位加位數(shù)高位加0擴(kuò)展為擴(kuò)展為32位送入位送入EAX MOVSX和和MOVZX這兩條指令常被用于作除法時對被除數(shù)位數(shù)的擴(kuò)展。這兩條指令常被用于作除法時對被除數(shù)位數(shù)的擴(kuò)展。 交換指令交換指令XCHG 格式:格式: XCHG 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 說明:說明: 源操作數(shù)可以是源操作數(shù)可以是8位、位、16位或位或32位的立即數(shù)、寄存器、段寄存器或存儲位的立即數(shù)、寄存器、段寄存器或存儲 器操作數(shù),目標(biāo)操作數(shù)是與源操作數(shù)等長的寄存器、段寄存器(器操作數(shù),目標(biāo)操作數(shù)是與源操作數(shù)等長的寄存器、段寄存器(CS除外)除外) 或存儲器操作數(shù)。或存儲器操作數(shù)。 源操作數(shù)和目標(biāo)操作數(shù)不能同
26、時為存儲器操作數(shù)。如:源操作數(shù)和目標(biāo)操作數(shù)不能同時為存儲器操作數(shù)。如:MOV BP,SI 是非法指令。是非法指令。 源操作數(shù)和目標(biāo)操作數(shù)不能同是段寄存器中,如:源操作數(shù)和目標(biāo)操作數(shù)不能同是段寄存器中,如:MOV DS,ES是非是非 法指令。法指令。 立即數(shù)不能作為目標(biāo)操作數(shù)。如:立即數(shù)不能作為目標(biāo)操作數(shù)。如:MOV 1234H,AX是非法指令。是非法指令。 不能將立即數(shù)直接傳送到段寄存器,如:不能將立即數(shù)直接傳送到段寄存器,如:MOV SS,1000H是非法是非法 指令。指令。 當(dāng)目標(biāo)操作數(shù)為非直接尋址的存儲器操作數(shù)時,如源操作數(shù)是單字節(jié)當(dāng)目標(biāo)操作數(shù)為非直接尋址的存儲器操作數(shù)時,如源操作數(shù)是單
27、字節(jié) 的立即數(shù),則應(yīng)用的立即數(shù),則應(yīng)用PTR運(yùn)算符說明目標(biāo)操作數(shù)的屬性,否則將被默認(rèn)為字運(yùn)算符說明目標(biāo)操作數(shù)的屬性,否則將被默認(rèn)為字 型操作數(shù)。型操作數(shù)。 地址傳送指令地址傳送指令 LEA傳送指令傳送指令 格式:格式: LEA目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 例如:例如:TABLEDB 31H,32H,33H,34H LEA DI,TABLE 等效于等效于 MOV DI,OFFSET TABLE 指針傳送指令指針傳送指令 格式:格式: LDS/LES/LFS/LGS/LSS 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 例如:設(shè)數(shù)據(jù)段有例如:設(shè)數(shù)據(jù)段有 XYZ1 DF1234567890A
28、BH XYZ2 DD56781234H 如此時如此時DS已指向數(shù)據(jù)段:已指向數(shù)據(jù)段: LESEBX,XYZ1 ;ES=1234H,EBX=567890ABH LDSSI,XYZ2 ;DS=5678H,SI=1234H 查表轉(zhuǎn)換指令查表轉(zhuǎn)換指令XLAT 例如:利用查表轉(zhuǎn)換功能實(shí)現(xiàn)一位十六進(jìn)制數(shù)與例如:利用查表轉(zhuǎn)換功能實(shí)現(xiàn)一位十六進(jìn)制數(shù)與ASCII碼的轉(zhuǎn)換。碼的轉(zhuǎn)換。 DATA SEGMENT TAB DB 0123456789ABCDEF NUM DB? ;0F中的任一數(shù)中的任一數(shù) DATA ENDS 代碼段設(shè)置如下指令,可查出與代碼段設(shè)置如下指令,可查出與NUM單元中的數(shù)相對應(yīng)的單元中的數(shù)相對
29、應(yīng)的ASCII編碼:編碼: MOV AX,DATA MOV DS,AX MOV BX,OFFSET TAB MOV AL,NUM XLAT 字節(jié)交換指令字節(jié)交換指令BSWAP 格式:格式:BSWAP 32位寄存器位寄存器 標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令LAHF/SAHF 格式:格式:LAHF 或或 SAHF 2)堆棧指令)堆棧指令 壓棧指令壓棧指令PUSH 格式:格式:PUSH源操作數(shù)源操作數(shù) 彈棧指令彈棧指令POP 格式:格式:POP目標(biāo)操作數(shù)目標(biāo)操作數(shù) 16位標(biāo)志寄存器壓棧位標(biāo)志寄存器壓棧/彈棧指令彈棧指令PUSHF/POPF 格式:格式:PUSHF POPF 32位標(biāo)志寄存器壓棧位
30、標(biāo)志寄存器壓棧/彈棧指令彈棧指令PUSHFD/POPFD 格式:格式:PUSHFD POPFD 全部全部16位通用寄存器壓棧位通用寄存器壓棧/彈棧指令彈棧指令PUSHA/POPA 格式:格式:PUSHA POPA 全部全部32位通用寄存器壓棧位通用寄存器壓棧/彈棧指令彈棧指令PUSHAD/POPAD 格式:格式:PUSHAD POPAD 3 3)I/OI/O指令指令 直接尋址的直接尋址的I / / O指令指令 格式:格式:IN AL/ /AX,PORT OUT PORT,AL/ /AX DX間址的間址的I / / O指令指令 格式:格式:IN AL/ /AX/ /EAX,DX OUT DX,A
31、L/ /AX/ /EAX 二二 、算術(shù)運(yùn)算指令、算術(shù)運(yùn)算指令 1)基本四則運(yùn)算)基本四則運(yùn)算 加法指令加法指令A(yù)DD/ /帶進(jìn)位加法指令帶進(jìn)位加法指令A(yù)DC 格式:格式:ADD目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 源操作數(shù)源操作數(shù) + 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 格式:格式:ADC目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 源操作數(shù)源操作數(shù) + 目標(biāo)操作數(shù)目標(biāo)操作數(shù)CF 減法指令減法指令SUB / /帶借位減法指令帶借位減法指令SBB 格式:格式:SUB目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 源操作數(shù)源操作
32、數(shù) 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 格式:格式:SBB目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 源操作數(shù)源操作數(shù) 目標(biāo)操作數(shù)目標(biāo)操作數(shù)CF 加加1指令指令I(lǐng)NC/ /減減1指令指令DEC/ /求補(bǔ)指令求補(bǔ)指令NEG 格式:格式:INC目標(biāo)操作數(shù);目標(biāo)操作數(shù)目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 目標(biāo)操作數(shù)目標(biāo)操作數(shù) + 1 DEC目標(biāo)操作數(shù);目標(biāo)操作數(shù)目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 1。 求補(bǔ)指令求補(bǔ)指令NEG 格式:格式:NEG目標(biāo)操作數(shù)目標(biāo)操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù) = 0 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 交換加法指令交換加法指令XADD 格式:格式:XADD目標(biāo)操作
33、數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;將源操作數(shù)和目標(biāo)操作數(shù)進(jìn)行互換,然后將源操作數(shù)與目標(biāo)操將源操作數(shù)和目標(biāo)操作數(shù)進(jìn)行互換,然后將源操作數(shù)與目標(biāo)操 作數(shù)之和送給目標(biāo)操作數(shù)。指令執(zhí)行后的源操作數(shù)是指令執(zhí)行前的目標(biāo)作數(shù)之和送給目標(biāo)操作數(shù)。指令執(zhí)行后的源操作數(shù)是指令執(zhí)行前的目標(biāo) 操作數(shù)。操作數(shù)。 比較指令比較指令CMP 格式:格式:CMP 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù) - - 源操作數(shù)源操作數(shù) 比較并交換指令比較并交換指令CMPXCHG 格式格式: CMPXCHG 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ; 將目標(biāo)操作數(shù)與累加器將目標(biāo)操作數(shù)與累加器AL,AX或或
34、EAX比較,若相等則將源操作數(shù)比較,若相等則將源操作數(shù) 傳送到目標(biāo)操作數(shù),否則將目標(biāo)操作數(shù)傳送到累加器。傳送到目標(biāo)操作數(shù),否則將目標(biāo)操作數(shù)傳送到累加器。 無符號數(shù)乘法指令無符號數(shù)乘法指令MUL/ /帶符號數(shù)乘法指令帶符號數(shù)乘法指令I(lǐng)MUL 格式:格式:IMUL源操作數(shù)源操作數(shù) ;EAX/ /AXAL/ /AX源操作數(shù)源操作數(shù) IMUL目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;目標(biāo)操作數(shù);目標(biāo)操作數(shù)目標(biāo)操作數(shù)目標(biāo)操作數(shù)源操作數(shù)源操作數(shù) IMUL目標(biāo)操作數(shù),源操作數(shù),立即數(shù)目標(biāo)操作數(shù),源操作數(shù),立即數(shù) ;在三操作數(shù)格式下,目標(biāo)操作數(shù)只能是在三操作數(shù)格式下,目標(biāo)操作數(shù)只能是16或或32位的通用寄存
35、器,位的通用寄存器, 源操作數(shù)是與目標(biāo)操作數(shù)等長的寄存器操作數(shù)或內(nèi)存操作數(shù),立即數(shù)也源操作數(shù)是與目標(biāo)操作數(shù)等長的寄存器操作數(shù)或內(nèi)存操作數(shù),立即數(shù)也 與它們等長。與它們等長。8位立即數(shù)能自動進(jìn)行符號擴(kuò)展,轉(zhuǎn)換成位立即數(shù)能自動進(jìn)行符號擴(kuò)展,轉(zhuǎn)換成16或或32位的立即數(shù)。位的立即數(shù)。 無符號數(shù)除法無符號數(shù)除法DIV/ /帶符號數(shù)除法帶符號數(shù)除法IDIV 格式:格式: DIV源操作數(shù)源操作數(shù) ; AX/ /DX:AX/ /EDX:EAX源操作數(shù)源操作數(shù) ; ;商:商:AL/ /AX/ /EAX,余數(shù):余數(shù):DL/ /DX/ /EDX IDIV源操作數(shù)源操作數(shù) ;被除數(shù)和除數(shù)都是帶符號數(shù),被除數(shù)和除數(shù)都
36、是帶符號數(shù), ;商和余數(shù)的符號相同。;商和余數(shù)的符號相同。 說明:說明:若除數(shù)為若除數(shù)為0或商過大(超過保存商的累加器容量)時,產(chǎn)生或商過大(超過保存商的累加器容量)時,產(chǎn)生0號中斷號中斷 符號位擴(kuò)展(數(shù)據(jù)寬度變換)指令符號位擴(kuò)展(數(shù)據(jù)寬度變換)指令CBW,CWD,CWDE,CDQ 格式:格式:CBW/CWD/CWDE/CDQ 說明:說明: CBW將將AL中的中的8位帶符號數(shù)帶符號擴(kuò)展為位帶符號數(shù)帶符號擴(kuò)展為16位位AX中。中。 CWD將將AX中的中的16位帶符號數(shù)帶符號擴(kuò)展為位帶符號數(shù)帶符號擴(kuò)展為32位位DX:AX中。中。 CWDE將將AX中的中的16位帶符號數(shù)帶符號擴(kuò)展為位帶符號數(shù)帶符號擴(kuò)
37、展為32位位EAX中。中。 CDQ將將EAX中的中的32位帶符號數(shù)帶符號擴(kuò)展為位帶符號數(shù)帶符號擴(kuò)展為64位位EDX:EAX中。中。 2 2)十進(jìn)制調(diào)整指令)十進(jìn)制調(diào)整指令 格式:格式:DAA ;組合;組合BCD碼數(shù)的加法調(diào)整指令碼數(shù)的加法調(diào)整指令 DAS;組合;組合BCD碼數(shù)的減法調(diào)整指令碼數(shù)的減法調(diào)整指令 AAA;分離;分離BCD碼數(shù)的加法調(diào)整指令碼數(shù)的加法調(diào)整指令 AAS;分離;分離BCD碼數(shù)的減法調(diào)整指令碼數(shù)的減法調(diào)整指令 AAM ;分離;分離BCD碼數(shù)的乘法調(diào)整指令碼數(shù)的乘法調(diào)整指令 AAD;分離;分離BCD碼數(shù)的除法調(diào)整指令碼數(shù)的除法調(diào)整指令 例如:例如: MOV AL,08H AD
38、D AL,09H DAA 結(jié)果結(jié)果: AL = 17D 三、邏輯運(yùn)算指令和移位指令三、邏輯運(yùn)算指令和移位指令 1)邏輯運(yùn)算指令)邏輯運(yùn)算指令 邏輯與邏輯與/ /或或/ /異或指令異或指令 AND/ /OR/ /XOR 格式:格式:AND/OR/XOR 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 測試指令測試指令TEST 格式:格式:TEST目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) 邏輯非指令邏輯非指令NOT 格式:格式:NOT操作數(shù)操作數(shù) 例如例如: 要求屏蔽要求屏蔽0、1兩位,可用兩位,可用AND指令并設(shè)置常數(shù)指令并設(shè)置常數(shù)0FCH MOVAL,0BFH ANDAL,0FH ;結(jié)果;結(jié)果AL=
39、0BCH 要求第要求第5位置位置1,可用,可用OR指令指令 MOVAL,43H ANDAL,20H ;結(jié)果;結(jié)果AL=63H 算術(shù)算術(shù)/邏輯右移指令邏輯右移指令SAR/SHR 格式:格式:SAR/SHR操作數(shù),移位次數(shù)操作數(shù),移位次數(shù) CFCFMSBLSBLSBMSB操作數(shù)操作數(shù)操作數(shù)操作數(shù) 0 2)移位指令)移位指令 算術(shù)算術(shù)/邏輯左移指令邏輯左移指令SAL/SHL 格式:格式:SAL/SHL操作數(shù),移位次數(shù)操作數(shù),移位次數(shù) CF MSBLSB 0 操作數(shù)操作數(shù) 循環(huán)移位指令循環(huán)移位指令ROL/ /ROR/ /RCL/ /RCR 格式:格式:ROL/ROR/RCL/RCR操作數(shù),移位次數(shù)操作
40、數(shù),移位次數(shù) CF CF MSBMSBLSBLSB操作數(shù)操作數(shù)操作數(shù)操作數(shù) RORRCR CFCFMSBLSB LSB操作數(shù)操作數(shù)操作數(shù)操作數(shù) ROLRCL MSB 雙精度左移雙精度左移/ /右移指令右移指令SHLD/ /SHRD 格式:格式:SHLD/SHRDSHLD/SHRD 目標(biāo)操作數(shù),源操作數(shù),移位次數(shù)目標(biāo)操作數(shù),源操作數(shù),移位次數(shù) CFCF CFCF 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 源操作數(shù)源操作數(shù) 源操作數(shù)源操作數(shù) 31 31 3131 00 00 例如:例如: AX=0012H,BX=0034H,將兩寄存器的低,將兩寄存器的低8位組合形成位組合形成AX=1234H M
41、OV CL,8 ROLAX,CL ADDAX,BX 說明:說明: 80486的移位次數(shù)不能大于的移位次數(shù)不能大于31。8086用立即數(shù)作移位次數(shù)時只能是用立即數(shù)作移位次數(shù)時只能是1,但,但 用用CL作移位次數(shù)時可移位作移位次數(shù)時可移位255次。次。 左移指令常用于實(shí)現(xiàn)乘以左移指令常用于實(shí)現(xiàn)乘以2n的操作,右移指令常用于實(shí)現(xiàn)除以的操作,右移指令常用于實(shí)現(xiàn)除以2n的操作。的操作。 操作數(shù)可以是操作數(shù)可以是8位、位、16位或位或32位的寄存器或存儲器操作數(shù),移位次數(shù)可位的寄存器或存儲器操作數(shù),移位次數(shù)可 以用立即數(shù)或以用立即數(shù)或CL寄存器的內(nèi)容指明。寄存器的內(nèi)容指明。 3)位測試指令與位掃描指令)位
42、測試指令與位掃描指令 位測試指令位測試指令 格式:格式:BT目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;測試指定的位并將它拷貝至進(jìn)位標(biāo)志位測試指定的位并將它拷貝至進(jìn)位標(biāo)志位CF CF BTS標(biāo)操作數(shù),源操作數(shù)標(biāo)操作數(shù),源操作數(shù) ;測試指定的位并將它拷貝至進(jìn)位標(biāo)志位;測試指定的位并將它拷貝至進(jìn)位標(biāo)志位CF,再將該位置,再將該位置1 BTR目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;測試指定的位并將它拷貝至進(jìn)位標(biāo)志位;測試指定的位并將它拷貝至進(jìn)位標(biāo)志位CF,再將該位清,再將該位清0 BTC目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;測試指定的位并將它拷貝至進(jìn)位標(biāo)志位測試指定的位并將它拷貝至進(jìn)位標(biāo)志
43、位CFCF,再將該位取反,再將該位取反 向前位掃描指令向前位掃描指令BSF 格式:格式:BSF目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;對源操作數(shù)所指定的字或雙字從右向左進(jìn)行掃描,;對源操作數(shù)所指定的字或雙字從右向左進(jìn)行掃描, 找出第一個是找出第一個是“1”的位,把此位的下標(biāo)放在目標(biāo)操作數(shù)中。的位,把此位的下標(biāo)放在目標(biāo)操作數(shù)中。 向后位掃描指令向后位掃描指令BSR 格式:格式:BSRBSR目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;對源操作數(shù)所指定的字或雙字從左向右進(jìn)行掃描,對源操作數(shù)所指定的字或雙字從左向右進(jìn)行掃描, 找出第一個是找出第一個是“1”的位,把此位的下標(biāo)放在目標(biāo)操作數(shù)中。的位,
44、把此位的下標(biāo)放在目標(biāo)操作數(shù)中。 四、字符串操作指令四、字符串操作指令 1)串傳送指令)串傳送指令 MOVS/ /MOVSB/ /MOVSW/ / MOVSD 格式:格式: MOVS 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ; 把由把由DS:SI(或(或ESI)指向的字節(jié)、字或雙字存儲單元的內(nèi)容)指向的字節(jié)、字或雙字存儲單元的內(nèi)容 復(fù)制到由復(fù)制到由ES:DI (或(或EDI)指向的存儲單元中去。)指向的存儲單元中去。 2)取串指令)取串指令 LODS/ /LODSB/ /LODSW/ / LODSD 格式:格式:LODS 源操作數(shù)源操作數(shù) ;將;將DS:SI (或(或ESI)指向的存儲單元中內(nèi)
45、容取到累加器)指向的存儲單元中內(nèi)容取到累加器AL, AX或或EAX中。中。 3)存串指令)存串指令 STOS/ /STOSB/ /STOSW/ /STOSD 格式:格式:STOS 目標(biāo)操作數(shù)目標(biāo)操作數(shù) ;把累加器;把累加器AL,AX或或EAX的內(nèi)容存到由的內(nèi)容存到由ES:DI(或(或EDI) 指向的字節(jié),字或雙字存儲單元中。指向的字節(jié),字或雙字存儲單元中。 4)串比較指令)串比較指令 CMPS/CMPSB/CMPSW/CMPSD 格式:格式:CMPS目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操作數(shù),源操作數(shù) ;將;將DS:SI(或(或ESI)指向的字節(jié)或字存儲單元的內(nèi)容與由)指向的字節(jié)或字存儲單元的內(nèi)容與由ES
46、:DI (或或EDI)指向的存儲單元的內(nèi)容相比較指向的存儲單元的內(nèi)容相比較(相減相減),比較結(jié)果不保存。,比較結(jié)果不保存。 5)串搜索指令)串搜索指令 SCAS/ /SCASB/ /SCASW/ /SCASD 格式:格式:SCAS 目標(biāo)操作數(shù)目標(biāo)操作數(shù) ;將累加器;將累加器AL,AX或或EAX中的內(nèi)容與由中的內(nèi)容與由ES:DI(或(或EDI)指向的)指向的 字節(jié)或字存儲單元的內(nèi)容相比較(相減),比較結(jié)果不保存。字節(jié)或字存儲單元的內(nèi)容相比較(相減),比較結(jié)果不保存。 6)從端口輸入字符串指令)從端口輸入字符串指令 INSB/INSW/INSD 格式:格式: INSB ;從;從DX指定的端口輸入一
47、個字節(jié)、字或雙字元素傳送到指定的端口輸入一個字節(jié)、字或雙字元素傳送到ES:EDI 所指定的存儲單元,同時自動修改目的指針。所指定的存儲單元,同時自動修改目的指針。 7)向端口輸出字符串)向端口輸出字符串 OUTSB/ /OUTSW/ /OUTSD 格式:格式:OUTSB ;把;把DS:ESI所指定的存儲單元中的字節(jié)、字或雙字傳送給所指定的存儲單元中的字節(jié)、字或雙字傳送給 DX指定的端口。指定的端口。 8)重復(fù)前綴)重復(fù)前綴REP 格式:格式:REP MOVS REP STOS REP OUTS REP INS ;只要;只要CX(ECX)寄存器中的內(nèi)容不為)寄存器中的內(nèi)容不為0,就重復(fù)執(zhí)行,就重
48、復(fù)執(zhí)行REP后的后的 串操作指令。串操作指令。 9)條件重復(fù)前綴)條件重復(fù)前綴 REPE/ /REPZ/ /REPNE/ /REPNZ 格式:格式:REPE/REPZCMPS REPE/REPZSCAS REPNE/REPNZCMPS REPNE/REPNZSCAS REPE/REPZ當(dāng)零標(biāo)志位當(dāng)零標(biāo)志位ZF = 1且且CX(ECX)的內(nèi)容不為)的內(nèi)容不為0時,重復(fù)執(zhí)時,重復(fù)執(zhí) 行它后面的串操作。行它后面的串操作。 REPNE/REPNZ當(dāng)零標(biāo)志位當(dāng)零標(biāo)志位ZF = 0且且CX(ECX)的內(nèi)容不為)的內(nèi)容不為0時,重時,重 復(fù)執(zhí)行它后面的串操作。復(fù)執(zhí)行它后面的串操作。 例如:將數(shù)據(jù)段中長度為例
49、如:將數(shù)據(jù)段中長度為17的字符串的字符串MESS1 轉(zhuǎn)送到附加段轉(zhuǎn)送到附加段MESS2 開始的開始的 地址位置。設(shè)數(shù)據(jù)段和附加段的起始地址為地址位置。設(shè)數(shù)據(jù)段和附加段的起始地址為DATA。 MOVAX,DATA MOVDS,AX MOVES,AX LEASI,MESS1 LEADI,MESS2 MOVCX,17 CLD REPMOVSB 五、控制轉(zhuǎn)移指令五、控制轉(zhuǎn)移指令 1 1)無條件轉(zhuǎn)移指令)無條件轉(zhuǎn)移指令JMPJMP 格式:格式:JMP JMP 目標(biāo)操作數(shù)目標(biāo)操作數(shù) 根據(jù)目標(biāo)地址相對于轉(zhuǎn)移指令執(zhí)行的當(dāng)前位置的轉(zhuǎn)移方式可以分為根據(jù)目標(biāo)地址相對于轉(zhuǎn)移指令執(zhí)行的當(dāng)前位置的轉(zhuǎn)移方式可以分為3 3種
50、種 短轉(zhuǎn)移(短轉(zhuǎn)移(SHORTSHORT):): 在段內(nèi)的短距離(在段內(nèi)的短距離(-128-128127127)轉(zhuǎn)移。)轉(zhuǎn)移。 段內(nèi)轉(zhuǎn)移(段內(nèi)轉(zhuǎn)移(NEARNEAR):目標(biāo)地址與轉(zhuǎn)移指令都在同一段內(nèi)。):目標(biāo)地址與轉(zhuǎn)移指令都在同一段內(nèi)。 段間轉(zhuǎn)移(段間轉(zhuǎn)移(FARFAR):): 目標(biāo)地址與轉(zhuǎn)移指令分別位于不同的段內(nèi),轉(zhuǎn)移目標(biāo)地址與轉(zhuǎn)移指令分別位于不同的段內(nèi),轉(zhuǎn)移 時時CSCS和和IPIP(EIPEIP)中的值都要發(fā)生改變。)中的值都要發(fā)生改變。 JMPJMP指令的三種尋址方式指令的三種尋址方式 直接尋址:在指令中直接給出轉(zhuǎn)移目標(biāo)的地址標(biāo)號,可以實(shí)現(xiàn)段內(nèi)和直接尋址:在指令中直接給出轉(zhuǎn)移目標(biāo)的地址
51、標(biāo)號,可以實(shí)現(xiàn)段內(nèi)和 段間轉(zhuǎn)移。段間轉(zhuǎn)移。 寄存器間接尋址:目標(biāo)操作數(shù)是某一寄存器,在寄存器中存放轉(zhuǎn)移的寄存器間接尋址:目標(biāo)操作數(shù)是某一寄存器,在寄存器中存放轉(zhuǎn)移的 目標(biāo)地址,只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移。目標(biāo)地址,只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移。 存儲器間接尋址:目標(biāo)操作數(shù)是存儲器操作數(shù),在內(nèi)存單元中存放轉(zhuǎn)存儲器間接尋址:目標(biāo)操作數(shù)是存儲器操作數(shù),在內(nèi)存單元中存放轉(zhuǎn) 移的目標(biāo)地址,可以實(shí)現(xiàn)段內(nèi)和段間的轉(zhuǎn)移移的目標(biāo)地址,可以實(shí)現(xiàn)段內(nèi)和段間的轉(zhuǎn)移 。 2 2)條件轉(zhuǎn)移指令)條件轉(zhuǎn)移指令 格式:指令助記符格式:指令助記符 轉(zhuǎn)移地址標(biāo)號轉(zhuǎn)移地址標(biāo)號 常用條件轉(zhuǎn)移指令常用條件轉(zhuǎn)移指令 無符號無符號 數(shù)條件數(shù)條件 轉(zhuǎn)移指轉(zhuǎn)移指
52、令令 指令助記符指令助記符轉(zhuǎn)移條件轉(zhuǎn)移條件 說說 明明 JCJCCF=1CF=1有進(jìn)位轉(zhuǎn)移(與有進(jìn)位轉(zhuǎn)移(與JB/JNAEJB/JNAE重疊)重疊) JNCJNCCF=0CF=0無進(jìn)位轉(zhuǎn)移(與無進(jìn)位轉(zhuǎn)移(與JAE/JNBJAE/JNB重疊)重疊) JP/JPEJP/JPEPF=1PF=1校驗(yàn)為偶轉(zhuǎn)移校驗(yàn)為偶轉(zhuǎn)移 JP/JPOJP/JPOPF=0PF=0校驗(yàn)為奇轉(zhuǎn)移校驗(yàn)為奇轉(zhuǎn)移 JA/JNBEJA/JNBECF=ZF=0CF=ZF=0高于高于/ /不低于或等于轉(zhuǎn)移不低于或等于轉(zhuǎn)移 JAE/JNBJAE/JNBCF=0CF=0高于或等于高于或等于/ /不低于轉(zhuǎn)移不低于轉(zhuǎn)移 JB/JNAEJB/JN
53、AECF=1CF=1低于低于/ /不高于或等于轉(zhuǎn)移不高于或等于轉(zhuǎn)移 JBE/JNAJBE/JNACF=1CF=1或或ZF=1ZF=1低于或等于低于或等于/ /不高于轉(zhuǎn)移不高于轉(zhuǎn)移 JE/JZJE/JZZF=1ZF=1等于等于/ /為零轉(zhuǎn)移為零轉(zhuǎn)移 JNE/JNZJNE/JNZZF=0ZF=0不等于不等于/ /非零轉(zhuǎn)移非零轉(zhuǎn)移 有符號有符號 數(shù)條件數(shù)條件 轉(zhuǎn)移指轉(zhuǎn)移指 令令 指令助記符指令助記符轉(zhuǎn)移條件轉(zhuǎn)移條件 說說 明明 JOJOOF=1OF=1溢出轉(zhuǎn)移溢出轉(zhuǎn)移 JNOJNOOF=0OF=0無溢出轉(zhuǎn)移無溢出轉(zhuǎn)移 JSJSSF=1SF=1為負(fù)數(shù)轉(zhuǎn)移為負(fù)數(shù)轉(zhuǎn)移 JNSJNSSF=0SF=0為正數(shù)轉(zhuǎn)
54、移為正數(shù)轉(zhuǎn)移 JG/JNLEJG/JNLEZF=0ZF=0且且SF=OFSF=OF大于大于/ /不小于或等于轉(zhuǎn)移不小于或等于轉(zhuǎn)移 JGE/JNLJGE/JNLSF=OFSF=OF大于或等于大于或等于/ /不小于轉(zhuǎn)移不小于轉(zhuǎn)移 JL/JNGEJL/JNGESFOFSFOF小于小于/ /不大于或等于轉(zhuǎn)移不大于或等于轉(zhuǎn)移 JLE/JNGJLE/JNGZF=1ZF=1或或SFOFSFOF小于或等于小于或等于/ /不大于轉(zhuǎn)移不大于轉(zhuǎn)移 JCXZJCXZ(CXCX)=0=0CXCX寄存器為零轉(zhuǎn)移寄存器為零轉(zhuǎn)移 說明:說明: 轉(zhuǎn)移范圍在轉(zhuǎn)移范圍在1616位尋址方式下為位尋址方式下為64KB64KB,3232
55、位尋址方式下為位尋址方式下為4GB4GB。 條件轉(zhuǎn)移指令執(zhí)行后,均不影響標(biāo)志位。條件轉(zhuǎn)移指令執(zhí)行后,均不影響標(biāo)志位。 3)循環(huán)控制轉(zhuǎn)移指令)循環(huán)控制轉(zhuǎn)移指令 格式:格式:LOOP 轉(zhuǎn)移地址標(biāo)號轉(zhuǎn)移地址標(biāo)號 LOOPE/LOOPZ 轉(zhuǎn)移地址標(biāo)號轉(zhuǎn)移地址標(biāo)號 LOOPNE/LOOPNZ轉(zhuǎn)移地址標(biāo)號轉(zhuǎn)移地址標(biāo)號 JCXZ轉(zhuǎn)移地址標(biāo)號轉(zhuǎn)移地址標(biāo)號 操作碼轉(zhuǎn)移操作碼轉(zhuǎn)移助記符助記符條件功能條件功能 LOOP(E)CX0若滿足條件則將若滿足條件則將(E)CX減減1, 并轉(zhuǎn)移到標(biāo)號處的指令執(zhí)行并轉(zhuǎn)移到標(biāo)號處的指令執(zhí)行 LOOPE/LOOPZ(E)CX0且且ZF=1若滿足條件則將若滿足條件則將(E)CX減減1
56、, 并轉(zhuǎn)移到標(biāo)號處的指令執(zhí)行并轉(zhuǎn)移到標(biāo)號處的指令執(zhí)行 LOOPNE/LOOPNZ(E)CX0且且ZF=0若滿足條件則將若滿足條件則將(E)CX減減1, 并轉(zhuǎn)移到標(biāo)號處的指令執(zhí)行并轉(zhuǎn)移到標(biāo)號處的指令執(zhí)行 JCXZ(E)CX=0若滿足條件,轉(zhuǎn)移到標(biāo)號處若滿足條件,轉(zhuǎn)移到標(biāo)號處 的指令執(zhí)行的指令執(zhí)行 說明:說明:與條件轉(zhuǎn)移指令相同,該指令的轉(zhuǎn)移地址標(biāo)號必須在距離下一條與條件轉(zhuǎn)移指令相同,該指令的轉(zhuǎn)移地址標(biāo)號必須在距離下一條 指令的指令的-128+127B范圍內(nèi)。范圍內(nèi)。 例如:根據(jù)加法運(yùn)算的結(jié)果做不同的處理,如結(jié)果為例如:根據(jù)加法運(yùn)算的結(jié)果做不同的處理,如結(jié)果為 0 轉(zhuǎn)向轉(zhuǎn)向 KK1,結(jié)果,結(jié)果 為
57、為 1 轉(zhuǎn)向轉(zhuǎn)向 KK2 執(zhí)行。執(zhí)行。 方法方法1: ADDAX,BX JZKK2 ;KK2: 方法方法2: ADDAX,BX JNZKK1 ;KK2 處理程序處理程序 KK1: 4 4)過程調(diào)用指令)過程調(diào)用指令 格式:格式:CALL目標(biāo)操作數(shù)目標(biāo)操作數(shù) ;先將;先將CALL的后繼指令地址(也稱為斷點(diǎn))保存在堆棧中,然后的后繼指令地址(也稱為斷點(diǎn))保存在堆棧中,然后 控制程序轉(zhuǎn)移到目標(biāo)操作數(shù)指定的位置繼續(xù)執(zhí)行??刂瞥绦蜣D(zhuǎn)移到目標(biāo)操作數(shù)指定的位置繼續(xù)執(zhí)行。 段內(nèi)調(diào)用時段內(nèi)調(diào)用時:當(dāng)前的:當(dāng)前的IP(EIP)壓棧,將目標(biāo)地址送給)壓棧,將目標(biāo)地址送給IP(EIP);); 段間調(diào)用時段間調(diào)用時:當(dāng)
58、前的:當(dāng)前的CS和和IP(EIP)壓棧,將目標(biāo)地址的段基址)壓棧,將目標(biāo)地址的段基址 和偏移量送給和偏移量送給CS和和IP(EIP)。)。 CALL指令有指令有3種尋址方式:種尋址方式: 直接尋址:在指令中直接給出被調(diào)用過程的過程名??梢詫?shí)現(xiàn)段內(nèi)和段直接尋址:在指令中直接給出被調(diào)用過程的過程名??梢詫?shí)現(xiàn)段內(nèi)和段 間轉(zhuǎn)移。間轉(zhuǎn)移。 寄存器間接尋址:目標(biāo)操作數(shù)是某一寄存器,在寄存器中存放被調(diào)用過寄存器間接尋址:目標(biāo)操作數(shù)是某一寄存器,在寄存器中存放被調(diào)用過 程的入口地址。只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移。程的入口地址。只能實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移。 存儲器間接尋址:目標(biāo)操作數(shù)是內(nèi)存操作數(shù),在內(nèi)存單元中存放被調(diào)用存儲器間接尋址
59、:目標(biāo)操作數(shù)是內(nèi)存操作數(shù),在內(nèi)存單元中存放被調(diào)用 的子程序入口地址,可以實(shí)現(xiàn)段內(nèi)和段間的轉(zhuǎn)移。的子程序入口地址,可以實(shí)現(xiàn)段內(nèi)和段間的轉(zhuǎn)移。 5)過程返回指令)過程返回指令RET 格式:格式:RET/RET n ;將當(dāng)前堆棧棧頂元素?zé)o條件彈出,作為返回的目標(biāo)地址。若是段內(nèi)返回,;將當(dāng)前堆棧棧頂元素?zé)o條件彈出,作為返回的目標(biāo)地址。若是段內(nèi)返回, 則只彈出偏移地址給則只彈出偏移地址給IP(EIP);若是段間返回,則彈出段基址和偏移地址);若是段間返回,則彈出段基址和偏移地址 給給CS和和IP(EIP)。)。 說明:說明: RET n稱為帶參數(shù)的返回指令,該參數(shù)稱為帶參數(shù)的返回指令,該參數(shù)n必須是立即
60、數(shù)。返回時,堆棧指必須是立即數(shù)。返回時,堆棧指 針除了加上彈出的返回地址的字節(jié)數(shù)以外,還要加上參數(shù)針除了加上彈出的返回地址的字節(jié)數(shù)以外,還要加上參數(shù)n所給出的立即數(shù)。所給出的立即數(shù)。 這個立即數(shù)必須是這個立即數(shù)必須是16位的偶數(shù)。位的偶數(shù)。 如果在執(zhí)行如果在執(zhí)行RET指令之前,棧頂元素仍然是調(diào)用程序的斷點(diǎn)地址,則指令之前,棧頂元素仍然是調(diào)用程序的斷點(diǎn)地址,則RET 指令執(zhí)行后,能夠正確返回調(diào)用程序斷點(diǎn),否則不能。指令執(zhí)行后,能夠正確返回調(diào)用程序斷點(diǎn),否則不能。 近過程和遠(yuǎn)過程中的近過程和遠(yuǎn)過程中的RET指令,格式相同,但匯編后生成的目標(biāo)代碼不一指令,格式相同,但匯編后生成的目標(biāo)代碼不一 樣,前
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新能源車行業(yè)人才培養(yǎng)需求試題及答案
- 幼兒園數(shù)學(xué)測評試題及答案
- 粵語考試題目及答案
- 家具行業(yè)的跨界合作機(jī)會試題及答案
- 義崗期中考試卷及答案
- 電動汽車對比傳統(tǒng)汽車的優(yōu)勢分析試題及答案
- 羽毛球制作試題及答案
- 環(huán)保建設(shè)面試題及答案
- 烘培知識考試題及答案
- 注冊土木工程師考前練習(xí)試題及答案
- 2023年高考?xì)v史真題新高考福建卷試題含答案解析
- 四川省綿陽市東辰學(xué)校2023-2024學(xué)年七年級下學(xué)期3月月考語文卷
- DZ/T 0430-2023 固體礦產(chǎn)資源儲量核實(shí)報告編寫規(guī)范(正式版)
- 禁止編入列車的機(jī)車車輛講解
- 過期妊娠課件
- 【農(nóng)業(yè)技術(shù)推廣探究文獻(xiàn)綜述2300字】
- 新生兒腸脹氣課件
- 加油站清明節(jié)節(jié)前安全教育培訓(xùn)
- 專題17浮力與液面升降問題(選擇、填空題)- 中考物理一輪復(fù)習(xí)專題練習(xí)(解析版)
- 《公路工程經(jīng)濟(jì)》簡課件
- 《醫(yī)學(xué)綜述的撰寫》課件
評論
0/150
提交評論