




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第3 3章章 3232位微處理器指令系統位微處理器指令系統 3.1 323.1 32位指令運行環境位指令運行環境 3.2 3.2 尋址方式尋址方式 3.3 323.3 32位微處理器指令系統概述位微處理器指令系統概述 3.4 3.4 數據傳送指令數據傳送指令 3.5 3.5 算術運算指令算術運算指令 3.6 3.6 邏輯運算指令邏輯運算指令3.7 3.7 移位指令移位指令3.8 3.8 字符串操作指令字符串操作指令 3.9 3.9 控制轉移指令控制轉移指令 3.10 3.10 符號擴展指令符號擴展指令 3.11 3.11 處理機控制指令處理機控制指令 3.1 323.1 32位指令運行環境位
2、指令運行環境 1.1.1616位段位段 32 32位位X86 CPUX86 CPU還可以使用還可以使用3232位寄存器和位寄存器和3232位尋位尋址方式,處理址方式,處理3232位數據及執行位數據及執行3232位的新增指令,但位的新增指令,但是,段基地址和偏移量都只用是,段基地址和偏移量都只用1616位,位,6 6個段寄存器仍個段寄存器仍然當作然當作1616位的段寄存器使用,對于偏移地址來說,位的段寄存器使用,對于偏移地址來說,如果是如果是3232位,則高位,則高1616位應該為位應該為0 0,只有低,只有低1616位偏移位偏移地址有效,相當于可以進行地址有效,相當于可以進行3232位數處理的
3、快速位數處理的快速80868086,所以稱之為所以稱之為“1616位段位段”。 2. 2. 3232位段位段 32 32位位 X86 CPUX86 CPU由實地址模式可以進入保護工作由實地址模式可以進入保護工作模式,它是一個增強了模式,它是一個增強了8028680286保護模式功能的保護模式功能的3232位位保護工作模式。在保護工作模式下,保護工作模式。在保護工作模式下,3232位微處理器位微處理器不僅具有段式存儲器管理功能,而且還有頁式存儲不僅具有段式存儲器管理功能,而且還有頁式存儲器管理功能,支持虛擬存儲器,段基地址和段內偏器管理功能,支持虛擬存儲器,段基地址和段內偏移量都是移量都是323
4、2位,稱之為位,稱之為“3232位段位段” ” 。3.2 3.2 尋址方式尋址方式 3.2.1 3.2.1 尋址方式概述尋址方式概述 一條指令包含操作碼和操作數兩部分,操作碼一條指令包含操作碼和操作數兩部分,操作碼(指令助記符)指出該指令要進行的操作,操作數(指令助記符)指出該指令要進行的操作,操作數指出該指令需要的操作數或操作數的地址。操作數指出該指令需要的操作數或操作數的地址。操作數在計算機中的位置及存取方式見表在計算機中的位置及存取方式見表3-13-1。 數據存放的位置數據存放的位置存取方式存取方式寄存器寄存器CPUCPU可直接存取可直接存取外設(接口)外設(接口)用用ININ、OUTO
5、UT指令輸入指令輸入/ /輸出輸出內存內存在內存的數據段、附加數據段或堆棧段,在內存的數據段、附加數據段或堆棧段,可利用存儲器尋址的各種尋址方式存取可利用存儲器尋址的各種尋址方式存取在內存的代碼段(立即尋址)在內存的代碼段(立即尋址)表表3-1 3-1 操作數在計算機中的位置及存取方式操作數在計算機中的位置及存取方式 指令根據一定的方式,先找指令根據一定的方式,先找到存儲操作數的空間地址,然后到存儲操作數的空間地址,然后取出操作數進行處理。尋找操作取出操作數進行處理。尋找操作數的方式稱為數的方式稱為尋址方式尋址方式。 尋址方式:尋址方式: 操作數地址由操作數地址由 段基址段基址 和和 段內偏移
6、地址段內偏移地址共同產生。共同產生。 段基址由段基址寄存器提供,有段基址由段基址寄存器提供,有CSCS、SSSS、DSDS、ESES、FSFS和和GSGS。 段內偏移地址也稱為有效地址段內偏移地址也稱為有效地址EAEA(effective addresseffective address),),3232位有效地址的位有效地址的公式是:公式是:EA=EA=基址基址+ +(變址(變址* *比例因子)比例因子)+ + 位移量位移量 32 32位尋址方式:段寄存器、基址寄存器、變址位尋址方式:段寄存器、基址寄存器、變址寄存器、比例因子和位移量的關系見表寄存器、比例因子和位移量的關系見表3-2 3-2
7、段寄存器段寄存器基址寄存器基址寄存器 變址寄存器變址寄存器 比例因子比例因子位移量位移量DSDSEAXEAXEBXEBXECXECXEDXEDXESIESIEDIEDIEAXEAXEBXEBXECXECXEDXEDXESIESIEDIEDIEBPEBP1 12 24 48 88 8位位3232位位(帶符(帶符號數)號數)SSSSESPESPEBPEBP表表3-2 323-2 32位尋址方式時段寄存器、基址寄存器、位尋址方式時段寄存器、基址寄存器、變址寄存器、比例因子和位移量的關系變址寄存器、比例因子和位移量的關系 說明:說明: 1 1在表在表3-23-2中,如果以中,如果以EBPEBP和和ES
8、PESP為基址寄存器,默為基址寄存器,默認訪問的是堆棧段,段寄存器是認訪問的是堆棧段,段寄存器是SSSS。若以其他。若以其他6 6個寄個寄存器為基址寄存器,默認訪問的是數據段,段寄存存器為基址寄存器,默認訪問的是數據段,段寄存器是器是DSDS。2 2如果數據存放在內存的附加數據段時,需使用段如果數據存放在內存的附加數據段時,需使用段超越前綴超越前綴“ES:”ES:”、“FS:”FS:”或或“GS:”GS:”,才能訪問到,才能訪問到相應附加數據段中的數據。相應附加數據段中的數據。3 3在串操作時,源串默認的段寄存器是在串操作時,源串默認的段寄存器是DSDS,目的串,目的串默認的段寄存器是默認的段
9、寄存器是ESES。4 4數據存放在內存的堆棧段時,默認的段寄存器為數據存放在內存的堆棧段時,默認的段寄存器為SSSS。5 5比例因子只能是比例因子只能是1 1、2 2、4 4、8 8。 6 6位移量是位移量是8 8位或位或3232位的帶符號數,所謂帶符號數是指補碼表位的帶符號數,所謂帶符號數是指補碼表示的二進制數。示的二進制數。7 7立即尋址時,段寄存器為立即尋址時,段寄存器為CSCS,以,以IPIP(1616位)或位)或EIPEIP(3232位)位)為段內偏移地址,找到指令的同時也就找到了數據。為段內偏移地址,找到指令的同時也就找到了數據。8 81616位尋址方式時段寄存器、基址寄存器、變址
10、寄存器和位位尋址方式時段寄存器、基址寄存器、變址寄存器和位移量的關系見表移量的關系見表3-33-3。 段寄存器段寄存器基址寄存器基址寄存器變址寄存器變址寄存器位移量位移量DSDSBXBXSISIDIDI 8 8位位 1616位位(帶符號數)(帶符號數)SSSSBPBPSISIDIDICSCSIPIP表表3-3 163-3 16位尋址方式時段寄存器、基址寄存器、變址寄存器和位移量的關系位尋址方式時段寄存器、基址寄存器、變址寄存器和位移量的關系 在介紹各種尋址方式之前,先說明指令格式中在介紹各種尋址方式之前,先說明指令格式中出現的助記符號:出現的助記符號: OPSOPS:源操作數,代表:源操作數,
11、代表8 8、1616和和3232位位OPSnOPSn:n n(=8=8或或1616或或3232)位源操作數)位源操作數OPDOPD:目的操作數,代表:目的操作數,代表8 8、1616和和3232位位OPDnOPDn:n n(=8=8或或1616或或3232)位目的操作數)位目的操作數segseg:段寄存器:段寄存器regreg:寄存器,代表:寄存器,代表8 8、1616和和3232位位regnregn:n n(=8=8或或1616或或3232)位寄存器)位寄存器memmem:存儲器操作數,代表:存儲器操作數,代表8 8、1616和和3232位位memnmemn:n n(=8=8或或1616或或
12、3232或或4848)位存儲器操作數。)位存儲器操作數。4848位存儲器位存儲器操作數,僅在地址傳送指令中使用。操作數,僅在地址傳送指令中使用。immimm:立即數,代表:立即數,代表8 8、1616和和3232位位immnimmn:n n(=8=8或或1616或或3232)位立即數)位立即數(regreg): :表示寄存器中寄存的數。表示寄存器中寄存的數。 3.2.2 3.2.2 立即尋址:立即尋址: 操作數位置:操作數位置:內存代碼段內存代碼段。 立即尋址方式所提供的操作數緊跟在操作碼的立即尋址方式所提供的操作數緊跟在操作碼的后面,與操作碼一起放在指令代碼段中。后面,與操作碼一起放在指令代
13、碼段中。 立即數可以是立即數可以是8 8位無符號整數或位無符號整數或1616位無符號整位無符號整數,但不可以是小數。如果是數,但不可以是小數。如果是1616位數,則低位字節位數,則低位字節存放在低地址中,高位字節存放在高地址中。存放在低地址中,高位字節存放在高地址中。 立即尋址方式只能用于源操作數字段,不能用立即尋址方式只能用于源操作數字段,不能用于目的操作數字段,經常用于給寄存器賦初值。于目的操作數字段,經常用于給寄存器賦初值。 例【例【3-1】 指令指令MOV AX,#0002H,是將立即數,是將立即數0002H送到送到AX中。中。MOV EAX,#11223344H指指令是將立即數令是將
14、立即數11223344H傳送給傳送給EAX。 3.2.3 3.2.3 寄存器尋址寄存器尋址 說明:說明:寄存器中寄存的內容就是操作數。寄存器中寄存的內容就是操作數。 操作數位置:操作數位置:CPUCPU中的某個寄存器中的某個寄存器。例例【3-33-3】 ADD EAXADD EAX,EBXEBX這是一條雙操作數指令,其中這是一條雙操作數指令,其中ADDADD為加法指令操作符,為加法指令操作符,它的兩個加數分別由它的兩個加數分別由EAXEAX和和EBXEBX提供。假定執行前提供。假定執行前(EAXEAX)=12345678H=12345678H,(EBXEBX)=00000034H=000000
15、34H,則執行,則執行后后(EAXEAX)=123456ACH=123456ACH,EBXEBX寄存器值不變。寄存器值不變。 例例【3-23-2】 INC AXINC AX其中,其中,INCINC為為+1+1指令操作符,其操作數地址為寄存指令操作符,其操作數地址為寄存器器AXAX在機器指令中的編碼,不同的寄存器使用不同在機器指令中的編碼,不同的寄存器使用不同的編碼加以編排。本條指令的操作數就在的編碼加以編排。本條指令的操作數就在AXAX中。假中。假定執行前定執行前(AXAX)=1234H=1234H,則執行后,則執行后(AXAX)=1235H=1235H。 3.2.4 3.2.4 存儲器尋址方
16、式:存儲器尋址方式: 操作數位置:操作數位置:通常在內存的數據段通常在內存的數據段DSDS和堆棧段和堆棧段SSSS中。中。 程序運行所使用的數據大都保存在主程序運行所使用的數據大都保存在主存儲器中,用指令存取存儲器操作數的方存儲器中,用指令存取存儲器操作數的方式較多,即存儲器尋址的方式較多。式較多,即存儲器尋址的方式較多。1.1.直接尋址:直接尋址: 在直接尋址方式中,操作數的在直接尋址方式中,操作數的1616或或3232位偏移地址位偏移地址EAEA緊跟在指令操作碼后面,緊跟在指令操作碼后面,即操作數的偏移地址即操作數的偏移地址EAEA與操作碼一起存與操作碼一起存放在代碼段中,而操作數可以存放
17、在數放在代碼段中,而操作數可以存放在數據段,也可以存放在其他段。據段,也可以存放在其他段。 例例【3-53-5】 假定在數據段假定在數據段DSDS有雙字變量定義為:有雙字變量定義為: VAR DD 12345678HVAR DD 12345678H其中其中VARVAR是變量名,在經過匯編與連接生成可執行是變量名,在經過匯編與連接生成可執行的程序在執行時,它有實際物理地址,由段寄存器的程序在執行時,它有實際物理地址,由段寄存器DSDS與偏移地址與偏移地址EAEA組成。在執行指令組成。在執行指令MOV EAXMOV EAX,VARVAR時,時,其功能是根據變量名其功能是根據變量名VARVAR的的D
18、SDS和和EAEA,從數據段內偏,從數據段內偏移地址為移地址為EAEA的內存單元,連續讀取的內存單元,連續讀取4 4個字節數送給個字節數送給EAXEAX,即,即(EAXEAX)=12345678H=12345678H。 直接尋址:直接尋址:2.2.基址尋址基址尋址 以以8 8個基址寄存器中任一個寄存器中的個基址寄存器中任一個寄存器中的值值 作為操作數的偏移地址,其中,以作為操作數的偏移地址,其中,以EAXEAX、EBXEBX、ECXECX、EDXEDX、ESIESI、EDIEDI作為基址寄存器時,默認作為基址寄存器時,默認訪問段是數據段訪問段是數據段DSDS,以,以EBPEBP和和ESPESP
19、作為基址寄存作為基址寄存器時,默認訪問的段是堆棧段器時,默認訪問的段是堆棧段SSSS。例例【3-63-6】 MOV AXMOV AX,EBX EBX ;訪問訪問DSDS段段 MOV AXMOV AX,EBP EBP ;訪問訪問SSSS段段 3.3.基址加位移尋址基址加位移尋址 以以8 8個個3232位通用寄存器中任意一個寄存器作為位通用寄存器中任意一個寄存器作為基地址寄存器,再加上基地址寄存器,再加上8 8位或位或3232位的位移量,(位位的位移量,(位移量可以是正,也可以是負),修改基地址寄存器移量可以是正,也可以是負),修改基地址寄存器的值使之成為新的所要尋找操作數的偏移地址。默的值使之成
20、為新的所要尋找操作數的偏移地址。默認的段與基址尋址相同。認的段與基址尋址相同。例例【3-73-7】 MOV AXMOV AX,EBX-08H EBX-08H ;訪訪問問DSDS段段 MOV AXMOV AX,EBP+34H EBP+34H ;訪訪問問SSSS段段 4.4.比例變址尋址:比例變址尋址: 選取除選取除ESPESP之外的之外的7 7個個3232位通用寄存器中任意一位通用寄存器中任意一個寄存器作為變址寄存器,將變址寄存器的值乘以個寄存器作為變址寄存器,將變址寄存器的值乘以一個比例常數(一個比例常數(1 1、2 2、4 4、8 8),最后形成操作數的),最后形成操作數的偏移地址。偏移地址
21、。例例【3-83-8】: : MOV AX MOV AX, EBXEBX* *2 2 ;訪訪問問DSDS段段 MOV ECXMOV ECX,EBPEBP* *8 8 ;訪訪問問DSDS段段 5.5.比例變址加位移尋址:比例變址加位移尋址: 選取除選取除ESPESP之外的之外的7 7個個3232位通用寄存器中任意一位通用寄存器中任意一個寄存器作為變址寄存器,將變址寄存器的值乘以個寄存器作為變址寄存器,將變址寄存器的值乘以一個比例常數(一個比例常數(1 1、2 2、4 4、8 8),將換算結果再加上),將換算結果再加上帶符號的帶符號的8 8位或位或3232位的位移量,最后形成操作數的位的位移量,最
22、后形成操作數的偏移地址。偏移地址。例例【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個個3232位通用寄存器中任意一個寄存器作為基地址寄存器,位通用寄存器中任意一個寄存器作為基地址寄存器,再加上除再加上除ESPESP之外的之外的7 7個個3232位通用寄存器中任意一個寄存器作為變位通用寄存器中任意一個寄存器作為變址寄存器,將變址寄存器的值乘以一個比例常數(址寄存器,將變址寄存器
23、的值乘以一個比例常數(1 1、2 2、4 4、8 8),),其換算結果作為操作數的偏移地址;由基址寄存器確定使用其換算結果作為操作數的偏移地址;由基址寄存器確定使用DSDS段段還是還是SSSS段,其規定相同于基址尋址。段,其規定相同于基址尋址。例例【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.基址加比例變址加位移尋址基址加比例變址加位移尋址 這種尋址方式是在基址加比例變址尋址基礎上,這種尋址方式是在基址加比例變址尋址基礎上,再加上再加上8 8或或3232位位移量,構成位位移量,構成3232位的偏移地址。實際位的偏移地址。實際上它是公式上它是公式3-13-1即即EA=EA=基址基址+ +(變址(變址* *比例因子)比例因子)+ +位移位移量的綜合應用。量的綜合應用。例例【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位的指令系統,在編寫位的指令系統,在編寫3232位程
26、序時,不可避免地位程序時,不可避免地要使用要使用1616位指令系統編程,在位指令系統編程,在1616位位CPUCPU的尋址方的尋址方式中,存儲器尋址仍然是主要的,這是因為式中,存儲器尋址仍然是主要的,這是因為1616位位的立即尋址、寄存器尋址與的立即尋址、寄存器尋址與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位的偏移地位的偏移地址訪問內存,物理地址址訪問內存,物理地址= =段寄存器值段寄存器值* *16+16+偏移地址。偏移地址。以以BXBX和和BPBP為基址寄存器分別訪問數據段和堆棧段。為基址寄存器分別訪問數據段和堆棧段。例例【3-163-16】 MOV ALMOV AL,BX BX ;訪問訪問DSDS段段 MOV DXMOV DX,BP BP ;訪問訪問SSSS
28、段段 關于基址尋址,還有另外一種形式,稱為相對基關于基址尋址,還有另外一種形式,稱為相對基址尋址,它是在基址寄存器的基礎上,加上一個帶符址尋址,它是在基址寄存器的基礎上,加上一個帶符號的號的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位的偏移地址訪問內存,物理地址位的偏移地
29、址訪問內存,物理地址= =段寄存器值段寄存器值* *16+16+偏移地址。所訪問的數據段都是偏移地址。所訪問的數據段都是DSDS數據段。數據段。例例【3-183-18】 MOV ALMOV AL,SI SI ;訪問訪問DSDS段段 MOV DXMOV DX,DI DI ;訪問訪問DSDS段段關于變址尋址,還有另外一種形式,稱為相對變址尋關于變址尋址,還有另外一種形式,稱為相對變址尋址,它是在變址寄存器的基礎上,加上一個帶符號的址,它是在變址寄存器的基礎上,加上一個帶符號的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)基址(加)變址尋址基址(加)變址尋址 指令中以基址寄存器的值加上變址寄存器的值指令中以基址寄存器的值加上變址寄存器的值所換算的結果作為偏移地址訪問內存,基址寄存器所換算的結果作為偏移地址訪問內存,基址寄存器與變址寄存器的組合以及默認訪問的段,見表與變址寄存器的組合以及默認訪問的段,見表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)相對基址(加)變址尋址:相對基址(加)變址尋址: 相對基址(加)變址尋址是在基址(加)變相對基址(加)變址尋址是在基址(加)變址尋址的基礎之上,加上一個帶符號的址尋址的基礎之上,加上一個帶符號的8 8位或位或1616位的位移量,最后形成一個位的位移量,最后形成一個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位微處理器指令系統概述位微處理器指令系統概述 3232位微處理器的指令系統可以分為以下七類:位微處理器的指令系統可以分為以下七類: 數據傳送指令數據傳送指令 算術運算指令算術運算指令 位操作指令位操作指令 字符串操作指令字符串操作指令 控制轉移指令
33、控制轉移指令 符號擴展指令符號擴展指令 處理機控制指令處理機控制指令 1.1.3232位微處理器指令系統的四種格式:位微處理器指令系統的四種格式: (1 1)無操作數指令:無操作數指令:格式為格式為 標號標號: : 操作符操作符 ;注釋;注釋 如如 NOPNOP(空操作指令空操作指令)。)。在所有指令中,標號和注釋是可選項。在所有指令中,標號和注釋是可選項。 (2 2)單操作數指令單操作數指令格式為格式為 標號標號: : 操作符操作符 OPDOPD(地址)(地址) ;注釋;注釋 它的操作規定為:它的操作規定為: 操作對象為目的地址中的操作數,操作結束后,操作對象為目的地址中的操作數,操作結束后
34、,其運算結果送入目的地址中。其運算結果送入目的地址中。 操作數不能是立即數。操作數不能是立即數。 操作數類型必須明確。操作數類型必須明確。 如如 INC BYTE PTR2233HINC BYTE PTR2233H,用數據類型,用數據類型說明符說明符PTRPTR對內存數據定義為字節(對內存數據定義為字節(BYTEBYTE)。)。 如如 INC AXINC AX,由于,由于AXAX為為1616位寄存器,數位寄存器,數據類型確定為字類型。據類型確定為字類型。 (3 3)雙操作數指令雙操作數指令格式為格式為 標號標號: : 操作符操作符 OPDOPD,OPS OPS ;注釋;注釋 它的操作規定為:它
35、的操作規定為: OPD OPD和和OPSOPS應具有相同的類型,即必須同時是應具有相同的類型,即必須同時是8 8、1616或或3232位。位。 目的操作數目的操作數OPDOPD不能是立即數。不能是立即數。 操作結束后,其操作結果送入目的操作數中,而源操作結束后,其操作結果送入目的操作數中,而源操作數并不改變。操作數并不改變。(只有(只有CMPCMP、TESTTEST等極少數指令不影響目的操作數)。等極少數指令不影響目的操作數)。 源操作數和目的操作數不能同時為存儲器操作數。源操作數和目的操作數不能同時為存儲器操作數。假如一個操作數在存儲器中,則另一個操作數要么是寄假如一個操作數在存儲器中,則另
36、一個操作數要么是寄存器操作數,要么是立即數,但是立即數不能作為目的存器操作數,要么是立即數,但是立即數不能作為目的操作數。下列兩條指令是錯誤的。操作數。下列兩條指令是錯誤的。 ADD EAXADD EAX,EBXEBX MOV 20H MOV 20H,ALAL。 (4 4)三操作數指令三操作數指令格式為:格式為: 標號標號: : 操作符操作符 OPDOPD,OPSOPS,立即數,立即數 ;注釋;注釋 如如 SHRD AXSHRD AX,BXBX,imm8/CLimm8/CL。將將BXBX寄存器中的寄存器中的imm8/CLimm8/CL位右移進入位右移進入AXAX中。中。 2.2.1616位和位
37、和3232位指令的區別:位指令的區別: 1616位編程時立即數、寄存器操作數及存儲器操作位編程時立即數、寄存器操作數及存儲器操作數只能使用數只能使用8 8位和位和1616位。位。3232位編程時立即數、寄存位編程時立即數、寄存器操作數和存儲器操作數可以是器操作數和存儲器操作數可以是8 8、1616、3232位。位。1616位編程時位編程時EAEA是是1616位,位,3232位編程時位編程時EAEA是是1616或或3232位。位。1616位編程時段寄存器只能使用位編程時段寄存器只能使用CSCS、SSSS、DSDS和和ESES,3232位編程時段寄存器可以是位編程時段寄存器可以是CSCS、SSSS
38、、DSDS、ESES、FSFS和和GSGS。 3.4 3.4 數據傳送指令數據傳送指令 3.4.1 3.4.1 一般數據傳送指令一般數據傳送指令 1.1.傳送指令傳送指令指令格式:指令格式:MOV OPDMOV OPD,OPSOPS功能:將源操作數傳送到目的地址中,功能:將源操作數傳送到目的地址中,即即(OPSOPS)OPDOPD。 MOVMOV有如下有如下五種五種具體格式:具體格式:MOV regMOV reg,regreg;兩個寄存器之間的數據;兩個寄存器之間的數據 ;傳送,如;傳送,如MOV ALMOV AL,BHBHMOV regMOV reg,memmem;內存單元內容送給寄存;內存
39、單元內容送給寄存 ;器,讀內存,如;器,讀內存,如MOV BXMOV BX,ESIESIMOV memMOV mem,regreg;寄存器的數據送給內存單;寄存器的數據送給內存單 ;元,寫內存,如;元,寫內存,如MOV ESIMOV ESI,BX BX MOV regMOV reg,immimm;立即數送給寄存器,;立即數送給寄存器, ;如;如MOV ECXMOV ECX,12345678H 12345678H MOV memMOV mem,immimm;立即數送給內存單元,如;立即數送給內存單元,如 ;MOV WORD PTR SIMOV WORD PTR SI,5678H 5678H 用于
40、段寄存器的傳送指令有三種格式:用于段寄存器的傳送指令有三種格式:MOV segMOV seg,regreg ; ;寄存器數據送給數據段寄存器,如寄存器數據送給數據段寄存器,如 MOV DSMOV DS,AXAXMOV regMOV reg,segseg ;段寄存器數據送給寄存器,如;段寄存器數據送給寄存器,如 MOV AXMOV AX,DSDSMOV memMOV mem,segseg ;段寄存器數據送給內存單元,如;段寄存器數據送給內存單元,如 MOV ESIMOV ESI,DSDS 2.2.數據交換指令數據交換指令: :指令格式:指令格式:XCHG OPDXCHG OPD,OPSOPS功能
41、:將源操作數和目的操作數的內容互換,即(功能:將源操作數和目的操作數的內容互換,即(OPSOPS)(OPDOPD)。)。XCHGXCHG一般有如下三種:一般有如下三種:XCHG regXCHG reg,regregXCHG regXCHG reg,memmemXCHG memXCHG mem,regreg例例【3-223-22】 XCHG AHXCHG AH,AL AL ;其操作是;其操作是AHAH和和ALAL兩兩 ;個寄存器的值交換;個寄存器的值交換 XCHG EAXXCHG EAX,EBX EBX ;其操作是;其操作是EAXEAX和和EBXEBX ;兩個寄存器值交換。;兩個寄存器值交換。
42、3.3.查表轉換指令:查表轉換指令:指令格式:指令格式:XLATXLAT或或XLATBXLATB功能:功能:DS:BX+ALALDS:BX+ALAL,或,或DS:EBX+ALALDS:EBX+ALAL,即,即 將將(BXBX)或()或(EBXEBX)為首地址、()為首地址、(ALAL)為偏移量的字節存儲)為偏移量的字節存儲單元中的內容送單元中的內容送ALAL。 由于由于ALAL的值不能超過的值不能超過256256,所以表的大小也不能超過,所以表的大小也不能超過256256個字節。個字節。 操作碼操作碼XLATXLAT的含義是:的含義是:translatetranslate(轉換)(轉換)例例【
43、3-233-23】 data segment ;data segment ;定義數據段定義數據段DSDStab db 0123456789 ;tab db 0123456789 ;單引號內匯編后,生成數單引號內匯編后,生成數 ;0 09 9對應的對應的ASCIIASCII碼碼data ends ;data ends ;數據段結束數據段結束mov bx,offsetmov bx,offset tab ; tab ;變量名變量名tabtab的偏移地址傳的偏移地址傳 ;送給;送給bxbx,指向表的首地址,指向表的首地址movmov al,4 ; al,4 ;表表tabtab中第中第5 5項的偏移量項
44、的偏移量4al4alxlatxlat ;(tab+4)=34hal ;(tab+4)=34hal該例完成的功能是將該例完成的功能是將alal中的一位中的一位1010進制數轉換成對應的進制數轉換成對應的ASCIIASCII碼(字符)。碼(字符)。 4. 4. 標志寄存器裝入指令標志寄存器裝入指令 標志寄存器保存指標志寄存器保存指令令 指令格式:指令格式:LAHFLAHF功能:功能:將標志寄存器低將標志寄存器低8 8位送位送AHAH。指令格式:指令格式:SAHFSAHF功能:功能:將將AHAH的內容送入標志寄存器的低的內容送入標志寄存器的低8 8位,而高位,而高8 8位保持不變位保持不變。該指令執
45、行后,。該指令執行后,OFOF、DFDF、IFIF、TFTF的值的值均不變,因為這均不變,因為這4 4個標志位于標志寄存器的高個標志位于標志寄存器的高8 8位。位。但但SFSF、ZFZF、AFAF、PFPF、CFCF的值會發生變化,因為這的值會發生變化,因為這5 5個標志位于標志寄存器的低個標志位于標志寄存器的低8 8位。位。 OF1115 14 13 12DF10IF9TF8SF7ZF65AF43PF21CF03.4.2 3.4.2 堆棧操作指令堆棧操作指令 堆棧堆棧是在內存是在內存RAMRAM中開辟的一段空間,中開辟的一段空間,利用利用“先進后出先進后出”或或“后進先出后進先出”原則存原則
46、存取數據取數據。如果把數據壓入堆棧,則堆棧。如果把數據壓入堆棧,則堆棧指針的值是減少的,即所謂的向下生成堆指針的值是減少的,即所謂的向下生成堆棧。由棧。由SS:SPSS:SP(1616位)或位)或SS:ESPSS:ESP(3232位)指位)指向棧底(棧空)或棧頂(棧不空)地址。向棧底(棧空)或棧頂(棧不空)地址。利用數據入棧指令利用數據入棧指令PUSHPUSH和數據出棧指令和數據出棧指令POPPOP操作堆棧。操作堆棧。 1.1.數據入棧指令:數據入棧指令:指令格式:指令格式:PUSH OPSPUSH OPS功能:功能:將將OPSOPS中的數據壓入堆棧中中的數據壓入堆棧中。若壓入堆棧中的。若壓入
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 ;內存中的數據必須是;內存中的數據必須是1616或或3232位位PUSH imm16/32 PUSH imm
48、16/32 ;將;將1616位或位或3232位立即數壓入堆棧位立即數壓入堆棧 例例【3-243-24】 PUSH AXPUSH AX 假定執行前,假定執行前,AX=1234HAX=1234H,ESP=00001000HESP=00001000H,ESPESP是堆棧指針。是堆棧指針。 執行時,把執行時,把AXAX的高的高8 8位(位(12H12H)壓入堆棧段)壓入堆棧段中中ESP-1ESP-1的存儲單元中,的存儲單元中,AXAX的低的低8 8位(位(34H34H)壓入)壓入堆棧段中堆棧段中ESP-2ESP-2的存儲單元中,對于堆棧中數據的存儲單元中,對于堆棧中數據的操作,按照的操作,按照“高字節
49、存放高地址、低字節存放高字節存放高地址、低字節存放低地址低地址”的規則存取。的規則存取。AXAX的值被壓入堆棧后,的值被壓入堆棧后,ESP-2ESPESP-2ESP,堆棧指針,堆棧指針ESPESP中的數值變成中的數值變成00000FFEH00000FFEH,AXAX內容不變。內容不變。 2.2.數據出棧指令:數據出棧指令:指令格式:指令格式:POP OPDPOP OPD功能:功能:將棧頂元素彈出送到某一寄存器、段寄存器將棧頂元素彈出送到某一寄存器、段寄存器(CSCS除外)或內存中除外)或內存中。注意。注意OPSOPS一定是一定是1616或或3232位。彈位。彈出棧的數據若是出棧的數據若是161
50、6位,位,SPSP或或ESPESP加加2 2;若數據是;若數據是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, 假定在上例的基假定在上例的基礎上執行礎上執行POP BXPOP BX。假定執行前,假定執行前,
51、BX=4567HBX=4567H,ESP=00000FFEHESP=00000FFEH。執行后,。執行后,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)存儲器操作數入棧和出棧存儲器操作數入棧和出棧 PUSHW mem
52、PUSHW mem ;1616位存儲器操作數入棧位存儲器操作數入棧 PUSHD memPUSHD mem ;3232位存儲器操作數入棧位存儲器操作數入棧 或或 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)多個多個1616位通用寄存器入棧和出棧位通用寄存器入棧和出棧 1616位數據入棧位數據入棧/ /出棧配對使用指令:出棧配對使用指令:PUSHAP
53、USHA/ /POPAPOPA。 PUSHAPUSHA 將將AXAX、BXBX、CXCX、DXDX、SPSP、BPBP、SISI、DIDI這這8 8個個1616位通用寄存器的值依次壓入堆棧,其中位通用寄存器的值依次壓入堆棧,其中SPSP的值是的值是在此條指令未執行之前的值,該指令執行后,在此條指令未執行之前的值,該指令執行后,SP-SP-16SP16SP。POPAPOPA 依次彈出堆棧中的依次彈出堆棧中的1616位字到位字到DIDI、SISI、BPBP、SPSP、DXDX、CXCX、BXBX、AXAX中,該指令執行后,中,該指令執行后,SP+16SPSP+16SP。 (3 3)多個多個3232
54、位通用寄存器入棧與出棧位通用寄存器入棧與出棧PUSHADPUSHAD 將將EAXEAX、ECXECX、EDXEDX、EBXEBX、ESPESP、EBPEBP、ESIESI、EDIEDI這這8 8個個3232位通用寄存器的值依次壓入堆棧,其中位通用寄存器的值依次壓入堆棧,其中ESPESP的值是在此條指令未執行之前的值,指令執行后,的值是在此條指令未執行之前的值,指令執行后,ESP-32ESPESP-32ESP。POPADPOPAD 依次彈出堆棧中的依次彈出堆棧中的3232位字到位字到EDIEDI、ESIESI、EBPEBP、ESPESP、EBXEBX、EDXEDX、ECXECX、EAXEAX中,
55、彈出完成后,中,彈出完成后,ESP+32ESPESP+32ESP。 上述兩組指令用于過程設計時,上述兩組指令用于過程設計時,PUSHAPUSHA和和PUSHADPUSHAD在過程開始保存通用寄存器的值,在過程開始保存通用寄存器的值,POPAPOPA和和POPADPOPAD在過程結束時恢復通用寄存器的值,必須配在過程結束時恢復通用寄存器的值,必須配對使用。對使用。 (4 4)1616位標志寄存器入棧和出棧位標志寄存器入棧和出棧PUSHF PUSHF ;將;將1616位標志寄存器位標志寄存器F F的值入棧的值入棧POPF POPF ;將棧頂內容從堆棧彈出送給;將棧頂內容從堆棧彈出送給1616位的標
56、志寄存器位的標志寄存器F F,或彈出送到,或彈出送到3232位標志寄存器位標志寄存器的低的低1616位中,只從棧頂彈出位中,只從棧頂彈出2 2個字節。個字節。操作碼操作碼POPFPOPF的含義是:的含義是:pop flags off stackpop flags off stack。例例【3-273-27】如果要將如果要將0FFFHFLAGS0FFFHFLAGS,可以用以下指令實現:,可以用以下指令實現:MOV AXMOV AX,0FFFH 0FFFH ;將常量;將常量0FFFHAX0FFFHAXPUSH AX PUSH AX ;AXAX入棧入棧POPF POPF ;將;將SS:SPSS:SP
57、中的中的0FFFH0FFFH標標 ; ;志寄存器志寄存器F F (5 5)3232位標志寄存器入棧和出棧位標志寄存器入棧和出棧PUSHFDPUSHFD ;是將;是將3232位標志寄存器位標志寄存器EFLAGSEFLAGS的值的值 ; ;入棧入棧POPFD POPFD ;從堆棧棧頂處連續彈出;從堆棧棧頂處連續彈出4 4字節送字節送 給給3232位的標志寄存器位的標志寄存器EFLAGSEFLAGS 當從堆棧中彈出當從堆棧中彈出3232位標志寄存器時,只有在當位標志寄存器時,只有在當前特權級為前特權級為0 0時,才能從堆棧中彈出時,才能從堆棧中彈出3232位標志并送給位標志并送給EFLAGSEFLA
58、GS,使得,使得EFLAGSEFLAGS中的中的I/OI/O特權級標志位特權級標志位IOPLIOPL才能才能被替換。被替換。 (6 6)ENTERENTER和和LEAVELEAVE指令指令 ENTER/LEAVEENTER/LEAVE指令把指令把EBPEBP寄存器內容寄存器內容入棧入棧/ /出棧,并在堆棧中為局部變量分出棧,并在堆棧中為局部變量分配配/ /釋放存儲空間,通常在子程序調用釋放存儲空間,通常在子程序調用時使用該組指令。時使用該組指令。 3.4.3 3.4.3 地址傳送指令:地址傳送指令: 1.1.傳送偏移地址指令傳送偏移地址指令 指令格式:指令格式:LEA OPDLEA OPD,O
59、PSOPS功能:功能:LEALEA(Load Effective AddressLoad Effective Address)指令按)指令按OPSOPS提供的尋提供的尋址方式計算偏移地址,并將其送入址方式計算偏移地址,并將其送入OPDOPD中中。例例【3-283-28】data segment ;data segment ;數據內存分配見圖數據內存分配見圖3-13-1bufbuf db ABCDEF ; db ABCDEF ;數據段內定義的數是數據段內定義的數是41H41H、42H42H、43H43H、 ;44H;44H、45H45H、46H46Hnum dwnum dw 1234H 1234
60、H,-5 ; -5 ; NUM DW 1234H ;變量變量NUM定義為字類型數據區的首地址定義為字類型數據區的首地址,存放有數據存放有數據1234Hdata endsdata endsmov si,offsetmov si,offset num ; num ;將將numnum的的eaea即即6 6傳送給傳送給sisilea si,numlea si,num ; ;與上一條指令等價與上一條指令等價mov dx,si ;DS:simov dx,si ;DS:si=1234hdx=1234hdx,數據傳送,數據傳送 2. 2. 傳送偏移地址到寄存器并傳送段值到傳送偏移地址到寄存器并傳送段值到數據段
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒童營養不良的識別與糾正
- 空氣動力學與飛行原理 課件 4.3.1-4.3.2 平飛
- 河北省邢臺市南和一中2025年高二化學第二學期期末達標檢測試題含解析
- 安全知識培訓總結(15篇)
- 2025屆福建省泉州市泉港二中化學高二下期末統考模擬試題含解析
- 海南省白沙中學2025屆化學高一下期末統考試題含解析
- 湖南省株洲市荷塘區明照中學等多校2024-2025學年七年級下學期6月期末聯考數學試卷(含答案)
- 廣西大學附屬中學2024-2025學年高一下學期期中考試英語試題
- 崗位練兵活動方案
- 小班益智區域活動方案
- 上海寶山區公開招聘社區工作者考試高頻題庫帶答案2025年
- 體育經紀人資格考試復習資料
- 2025年英語四級考試試卷及答案
- 中國絲綢文化課件
- 學科融合在初中音樂教學中的實踐研究
- 《分子間作用力理論》課件
- 2025春季學期國開電大本科《管理英語3》一平臺在線形考綜合測試形考任務試題及答案
- 人工血管內瘺穿刺技巧與護理
- 購房違約免責協議書
- 脊柱術后腦脊液漏護理
- 清華大學語文試題及答案
評論
0/150
提交評論