




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第3 3章章 3232位微處理器指令系統(tǒng)位微處理器指令系統(tǒng) 3.1 323.1 32位指令運(yùn)行環(huán)境位指令運(yùn)行環(huán)境 3.2 3.2 尋址方式尋址方式 3.3 323.3 32位微處理器指令系統(tǒng)概述位微處理器指令系統(tǒng)概述 3.4 3.4 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 3.5 3.5 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 3.6 3.6 邏輯運(yùn)算指令邏輯運(yùn)算指令3.7 3.7 移位指令移位指令3.8 3.8 字符串操作指令字符串操作指令 3.9 3.9 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令 3.10 3.10 符號擴(kuò)展指令符號擴(kuò)展指令 3.11 3.11 處理機(jī)控制指令處理機(jī)控制指令 3.1 323.1 32位指令運(yùn)行環(huán)境位
2、指令運(yùn)行環(huán)境 1.1.1616位段位段 32 32位位X86 CPUX86 CPU還可以使用還可以使用3232位寄存器和位寄存器和3232位尋位尋址方式,處理址方式,處理3232位數(shù)據(jù)及執(zhí)行位數(shù)據(jù)及執(zhí)行3232位的新增指令,但位的新增指令,但是,段基地址和偏移量都只用是,段基地址和偏移量都只用1616位,位,6 6個(gè)段寄存器仍個(gè)段寄存器仍然當(dāng)作然當(dāng)作1616位的段寄存器使用,對于偏移地址來說,位的段寄存器使用,對于偏移地址來說,如果是如果是3232位,則高位,則高1616位應(yīng)該為位應(yīng)該為0 0,只有低,只有低1616位偏移位偏移地址有效,相當(dāng)于可以進(jìn)行地址有效,相當(dāng)于可以進(jìn)行3232位數(shù)處理的
3、快速位數(shù)處理的快速80868086,所以稱之為所以稱之為“1616位段位段”。 2. 2. 3232位段位段 32 32位位 X86 CPUX86 CPU由實(shí)地址模式可以進(jìn)入保護(hù)工作由實(shí)地址模式可以進(jìn)入保護(hù)工作模式,它是一個(gè)增強(qiáng)了模式,它是一個(gè)增強(qiáng)了8028680286保護(hù)模式功能的保護(hù)模式功能的3232位位保護(hù)工作模式。在保護(hù)工作模式下,保護(hù)工作模式。在保護(hù)工作模式下,3232位微處理器位微處理器不僅具有段式存儲器管理功能,而且還有頁式存儲不僅具有段式存儲器管理功能,而且還有頁式存儲器管理功能,支持虛擬存儲器,段基地址和段內(nèi)偏器管理功能,支持虛擬存儲器,段基地址和段內(nèi)偏移量都是移量都是323
4、2位,稱之為位,稱之為“3232位段位段” ” 。3.2 3.2 尋址方式尋址方式 3.2.1 3.2.1 尋址方式概述尋址方式概述 一條指令包含操作碼和操作數(shù)兩部分,操作碼一條指令包含操作碼和操作數(shù)兩部分,操作碼(指令助記符)指出該指令要進(jìn)行的操作,操作數(shù)(指令助記符)指出該指令要進(jìn)行的操作,操作數(shù)指出該指令需要的操作數(shù)或操作數(shù)的地址。操作數(shù)指出該指令需要的操作數(shù)或操作數(shù)的地址。操作數(shù)在計(jì)算機(jī)中的位置及存取方式見表在計(jì)算機(jī)中的位置及存取方式見表3-13-1。 數(shù)據(jù)存放的位置數(shù)據(jù)存放的位置存取方式存取方式寄存器寄存器CPUCPU可直接存取可直接存取外設(shè)(接口)外設(shè)(接口)用用ININ、OUTO
5、UT指令輸入指令輸入/ /輸出輸出內(nèi)存內(nèi)存在內(nèi)存的數(shù)據(jù)段、附加數(shù)據(jù)段或堆棧段,在內(nèi)存的數(shù)據(jù)段、附加數(shù)據(jù)段或堆棧段,可利用存儲器尋址的各種尋址方式存取可利用存儲器尋址的各種尋址方式存取在內(nèi)存的代碼段(立即尋址)在內(nèi)存的代碼段(立即尋址)表表3-1 3-1 操作數(shù)在計(jì)算機(jī)中的位置及存取方式操作數(shù)在計(jì)算機(jī)中的位置及存取方式 指令根據(jù)一定的方式,先找指令根據(jù)一定的方式,先找到存儲操作數(shù)的空間地址,然后到存儲操作數(shù)的空間地址,然后取出操作數(shù)進(jìn)行處理。尋找操作取出操作數(shù)進(jìn)行處理。尋找操作數(shù)的方式稱為數(shù)的方式稱為尋址方式尋址方式。 尋址方式:尋址方式: 操作數(shù)地址由操作數(shù)地址由 段基址段基址 和和 段內(nèi)偏移
6、地址段內(nèi)偏移地址共同產(chǎn)生。共同產(chǎn)生。 段基址由段基址寄存器提供,有段基址由段基址寄存器提供,有CSCS、SSSS、DSDS、ESES、FSFS和和GSGS。 段內(nèi)偏移地址也稱為有效地址段內(nèi)偏移地址也稱為有效地址EAEA(effective addresseffective address),),3232位有效地址的位有效地址的公式是:公式是:EA=EA=基址基址+ +(變址(變址* *比例因子)比例因子)+ + 位移量位移量 32 32位尋址方式:段寄存器、基址寄存器、變址位尋址方式:段寄存器、基址寄存器、變址寄存器、比例因子和位移量的關(guān)系見表寄存器、比例因子和位移量的關(guān)系見表3-2 3-2
7、段寄存器段寄存器基址寄存器基址寄存器 變址寄存器變址寄存器 比例因子比例因子位移量位移量DSDSEAXEAXEBXEBXECXECXEDXEDXESIESIEDIEDIEAXEAXEBXEBXECXECXEDXEDXESIESIEDIEDIEBPEBP1 12 24 48 88 8位位3232位位(帶符(帶符號數(shù))號數(shù))SSSSESPESPEBPEBP表表3-2 323-2 32位尋址方式時(shí)段寄存器、基址寄存器、位尋址方式時(shí)段寄存器、基址寄存器、變址寄存器、比例因子和位移量的關(guān)系變址寄存器、比例因子和位移量的關(guān)系 說明:說明: 1 1在表在表3-23-2中,如果以中,如果以EBPEBP和和ES
8、PESP為基址寄存器,默為基址寄存器,默認(rèn)訪問的是堆棧段,段寄存器是認(rèn)訪問的是堆棧段,段寄存器是SSSS。若以其他。若以其他6 6個(gè)寄個(gè)寄存器為基址寄存器,默認(rèn)訪問的是數(shù)據(jù)段,段寄存存器為基址寄存器,默認(rèn)訪問的是數(shù)據(jù)段,段寄存器是器是DSDS。2 2如果數(shù)據(jù)存放在內(nèi)存的附加數(shù)據(jù)段時(shí),需使用段如果數(shù)據(jù)存放在內(nèi)存的附加數(shù)據(jù)段時(shí),需使用段超越前綴超越前綴“ES:”ES:”、“FS:”FS:”或或“GS:”GS:”,才能訪問到,才能訪問到相應(yīng)附加數(shù)據(jù)段中的數(shù)據(jù)。相應(yīng)附加數(shù)據(jù)段中的數(shù)據(jù)。3 3在串操作時(shí),源串默認(rèn)的段寄存器是在串操作時(shí),源串默認(rèn)的段寄存器是DSDS,目的串,目的串默認(rèn)的段寄存器是默認(rèn)的段
9、寄存器是ESES。4 4數(shù)據(jù)存放在內(nèi)存的堆棧段時(shí),默認(rèn)的段寄存器為數(shù)據(jù)存放在內(nèi)存的堆棧段時(shí),默認(rèn)的段寄存器為SSSS。5 5比例因子只能是比例因子只能是1 1、2 2、4 4、8 8。 6 6位移量是位移量是8 8位或位或3232位的帶符號數(shù),所謂帶符號數(shù)是指補(bǔ)碼表位的帶符號數(shù),所謂帶符號數(shù)是指補(bǔ)碼表示的二進(jìn)制數(shù)。示的二進(jìn)制數(shù)。7 7立即尋址時(shí),段寄存器為立即尋址時(shí),段寄存器為CSCS,以,以IPIP(1616位)或位)或EIPEIP(3232位)位)為段內(nèi)偏移地址,找到指令的同時(shí)也就找到了數(shù)據(jù)。為段內(nèi)偏移地址,找到指令的同時(shí)也就找到了數(shù)據(jù)。8 81616位尋址方式時(shí)段寄存器、基址寄存器、變址
10、寄存器和位位尋址方式時(shí)段寄存器、基址寄存器、變址寄存器和位移量的關(guān)系見表移量的關(guān)系見表3-33-3。 段寄存器段寄存器基址寄存器基址寄存器變址寄存器變址寄存器位移量位移量DSDSBXBXSISIDIDI 8 8位位 1616位位(帶符號數(shù))(帶符號數(shù))SSSSBPBPSISIDIDICSCSIPIP表表3-3 163-3 16位尋址方式時(shí)段寄存器、基址寄存器、變址寄存器和位移量的關(guān)系位尋址方式時(shí)段寄存器、基址寄存器、變址寄存器和位移量的關(guān)系 在介紹各種尋址方式之前,先說明指令格式中在介紹各種尋址方式之前,先說明指令格式中出現(xiàn)的助記符號:出現(xiàn)的助記符號: OPSOPS:源操作數(shù),代表:源操作數(shù),
11、代表8 8、1616和和3232位位OPSnOPSn:n n(=8=8或或1616或或3232)位源操作數(shù))位源操作數(shù)OPDOPD:目的操作數(shù),代表:目的操作數(shù),代表8 8、1616和和3232位位OPDnOPDn:n n(=8=8或或1616或或3232)位目的操作數(shù))位目的操作數(shù)segseg:段寄存器:段寄存器regreg:寄存器,代表:寄存器,代表8 8、1616和和3232位位regnregn:n n(=8=8或或1616或或3232)位寄存器)位寄存器memmem:存儲器操作數(shù),代表:存儲器操作數(shù),代表8 8、1616和和3232位位memnmemn:n n(=8=8或或1616或或
12、3232或或4848)位存儲器操作數(shù)。)位存儲器操作數(shù)。4848位存儲器位存儲器操作數(shù),僅在地址傳送指令中使用。操作數(shù),僅在地址傳送指令中使用。immimm:立即數(shù),代表:立即數(shù),代表8 8、1616和和3232位位immnimmn:n n(=8=8或或1616或或3232)位立即數(shù))位立即數(shù)(regreg): :表示寄存器中寄存的數(shù)。表示寄存器中寄存的數(shù)。 3.2.2 3.2.2 立即尋址:立即尋址: 操作數(shù)位置:操作數(shù)位置:內(nèi)存代碼段內(nèi)存代碼段。 立即尋址方式所提供的操作數(shù)緊跟在操作碼的立即尋址方式所提供的操作數(shù)緊跟在操作碼的后面,與操作碼一起放在指令代碼段中。后面,與操作碼一起放在指令代
13、碼段中。 立即數(shù)可以是立即數(shù)可以是8 8位無符號整數(shù)或位無符號整數(shù)或1616位無符號整位無符號整數(shù),但不可以是小數(shù)。如果是數(shù),但不可以是小數(shù)。如果是1616位數(shù),則低位字節(jié)位數(shù),則低位字節(jié)存放在低地址中,高位字節(jié)存放在高地址中。存放在低地址中,高位字節(jié)存放在高地址中。 立即尋址方式只能用于源操作數(shù)字段,不能用立即尋址方式只能用于源操作數(shù)字段,不能用于目的操作數(shù)字段,經(jīng)常用于給寄存器賦初值。于目的操作數(shù)字段,經(jīng)常用于給寄存器賦初值。 例【例【3-1】 指令指令MOV AX,#0002H,是將立即數(shù),是將立即數(shù)0002H送到送到AX中。中。MOV EAX,#11223344H指指令是將立即數(shù)令是將
14、立即數(shù)11223344H傳送給傳送給EAX。 3.2.3 3.2.3 寄存器尋址寄存器尋址 說明:說明:寄存器中寄存的內(nèi)容就是操作數(shù)。寄存器中寄存的內(nèi)容就是操作數(shù)。 操作數(shù)位置:操作數(shù)位置:CPUCPU中的某個(gè)寄存器中的某個(gè)寄存器。例例【3-33-3】 ADD EAXADD EAX,EBXEBX這是一條雙操作數(shù)指令,其中這是一條雙操作數(shù)指令,其中ADDADD為加法指令操作符,為加法指令操作符,它的兩個(gè)加數(shù)分別由它的兩個(gè)加數(shù)分別由EAXEAX和和EBXEBX提供。假定執(zhí)行前提供。假定執(zhí)行前(EAXEAX)=12345678H=12345678H,(EBXEBX)=00000034H=000000
15、34H,則執(zhí)行,則執(zhí)行后后(EAXEAX)=123456ACH=123456ACH,EBXEBX寄存器值不變。寄存器值不變。 例例【3-23-2】 INC AXINC AX其中,其中,INCINC為為+1+1指令操作符,其操作數(shù)地址為寄存指令操作符,其操作數(shù)地址為寄存器器AXAX在機(jī)器指令中的編碼,不同的寄存器使用不同在機(jī)器指令中的編碼,不同的寄存器使用不同的編碼加以編排。本條指令的操作數(shù)就在的編碼加以編排。本條指令的操作數(shù)就在AXAX中。假中。假定執(zhí)行前定執(zhí)行前(AXAX)=1234H=1234H,則執(zhí)行后,則執(zhí)行后(AXAX)=1235H=1235H。 3.2.4 3.2.4 存儲器尋址方
16、式:存儲器尋址方式: 操作數(shù)位置:操作數(shù)位置:通常在內(nèi)存的數(shù)據(jù)段通常在內(nèi)存的數(shù)據(jù)段DSDS和堆棧段和堆棧段SSSS中。中。 程序運(yùn)行所使用的數(shù)據(jù)大都保存在主程序運(yùn)行所使用的數(shù)據(jù)大都保存在主存儲器中,用指令存取存儲器操作數(shù)的方存儲器中,用指令存取存儲器操作數(shù)的方式較多,即存儲器尋址的方式較多。式較多,即存儲器尋址的方式較多。1.1.直接尋址:直接尋址: 在直接尋址方式中,操作數(shù)的在直接尋址方式中,操作數(shù)的1616或或3232位偏移地址位偏移地址EAEA緊跟在指令操作碼后面,緊跟在指令操作碼后面,即操作數(shù)的偏移地址即操作數(shù)的偏移地址EAEA與操作碼一起存與操作碼一起存放在代碼段中,而操作數(shù)可以存放
17、在數(shù)放在代碼段中,而操作數(shù)可以存放在數(shù)據(jù)段,也可以存放在其他段。據(jù)段,也可以存放在其他段。 例例【3-53-5】 假定在數(shù)據(jù)段假定在數(shù)據(jù)段DSDS有雙字變量定義為:有雙字變量定義為: VAR DD 12345678HVAR DD 12345678H其中其中VARVAR是變量名,在經(jīng)過匯編與連接生成可執(zhí)行是變量名,在經(jīng)過匯編與連接生成可執(zhí)行的程序在執(zhí)行時(shí),它有實(shí)際物理地址,由段寄存器的程序在執(zhí)行時(shí),它有實(shí)際物理地址,由段寄存器DSDS與偏移地址與偏移地址EAEA組成。在執(zhí)行指令組成。在執(zhí)行指令MOV EAXMOV EAX,VARVAR時(shí),時(shí),其功能是根據(jù)變量名其功能是根據(jù)變量名VARVAR的的D
18、SDS和和EAEA,從數(shù)據(jù)段內(nèi)偏,從數(shù)據(jù)段內(nèi)偏移地址為移地址為EAEA的內(nèi)存單元,連續(xù)讀取的內(nèi)存單元,連續(xù)讀取4 4個(gè)字節(jié)數(shù)送給個(gè)字節(jié)數(shù)送給EAXEAX,即,即(EAXEAX)=12345678H=12345678H。 直接尋址:直接尋址:2.2.基址尋址基址尋址 以以8 8個(gè)基址寄存器中任一個(gè)寄存器中的個(gè)基址寄存器中任一個(gè)寄存器中的值值 作為操作數(shù)的偏移地址,其中,以作為操作數(shù)的偏移地址,其中,以EAXEAX、EBXEBX、ECXECX、EDXEDX、ESIESI、EDIEDI作為基址寄存器時(shí),默認(rèn)作為基址寄存器時(shí),默認(rèn)訪問段是數(shù)據(jù)段訪問段是數(shù)據(jù)段DSDS,以,以EBPEBP和和ESPESP
19、作為基址寄存作為基址寄存器時(shí),默認(rèn)訪問的段是堆棧段器時(shí),默認(rèn)訪問的段是堆棧段SSSS。例例【3-63-6】 MOV AXMOV AX,EBX EBX ;訪問訪問DSDS段段 MOV AXMOV AX,EBP EBP ;訪問訪問SSSS段段 3.3.基址加位移尋址基址加位移尋址 以以8 8個(gè)個(gè)3232位通用寄存器中任意一個(gè)寄存器作為位通用寄存器中任意一個(gè)寄存器作為基地址寄存器,再加上基地址寄存器,再加上8 8位或位或3232位的位移量,(位位的位移量,(位移量可以是正,也可以是負(fù)),修改基地址寄存器移量可以是正,也可以是負(fù)),修改基地址寄存器的值使之成為新的所要尋找操作數(shù)的偏移地址。默的值使之成
20、為新的所要尋找操作數(shù)的偏移地址。默認(rèn)的段與基址尋址相同。認(rèn)的段與基址尋址相同。例例【3-73-7】 MOV AXMOV AX,EBX-08H EBX-08H ;訪訪問問DSDS段段 MOV AXMOV AX,EBP+34H EBP+34H ;訪訪問問SSSS段段 4.4.比例變址尋址:比例變址尋址: 選取除選取除ESPESP之外的之外的7 7個(gè)個(gè)3232位通用寄存器中任意一位通用寄存器中任意一個(gè)寄存器作為變址寄存器,將變址寄存器的值乘以個(gè)寄存器作為變址寄存器,將變址寄存器的值乘以一個(gè)比例常數(shù)(一個(gè)比例常數(shù)(1 1、2 2、4 4、8 8),最后形成操作數(shù)的),最后形成操作數(shù)的偏移地址。偏移地址
21、。例例【3-83-8】: : MOV AX MOV AX, EBXEBX* *2 2 ;訪訪問問DSDS段段 MOV ECXMOV ECX,EBPEBP* *8 8 ;訪訪問問DSDS段段 5.5.比例變址加位移尋址:比例變址加位移尋址: 選取除選取除ESPESP之外的之外的7 7個(gè)個(gè)3232位通用寄存器中任意一位通用寄存器中任意一個(gè)寄存器作為變址寄存器,將變址寄存器的值乘以個(gè)寄存器作為變址寄存器,將變址寄存器的值乘以一個(gè)比例常數(shù)(一個(gè)比例常數(shù)(1 1、2 2、4 4、8 8),將換算結(jié)果再加上),將換算結(jié)果再加上帶符號的帶符號的8 8位或位或3232位的位移量,最后形成操作數(shù)的位的位移量,最
22、后形成操作數(shù)的偏移地址。偏移地址。例例【3-93-9】 MOV AXMOV AX,EBXEBX* *2-30H 2-30H ;訪問訪問DSDS段段 MOV AXMOV AX,EBPEBP* *8+4567H 8+4567H ;訪問訪問DSDS段段 6.6.基址加比例變址尋址基址加比例變址尋址 以以8 8個(gè)個(gè)3232位通用寄存器中任意一個(gè)寄存器作為基地址寄存器,位通用寄存器中任意一個(gè)寄存器作為基地址寄存器,再加上除再加上除ESPESP之外的之外的7 7個(gè)個(gè)3232位通用寄存器中任意一個(gè)寄存器作為變位通用寄存器中任意一個(gè)寄存器作為變址寄存器,將變址寄存器的值乘以一個(gè)比例常數(shù)(址寄存器,將變址寄存器
23、的值乘以一個(gè)比例常數(shù)(1 1、2 2、4 4、8 8),),其換算結(jié)果作為操作數(shù)的偏移地址;由基址寄存器確定使用其換算結(jié)果作為操作數(shù)的偏移地址;由基址寄存器確定使用DSDS段段還是還是SSSS段,其規(guī)定相同于基址尋址。段,其規(guī)定相同于基址尋址。例例【3-103-10】 MOV ALMOV AL,EDX+EBPEDX+EBP* *2 2 ;EDXEDX是基址寄存器,訪問是基址寄存器,訪問DSDS段段MOV EAXMOV EAX,EBP+ECXEBP+ECX* *8 8 ;EBPEBP是基址寄存器,訪問是基址寄存器,訪問SSSS段段MOV EAXMOV EAX,EBXEDI EBXEDI ;EBX
24、EBX是基址寄存器,訪問是基址寄存器,訪問DSDS段段MOV EAXMOV EAX,ESPEBP ESPEBP ;ESPESP是基址寄存器,訪問是基址寄存器,訪問SSSS段段 7.7.基址加比例變址加位移尋址基址加比例變址加位移尋址 這種尋址方式是在基址加比例變址尋址基礎(chǔ)上,這種尋址方式是在基址加比例變址尋址基礎(chǔ)上,再加上再加上8 8或或3232位位移量,構(gòu)成位位移量,構(gòu)成3232位的偏移地址。實(shí)際位的偏移地址。實(shí)際上它是公式上它是公式3-13-1即即EA=EA=基址基址+ +(變址(變址* *比例因子)比例因子)+ +位移位移量的綜合應(yīng)用。量的綜合應(yīng)用。例例【3-113-11】 MOV BL
25、MOV BL,ESI+EBPESI+EBP* *2+60H 2+60H ;訪問訪問DSDS段段MOV EAXMOV EAX,EBP+EDIEBP+EDI* *8+3344H 8+3344H ;訪問訪問SSSS段段MOV EAXMOV EAX,EBPEDX EBPEDX ;EBPEBP是基址寄存是基址寄存器,訪問器,訪問SSSS段段 基址基址+(變址(變址*比例因子)比例因子)+位移量位移量8.8.1616位的存儲器尋址方式位的存儲器尋址方式 32 32位位CPUCPU兼容兼容1616位位CPUCPU的尋址方式,也兼容的尋址方式,也兼容1616位的指令系統(tǒng),在編寫位的指令系統(tǒng),在編寫3232位程
26、序時(shí),不可避免地位程序時(shí),不可避免地要使用要使用1616位指令系統(tǒng)編程,在位指令系統(tǒng)編程,在1616位位CPUCPU的尋址方的尋址方式中,存儲器尋址仍然是主要的,這是因?yàn)槭街?,存儲器尋址仍然是主要的,這是因?yàn)?616位位的立即尋址、寄存器尋址與的立即尋址、寄存器尋址與3232位的相同,容易理位的相同,容易理解,下面簡單介紹解,下面簡單介紹1616位的存儲器尋址方式。位的存儲器尋址方式。 (1 1)直接尋址直接尋址 指令中直接給出了指令中直接給出了1616位偏移地址,位偏移地址,物理地址物理地址= =段寄存器值段寄存器值* *16+16+偏移地址偏移地址。例例【3-153-15】 MOV BLM
27、OV BL,2060H 2060H ;訪問訪問DSDS段段MOV AXMOV AX,3344H 3344H ;訪問訪問DSDS段段 (2 2)基址尋址基址尋址 指令中以基址寄存器指令中以基址寄存器BXBX或或BPBP中值為中值為1616位的偏移地位的偏移地址訪問內(nèi)存,物理地址址訪問內(nèi)存,物理地址= =段寄存器值段寄存器值* *16+16+偏移地址。偏移地址。以以BXBX和和BPBP為基址寄存器分別訪問數(shù)據(jù)段和堆棧段。為基址寄存器分別訪問數(shù)據(jù)段和堆棧段。例例【3-163-16】 MOV ALMOV AL,BX BX ;訪問訪問DSDS段段 MOV DXMOV DX,BP BP ;訪問訪問SSSS
28、段段 關(guān)于基址尋址,還有另外一種形式,稱為相對基關(guān)于基址尋址,還有另外一種形式,稱為相對基址尋址,它是在基址寄存器的基礎(chǔ)上,加上一個(gè)帶符址尋址,它是在基址寄存器的基礎(chǔ)上,加上一個(gè)帶符號的號的8 8位或位或1616位的位移量。位的位移量。例例【3-173-17】 MOV ALMOV AL,BX+30H BX+30H ;訪問訪問DSDS段段 MOV DXMOV DX,BP-1110H BP-1110H ;訪問訪問SSSS段段 (3 3)變址尋址變址尋址指令中以源變址寄存器指令中以源變址寄存器SISI或目的變址寄存器或目的變址寄存器DIDI中值為中值為1616位的偏移地址訪問內(nèi)存,物理地址位的偏移地
29、址訪問內(nèi)存,物理地址= =段寄存器值段寄存器值* *16+16+偏移地址。所訪問的數(shù)據(jù)段都是偏移地址。所訪問的數(shù)據(jù)段都是DSDS數(shù)據(jù)段。數(shù)據(jù)段。例例【3-183-18】 MOV ALMOV AL,SI SI ;訪問訪問DSDS段段 MOV DXMOV DX,DI DI ;訪問訪問DSDS段段關(guān)于變址尋址,還有另外一種形式,稱為相對變址尋關(guān)于變址尋址,還有另外一種形式,稱為相對變址尋址,它是在變址寄存器的基礎(chǔ)上,加上一個(gè)帶符號的址,它是在變址寄存器的基礎(chǔ)上,加上一個(gè)帶符號的8 8位或位或1616位的位移量。位的位移量。例例【3-193-19】 MOV ALMOV AL,SI-40H SI-40H
30、 ;訪問訪問DSDS段段 MOV DXMOV DX,DI+1000H DI+1000H ;訪問訪問DSDS段段 (4 4)基址(加)變址尋址基址(加)變址尋址 指令中以基址寄存器的值加上變址寄存器的值指令中以基址寄存器的值加上變址寄存器的值所換算的結(jié)果作為偏移地址訪問內(nèi)存,基址寄存器所換算的結(jié)果作為偏移地址訪問內(nèi)存,基址寄存器與變址寄存器的組合以及默認(rèn)訪問的段,見表與變址寄存器的組合以及默認(rèn)訪問的段,見表3-33-3。例例【3-203-20】 MOV ALMOV AL,BX+SI BX+SI ;訪問訪問DSDS段,可以段,可以寫成寫成MOV ALMOV AL,BXSIBXSI形式形式 MOV
31、DXMOV DX,BP+DI BP+DI ;訪問訪問SSSS段,可以段,可以寫成寫成MOV DXMOV DX,BPDIBPDI形式形式 (5 5)相對基址(加)變址尋址:相對基址(加)變址尋址: 相對基址(加)變址尋址是在基址(加)變相對基址(加)變址尋址是在基址(加)變址尋址的基礎(chǔ)之上,加上一個(gè)帶符號的址尋址的基礎(chǔ)之上,加上一個(gè)帶符號的8 8位或位或1616位的位移量,最后形成一個(gè)位的位移量,最后形成一個(gè)1616位的偏移地址,所位的偏移地址,所訪問的段、基址寄存器與變址寄存器的組合與上訪問的段、基址寄存器與變址寄存器的組合與上述的相同。述的相同。例例【3-213-21】MOV ALMOV A
32、L,BX+SI+10H BX+SI+10H ;訪問訪問DSDS段,可以寫成段,可以寫成MOV ALMOV AL,BXSI+10HBXSI+10H形式形式MOV DXMOV DX,BP+DI-29H BP+DI-29H ;訪問訪問SSSS段,可以寫成段,可以寫成MOV DXMOV DX,BPDI-29HBPDI-29H形式形式 3.3 323.3 32位微處理器指令系統(tǒng)概述位微處理器指令系統(tǒng)概述 3232位微處理器的指令系統(tǒng)可以分為以下七類:位微處理器的指令系統(tǒng)可以分為以下七類: 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令 位操作指令位操作指令 字符串操作指令字符串操作指令 控制轉(zhuǎn)移指令
33、控制轉(zhuǎn)移指令 符號擴(kuò)展指令符號擴(kuò)展指令 處理機(jī)控制指令處理機(jī)控制指令 1.1.3232位微處理器指令系統(tǒng)的四種格式:位微處理器指令系統(tǒng)的四種格式: (1 1)無操作數(shù)指令:無操作數(shù)指令:格式為格式為 標(biāo)號標(biāo)號: : 操作符操作符 ;注釋;注釋 如如 NOPNOP(空操作指令空操作指令)。)。在所有指令中,標(biāo)號和注釋是可選項(xiàng)。在所有指令中,標(biāo)號和注釋是可選項(xiàng)。 (2 2)單操作數(shù)指令單操作數(shù)指令格式為格式為 標(biāo)號標(biāo)號: : 操作符操作符 OPDOPD(地址)(地址) ;注釋;注釋 它的操作規(guī)定為:它的操作規(guī)定為: 操作對象為目的地址中的操作數(shù),操作結(jié)束后,操作對象為目的地址中的操作數(shù),操作結(jié)束后
34、,其運(yùn)算結(jié)果送入目的地址中。其運(yùn)算結(jié)果送入目的地址中。 操作數(shù)不能是立即數(shù)。操作數(shù)不能是立即數(shù)。 操作數(shù)類型必須明確。操作數(shù)類型必須明確。 如如 INC BYTE PTR2233HINC BYTE PTR2233H,用數(shù)據(jù)類型,用數(shù)據(jù)類型說明符說明符PTRPTR對內(nèi)存數(shù)據(jù)定義為字節(jié)(對內(nèi)存數(shù)據(jù)定義為字節(jié)(BYTEBYTE)。)。 如如 INC AXINC AX,由于,由于AXAX為為1616位寄存器,數(shù)位寄存器,數(shù)據(jù)類型確定為字類型。據(jù)類型確定為字類型。 (3 3)雙操作數(shù)指令雙操作數(shù)指令格式為格式為 標(biāo)號標(biāo)號: : 操作符操作符 OPDOPD,OPS OPS ;注釋;注釋 它的操作規(guī)定為:它
35、的操作規(guī)定為: OPD OPD和和OPSOPS應(yīng)具有相同的類型,即必須同時(shí)是應(yīng)具有相同的類型,即必須同時(shí)是8 8、1616或或3232位。位。 目的操作數(shù)目的操作數(shù)OPDOPD不能是立即數(shù)。不能是立即數(shù)。 操作結(jié)束后,其操作結(jié)果送入目的操作數(shù)中,而源操作結(jié)束后,其操作結(jié)果送入目的操作數(shù)中,而源操作數(shù)并不改變。操作數(shù)并不改變。(只有(只有CMPCMP、TESTTEST等極少數(shù)指令不影響目的操作數(shù))。等極少數(shù)指令不影響目的操作數(shù))。 源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲器操作數(shù)。源操作數(shù)和目的操作數(shù)不能同時(shí)為存儲器操作數(shù)。假如一個(gè)操作數(shù)在存儲器中,則另一個(gè)操作數(shù)要么是寄假如一個(gè)操作數(shù)在存儲器中,則另
36、一個(gè)操作數(shù)要么是寄存器操作數(shù),要么是立即數(shù),但是立即數(shù)不能作為目的存器操作數(shù),要么是立即數(shù),但是立即數(shù)不能作為目的操作數(shù)。下列兩條指令是錯(cuò)誤的。操作數(shù)。下列兩條指令是錯(cuò)誤的。 ADD EAXADD EAX,EBXEBX MOV 20H MOV 20H,ALAL。 (4 4)三操作數(shù)指令三操作數(shù)指令格式為:格式為: 標(biāo)號標(biāo)號: : 操作符操作符 OPDOPD,OPSOPS,立即數(shù),立即數(shù) ;注釋;注釋 如如 SHRD AXSHRD AX,BXBX,imm8/CLimm8/CL。將將BXBX寄存器中的寄存器中的imm8/CLimm8/CL位右移進(jìn)入位右移進(jìn)入AXAX中。中。 2.2.1616位和位
37、和3232位指令的區(qū)別:位指令的區(qū)別: 1616位編程時(shí)立即數(shù)、寄存器操作數(shù)及存儲器操作位編程時(shí)立即數(shù)、寄存器操作數(shù)及存儲器操作數(shù)只能使用數(shù)只能使用8 8位和位和1616位。位。3232位編程時(shí)立即數(shù)、寄存位編程時(shí)立即數(shù)、寄存器操作數(shù)和存儲器操作數(shù)可以是器操作數(shù)和存儲器操作數(shù)可以是8 8、1616、3232位。位。1616位編程時(shí)位編程時(shí)EAEA是是1616位,位,3232位編程時(shí)位編程時(shí)EAEA是是1616或或3232位。位。1616位編程時(shí)段寄存器只能使用位編程時(shí)段寄存器只能使用CSCS、SSSS、DSDS和和ESES,3232位編程時(shí)段寄存器可以是位編程時(shí)段寄存器可以是CSCS、SSSS
38、、DSDS、ESES、FSFS和和GSGS。 3.4 3.4 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 3.4.1 3.4.1 一般數(shù)據(jù)傳送指令一般數(shù)據(jù)傳送指令 1.1.傳送指令傳送指令指令格式:指令格式:MOV OPDMOV OPD,OPSOPS功能:將源操作數(shù)傳送到目的地址中,功能:將源操作數(shù)傳送到目的地址中,即即(OPSOPS)OPDOPD。 MOVMOV有如下有如下五種五種具體格式:具體格式:MOV regMOV reg,regreg;兩個(gè)寄存器之間的數(shù)據(jù);兩個(gè)寄存器之間的數(shù)據(jù) ;傳送,如;傳送,如MOV ALMOV AL,BHBHMOV regMOV reg,memmem;內(nèi)存單元內(nèi)容送給寄存;內(nèi)存
39、單元內(nèi)容送給寄存 ;器,讀內(nèi)存,如;器,讀內(nèi)存,如MOV BXMOV BX,ESIESIMOV memMOV mem,regreg;寄存器的數(shù)據(jù)送給內(nèi)存單;寄存器的數(shù)據(jù)送給內(nèi)存單 ;元,寫內(nèi)存,如;元,寫內(nèi)存,如MOV ESIMOV ESI,BX BX MOV regMOV reg,immimm;立即數(shù)送給寄存器,;立即數(shù)送給寄存器, ;如;如MOV ECXMOV ECX,12345678H 12345678H MOV memMOV mem,immimm;立即數(shù)送給內(nèi)存單元,如;立即數(shù)送給內(nèi)存單元,如 ;MOV WORD PTR SIMOV WORD PTR SI,5678H 5678H 用于
40、段寄存器的傳送指令有三種格式:用于段寄存器的傳送指令有三種格式:MOV segMOV seg,regreg ; ;寄存器數(shù)據(jù)送給數(shù)據(jù)段寄存器,如寄存器數(shù)據(jù)送給數(shù)據(jù)段寄存器,如 MOV DSMOV DS,AXAXMOV regMOV reg,segseg ;段寄存器數(shù)據(jù)送給寄存器,如;段寄存器數(shù)據(jù)送給寄存器,如 MOV AXMOV AX,DSDSMOV memMOV mem,segseg ;段寄存器數(shù)據(jù)送給內(nèi)存單元,如;段寄存器數(shù)據(jù)送給內(nèi)存單元,如 MOV ESIMOV ESI,DSDS 2.2.數(shù)據(jù)交換指令數(shù)據(jù)交換指令: :指令格式:指令格式:XCHG OPDXCHG OPD,OPSOPS功能
41、:將源操作數(shù)和目的操作數(shù)的內(nèi)容互換,即(功能:將源操作數(shù)和目的操作數(shù)的內(nèi)容互換,即(OPSOPS)(OPDOPD)。)。XCHGXCHG一般有如下三種:一般有如下三種:XCHG regXCHG reg,regregXCHG regXCHG reg,memmemXCHG memXCHG mem,regreg例例【3-223-22】 XCHG AHXCHG AH,AL AL ;其操作是;其操作是AHAH和和ALAL兩兩 ;個(gè)寄存器的值交換;個(gè)寄存器的值交換 XCHG EAXXCHG EAX,EBX EBX ;其操作是;其操作是EAXEAX和和EBXEBX ;兩個(gè)寄存器值交換。;兩個(gè)寄存器值交換。
42、3.3.查表轉(zhuǎn)換指令:查表轉(zhuǎn)換指令:指令格式:指令格式:XLATXLAT或或XLATBXLATB功能:功能:DS:BX+ALALDS:BX+ALAL,或,或DS:EBX+ALALDS:EBX+ALAL,即,即 將將(BXBX)或()或(EBXEBX)為首地址、()為首地址、(ALAL)為偏移量的字節(jié)存儲)為偏移量的字節(jié)存儲單元中的內(nèi)容送單元中的內(nèi)容送ALAL。 由于由于ALAL的值不能超過的值不能超過256256,所以表的大小也不能超過,所以表的大小也不能超過256256個(gè)字節(jié)。個(gè)字節(jié)。 操作碼操作碼XLATXLAT的含義是:的含義是:translatetranslate(轉(zhuǎn)換)(轉(zhuǎn)換)例例【
43、3-233-23】 data segment ;data segment ;定義數(shù)據(jù)段定義數(shù)據(jù)段DSDStab db 0123456789 ;tab db 0123456789 ;單引號內(nèi)匯編后,生成數(shù)單引號內(nèi)匯編后,生成數(shù) ;0 09 9對應(yīng)的對應(yīng)的ASCIIASCII碼碼data ends ;data ends ;數(shù)據(jù)段結(jié)束數(shù)據(jù)段結(jié)束mov bx,offsetmov bx,offset tab ; tab ;變量名變量名tabtab的偏移地址傳的偏移地址傳 ;送給;送給bxbx,指向表的首地址,指向表的首地址movmov al,4 ; al,4 ;表表tabtab中第中第5 5項(xiàng)的偏移量項(xiàng)
44、的偏移量4al4alxlatxlat ;(tab+4)=34hal ;(tab+4)=34hal該例完成的功能是將該例完成的功能是將alal中的一位中的一位1010進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng)的進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng)的ASCIIASCII碼(字符)。碼(字符)。 4. 4. 標(biāo)志寄存器裝入指令標(biāo)志寄存器裝入指令 標(biāo)志寄存器保存指標(biāo)志寄存器保存指令令 指令格式:指令格式:LAHFLAHF功能:功能:將標(biāo)志寄存器低將標(biāo)志寄存器低8 8位送位送AHAH。指令格式:指令格式:SAHFSAHF功能:功能:將將AHAH的內(nèi)容送入標(biāo)志寄存器的低的內(nèi)容送入標(biāo)志寄存器的低8 8位,而高位,而高8 8位保持不變位保持不變。該指令執(zhí)
45、行后,。該指令執(zhí)行后,OFOF、DFDF、IFIF、TFTF的值的值均不變,因?yàn)檫@均不變,因?yàn)檫@4 4個(gè)標(biāo)志位于標(biāo)志寄存器的高個(gè)標(biāo)志位于標(biāo)志寄存器的高8 8位。位。但但SFSF、ZFZF、AFAF、PFPF、CFCF的值會發(fā)生變化,因?yàn)檫@的值會發(fā)生變化,因?yàn)檫@5 5個(gè)標(biāo)志位于標(biāo)志寄存器的低個(gè)標(biāo)志位于標(biāo)志寄存器的低8 8位。位。 OF1115 14 13 12DF10IF9TF8SF7ZF65AF43PF21CF03.4.2 3.4.2 堆棧操作指令堆棧操作指令 堆棧堆棧是在內(nèi)存是在內(nèi)存RAMRAM中開辟的一段空間,中開辟的一段空間,利用利用“先進(jìn)后出先進(jìn)后出”或或“后進(jìn)先出后進(jìn)先出”原則存原則
46、存取數(shù)據(jù)取數(shù)據(jù)。如果把數(shù)據(jù)壓入堆棧,則堆棧。如果把數(shù)據(jù)壓入堆棧,則堆棧指針的值是減少的,即所謂的向下生成堆指針的值是減少的,即所謂的向下生成堆棧。由棧。由SS:SPSS:SP(1616位)或位)或SS:ESPSS:ESP(3232位)指位)指向棧底(??眨┗驐m敚2豢眨┑刂贰O驐5祝?眨┗驐m敚2豢眨┑刂?。利用數(shù)據(jù)入棧指令利用數(shù)據(jù)入棧指令PUSHPUSH和數(shù)據(jù)出棧指令和數(shù)據(jù)出棧指令POPPOP操作堆棧。操作堆棧。 1.1.數(shù)據(jù)入棧指令:數(shù)據(jù)入棧指令:指令格式:指令格式:PUSH OPSPUSH OPS功能:功能:將將OPSOPS中的數(shù)據(jù)壓入堆棧中中的數(shù)據(jù)壓入堆棧中。若壓入堆棧中的。若壓入
47、堆棧中的OPSOPS是是1616位,則位,則SP(16SP(16位位CPU)CPU)或或ESP(32ESP(32位位CPU)CPU)減減2 2;若;若OPSOPS是是3232位,位,ESP(32ESP(32位位CPU)CPU)減減4 4。PUSHPUSH一般有如下三種:一般有如下三種:PUSH reg16/32PUSH reg16/32 ;寄存器;寄存器regreg必須是必須是1616或或3232位位PUSH segPUSH segPUSH mem16/32 PUSH mem16/32 ;內(nèi)存中的數(shù)據(jù)必須是;內(nèi)存中的數(shù)據(jù)必須是1616或或3232位位PUSH imm16/32 PUSH imm
48、16/32 ;將;將1616位或位或3232位立即數(shù)壓入堆棧位立即數(shù)壓入堆棧 例例【3-243-24】 PUSH AXPUSH AX 假定執(zhí)行前,假定執(zhí)行前,AX=1234HAX=1234H,ESP=00001000HESP=00001000H,ESPESP是堆棧指針。是堆棧指針。 執(zhí)行時(shí),把執(zhí)行時(shí),把AXAX的高的高8 8位(位(12H12H)壓入堆棧段)壓入堆棧段中中ESP-1ESP-1的存儲單元中,的存儲單元中,AXAX的低的低8 8位(位(34H34H)壓入)壓入堆棧段中堆棧段中ESP-2ESP-2的存儲單元中,對于堆棧中數(shù)據(jù)的存儲單元中,對于堆棧中數(shù)據(jù)的操作,按照的操作,按照“高字節(jié)
49、存放高地址、低字節(jié)存放高字節(jié)存放高地址、低字節(jié)存放低地址低地址”的規(guī)則存取。的規(guī)則存取。AXAX的值被壓入堆棧后,的值被壓入堆棧后,ESP-2ESPESP-2ESP,堆棧指針,堆棧指針ESPESP中的數(shù)值變成中的數(shù)值變成00000FFEH00000FFEH,AXAX內(nèi)容不變。內(nèi)容不變。 2.2.數(shù)據(jù)出棧指令:數(shù)據(jù)出棧指令:指令格式:指令格式:POP OPDPOP OPD功能:功能:將棧頂元素彈出送到某一寄存器、段寄存器將棧頂元素彈出送到某一寄存器、段寄存器(CSCS除外)或內(nèi)存中除外)或內(nèi)存中。注意。注意OPSOPS一定是一定是1616或或3232位。彈位。彈出棧的數(shù)據(jù)若是出棧的數(shù)據(jù)若是161
50、6位,位,SPSP或或ESPESP加加2 2;若數(shù)據(jù)是;若數(shù)據(jù)是3232位,位,ESPESP加加4 4。POPPOP一般有如下三種:一般有如下三種:POP reg16/32 POP reg16/32 ;寄存器;寄存器regreg必須是必須是1616或或3232位位POP segPOP seg ;segseg不能為不能為CSCS、SSSSPOP memPOP mem16/32 16/32 ;存儲器長度必須是;存儲器長度必須是1616或或3232位位 例例【3-253-25】 POP BXPOP BX, 假定在上例的基假定在上例的基礎(chǔ)上執(zhí)行礎(chǔ)上執(zhí)行POP BXPOP BX。假定執(zhí)行前,假定執(zhí)行前,
51、BX=4567HBX=4567H,ESP=00000FFEHESP=00000FFEH。執(zhí)行后,。執(zhí)行后,BX=1234HBX=1234H,ESP+2=1000HESP+2=1000H。 例例【3-263-26】 利用利用PUSHPUSH和和POPPOP指令把寄存指令把寄存器器EAXEAX和和EBXEBX的值交換。的值交換。PUSH EAXPUSH EAXPUSH EBXPUSH EBXPOP EAXPOP EAXPOP EBX POP EBX 由由PUSH/POPPUSH/POP指令還有下面指令還有下面6 6組:組: (1 1)存儲器操作數(shù)入棧和出棧存儲器操作數(shù)入棧和出棧 PUSHW mem
52、PUSHW mem ;1616位存儲器操作數(shù)入棧位存儲器操作數(shù)入棧 PUSHD memPUSHD mem ;3232位存儲器操作數(shù)入棧位存儲器操作數(shù)入棧 或或 PUSH WORD PTR memPUSH WORD PTR mem PUSH DWORD PTR mem PUSH DWORD PTR mem POP WORD PTR mem POP WORD PTR mem POP DWORD PTR mem POP DWORD PTR mem (2 2)多個(gè)多個(gè)1616位通用寄存器入棧和出棧位通用寄存器入棧和出棧 1616位數(shù)據(jù)入棧位數(shù)據(jù)入棧/ /出棧配對使用指令:出棧配對使用指令:PUSHAP
53、USHA/ /POPAPOPA。 PUSHAPUSHA 將將AXAX、BXBX、CXCX、DXDX、SPSP、BPBP、SISI、DIDI這這8 8個(gè)個(gè)1616位通用寄存器的值依次壓入堆棧,其中位通用寄存器的值依次壓入堆棧,其中SPSP的值是的值是在此條指令未執(zhí)行之前的值,該指令執(zhí)行后,在此條指令未執(zhí)行之前的值,該指令執(zhí)行后,SP-SP-16SP16SP。POPAPOPA 依次彈出堆棧中的依次彈出堆棧中的1616位字到位字到DIDI、SISI、BPBP、SPSP、DXDX、CXCX、BXBX、AXAX中,該指令執(zhí)行后,中,該指令執(zhí)行后,SP+16SPSP+16SP。 (3 3)多個(gè)多個(gè)3232
54、位通用寄存器入棧與出棧位通用寄存器入棧與出棧PUSHADPUSHAD 將將EAXEAX、ECXECX、EDXEDX、EBXEBX、ESPESP、EBPEBP、ESIESI、EDIEDI這這8 8個(gè)個(gè)3232位通用寄存器的值依次壓入堆棧,其中位通用寄存器的值依次壓入堆棧,其中ESPESP的值是在此條指令未執(zhí)行之前的值,指令執(zhí)行后,的值是在此條指令未執(zhí)行之前的值,指令執(zhí)行后,ESP-32ESPESP-32ESP。POPADPOPAD 依次彈出堆棧中的依次彈出堆棧中的3232位字到位字到EDIEDI、ESIESI、EBPEBP、ESPESP、EBXEBX、EDXEDX、ECXECX、EAXEAX中,
55、彈出完成后,中,彈出完成后,ESP+32ESPESP+32ESP。 上述兩組指令用于過程設(shè)計(jì)時(shí),上述兩組指令用于過程設(shè)計(jì)時(shí),PUSHAPUSHA和和PUSHADPUSHAD在過程開始保存通用寄存器的值,在過程開始保存通用寄存器的值,POPAPOPA和和POPADPOPAD在過程結(jié)束時(shí)恢復(fù)通用寄存器的值,必須配在過程結(jié)束時(shí)恢復(fù)通用寄存器的值,必須配對使用。對使用。 (4 4)1616位標(biāo)志寄存器入棧和出棧位標(biāo)志寄存器入棧和出棧PUSHF PUSHF ;將;將1616位標(biāo)志寄存器位標(biāo)志寄存器F F的值入棧的值入棧POPF POPF ;將棧頂內(nèi)容從堆棧彈出送給;將棧頂內(nèi)容從堆棧彈出送給1616位的標(biāo)
56、志寄存器位的標(biāo)志寄存器F F,或彈出送到,或彈出送到3232位標(biāo)志寄存器位標(biāo)志寄存器的低的低1616位中,只從棧頂彈出位中,只從棧頂彈出2 2個(gè)字節(jié)。個(gè)字節(jié)。操作碼操作碼POPFPOPF的含義是:的含義是:pop flags off stackpop flags off stack。例例【3-273-27】如果要將如果要將0FFFHFLAGS0FFFHFLAGS,可以用以下指令實(shí)現(xiàn):,可以用以下指令實(shí)現(xiàn):MOV AXMOV AX,0FFFH 0FFFH ;將常量;將常量0FFFHAX0FFFHAXPUSH AX PUSH AX ;AXAX入棧入棧POPF POPF ;將;將SS:SPSS:SP
57、中的中的0FFFH0FFFH標(biāo)標(biāo) ; ;志寄存器志寄存器F F (5 5)3232位標(biāo)志寄存器入棧和出棧位標(biāo)志寄存器入棧和出棧PUSHFDPUSHFD ;是將;是將3232位標(biāo)志寄存器位標(biāo)志寄存器EFLAGSEFLAGS的值的值 ; ;入棧入棧POPFD POPFD ;從堆棧棧頂處連續(xù)彈出;從堆棧棧頂處連續(xù)彈出4 4字節(jié)送字節(jié)送 給給3232位的標(biāo)志寄存器位的標(biāo)志寄存器EFLAGSEFLAGS 當(dāng)從堆棧中彈出當(dāng)從堆棧中彈出3232位標(biāo)志寄存器時(shí),只有在當(dāng)位標(biāo)志寄存器時(shí),只有在當(dāng)前特權(quán)級為前特權(quán)級為0 0時(shí),才能從堆棧中彈出時(shí),才能從堆棧中彈出3232位標(biāo)志并送給位標(biāo)志并送給EFLAGSEFLA
58、GS,使得,使得EFLAGSEFLAGS中的中的I/OI/O特權(quán)級標(biāo)志位特權(quán)級標(biāo)志位IOPLIOPL才能才能被替換。被替換。 (6 6)ENTERENTER和和LEAVELEAVE指令指令 ENTER/LEAVEENTER/LEAVE指令把指令把EBPEBP寄存器內(nèi)容寄存器內(nèi)容入棧入棧/ /出棧,并在堆棧中為局部變量分出棧,并在堆棧中為局部變量分配配/ /釋放存儲空間,通常在子程序調(diào)用釋放存儲空間,通常在子程序調(diào)用時(shí)使用該組指令。時(shí)使用該組指令。 3.4.3 3.4.3 地址傳送指令:地址傳送指令: 1.1.傳送偏移地址指令傳送偏移地址指令 指令格式:指令格式:LEA OPDLEA OPD,O
59、PSOPS功能:功能:LEALEA(Load Effective AddressLoad Effective Address)指令按)指令按OPSOPS提供的尋提供的尋址方式計(jì)算偏移地址,并將其送入址方式計(jì)算偏移地址,并將其送入OPDOPD中中。例例【3-283-28】data segment ;data segment ;數(shù)據(jù)內(nèi)存分配見圖數(shù)據(jù)內(nèi)存分配見圖3-13-1bufbuf db ABCDEF ; db ABCDEF ;數(shù)據(jù)段內(nèi)定義的數(shù)是數(shù)據(jù)段內(nèi)定義的數(shù)是41H41H、42H42H、43H43H、 ;44H;44H、45H45H、46H46Hnum dwnum dw 1234H 1234
60、H,-5 ; -5 ; NUM DW 1234H ;變量變量NUM定義為字類型數(shù)據(jù)區(qū)的首地址定義為字類型數(shù)據(jù)區(qū)的首地址,存放有數(shù)據(jù)存放有數(shù)據(jù)1234Hdata endsdata endsmov si,offsetmov si,offset num ; num ;將將numnum的的eaea即即6 6傳送給傳送給sisilea si,numlea si,num ; ;與上一條指令等價(jià)與上一條指令等價(jià)mov dx,si ;DS:simov dx,si ;DS:si=1234hdx=1234hdx,數(shù)據(jù)傳送,數(shù)據(jù)傳送 2. 2. 傳送偏移地址到寄存器并傳送段值到傳送偏移地址到寄存器并傳送段值到數(shù)據(jù)段
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療領(lǐng)域中基于區(qū)塊鏈的信任體系構(gòu)建
- 區(qū)塊鏈賦能金融安全與融資共舞
- Axure RP 互聯(lián)網(wǎng)產(chǎn)品原型設(shè)計(jì)課件 第4章 使用元件和元件庫
- 以人工智能為核心用區(qū)快鏈技術(shù)的去中心化商業(yè)解決方案
- 代辦會議合同范例
- 光纜安裝維修合同范例
- 企業(yè)內(nèi)部審計(jì)的數(shù)字化轉(zhuǎn)型基于區(qū)塊鏈技術(shù)的探索與實(shí)踐
- 創(chuàng)新醫(yī)療健康數(shù)據(jù)管理模式與隱私保護(hù)實(shí)踐
- 小區(qū)垃圾問題
- 會計(jì)教育培訓(xùn)合同范例
- 密閉式靜脈輸液技術(shù)操作考核評分標(biāo)準(zhǔn)表(標(biāo)準(zhǔn)版)
- 介紹家鄉(xiāng)-word電子報(bào)模板
- 人工智能自動駕駛系統(tǒng)開發(fā)項(xiàng)目應(yīng)急預(yù)案
- 思想道德與法治2023版教學(xué)設(shè)計(jì)第二章 追求遠(yuǎn)大理想 堅(jiān)定崇高信念
- 牛津譯林英語-九年級上冊Unit2Reading-(共30張PPT)
- 《影視光線藝術(shù)與照明技巧》word版本
- 主題班會:君子自強(qiáng)不息
- 《格林童話》讀書分享ppt
- 阿里云:生來創(chuàng)新-金融級云原生
- 高中數(shù)學(xué)說題課件
- 文檔文檔防淹門
評論
0/150
提交評論