h212尋址方式_第1頁
h212尋址方式_第2頁
h212尋址方式_第3頁
h212尋址方式_第4頁
h212尋址方式_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第二章第二章 80 x8680 x86尋址方式和指令系統(tǒng)尋址方式和指令系統(tǒng)本章要求本章要求: : 1.掌握掌握數(shù)據(jù)、程序地址、堆棧地址尋址的概念及其各種尋址方法各種尋址方法。 2.了解80 x86指令的二進制編碼格式和源程序中的書寫格式。 3.掌握掌握80 x8680 x86指令系統(tǒng)指令系統(tǒng),注意從指令的功能功能、尋址方式尋址方式、對標(biāo)志位標(biāo)志位有無影響、效率效率等方面進行分析和掌握。 4.結(jié)合下一章內(nèi)容,對尋址方式和常用指令熟練應(yīng)用。2 2.1 80 x86 2.1 80 x86尋址方式尋址方式 通常指令分為操作碼操作碼和操作數(shù)操作數(shù)兩部分。 數(shù)據(jù)尋址方式數(shù)據(jù)尋址方式-表示指令中操作數(shù)所在

2、的方法。 程序地址尋址方式程序地址尋址方式-表示指令轉(zhuǎn)移地址所在的方法。 堆棧地址尋址堆棧地址尋址-堆棧段用于暫存數(shù)據(jù),并且為程序保存返回地址。 堆棧的存取方式不同于一般數(shù)據(jù)段,堆棧采用先進后出先進后出的存取方式。 3 2 21 11 1 數(shù)據(jù)尋址方式數(shù)據(jù)尋址方式 一立即尋址一立即尋址 操作數(shù)操作數(shù)(又稱立即數(shù)又稱立即數(shù))包含在指令中包含在指令中,作為指令的一部分,存放在代碼段中。 操作數(shù)存放形式存放形式為:低字節(jié)在前、高字節(jié)在后。即: 數(shù)據(jù)低位存放在地址低位存儲單元, 數(shù)據(jù)高位存放在地址高位存儲單元。 例: MOV AX,1234H ;AX1234H 4 MODEL TINY ; 選擇單個段

3、模式 586 ; 586實方式 CODE ; 代碼段開始 STARTUP ; 程序開始 MOV AX,1234H ; AX1234H MOV EBX,0 ; EBX0 MOV CL,55H ; CL55H EXIT ; 返回DOS END ; 文件結(jié)束 例例 2.1 立即尋址示例立即尋址示例 CS :EA 機器碼機器碼 1D24 : 0100 B83412 1D24 : 0103 66BB00000000 1D24 : 0109 B155 5MOV AX, 1234M.立即尋址立即尋址:B 8AHALAX3 4代碼段代碼段1 2指令緩沖寄存器讀取指令讀取指令分析指令分析指令執(zhí)行指令執(zhí)行指令B8

4、3412B8341212340100CS :IP1D24:1D24: 01011D24: 0102代碼段地址6 二寄存器尋址二寄存器尋址 操作數(shù)在寄存器中操作數(shù)在寄存器中,操作數(shù)可以是8位、16位或32位通用寄存器、16位段寄存器。 例2.2 MODEL TINY ; 選擇單個段模式 586 ; 586實方式 CODE ; 代碼段開始 地 址 機器碼 STARTUP ; 程序開始 lD24:0100 8BC3 MOV AX,BX ; AXBX lD24:0102 8ACA MOV CL,DL ; CLDL lD24:0104 668BF7 MOV ESI,EDI ; ESIEDI EXIT E

5、ND7 三存儲器尋址方式三存儲器尋址方式 操作數(shù)在存儲器中,指令以某種方式給出操操作數(shù)在存儲器中,指令以某種方式給出操作數(shù)在存儲器的地址作數(shù)在存儲器的地址。 操作數(shù)地址可以在指令里面直接給出,也可以放在寄存器中間接給出。 存放地址的寄存器,可以是規(guī)定的16位或32位通用寄存器。8 116位指令模式下的存儲器尋址方式位指令模式下的存儲器尋址方式 80 x86實模式為16位指令模式。 當(dāng)用寄存器間接給出操作數(shù)地址時,可使用的寄存器為BX,BP,SI,DI。 BX,SI或DI,默認(rèn)DS之內(nèi)容為段基址; BP,默認(rèn)SS之內(nèi)容為段基址。 段超越前綴段超越前綴(CS:ES:DS:SS:FS:GS:), 操

6、作數(shù)可以放在指定段。 如:ES:BX9 16位指令模式尋址結(jié)構(gòu)由4 4部分組成部分組成: 段基址段基址10H10H基址基址變址變址位移量位移量 即:即: BXBX SISI 8 8位補碼位補碼 段基址段基址10H10H BPBP DIDI 1616位補碼位補碼 16位偏移地址 20位物理地址 使用存儲器的第一個1MB空間。10 (1)直接尋址。)直接尋址。操作數(shù)在存儲器中,指令直接指令直接包含操作數(shù)的有效地址包含操作數(shù)的有效地址。例2.3 MODEL SMALL ;選擇small內(nèi)存模式 地地 址址 操作數(shù)操作數(shù) DATA ;數(shù)據(jù)段開始1D26:000C 12 BUF1 DB 12H ;變量B

7、UF1為字節(jié)類型1D26:000D 3355 BUF2 DW 5533H ;變量BUF2為字類型 CODE ;代碼的開始 地地 址址 機器碼機器碼 STARTUP ;程序開始1D24:0010 8A1E0C00 MOV BL,BUF1 ;BL12H1D24:0014 Al 0D00 MOV AX,BUF2 ;AX5533H EXIT ;返回DOS END ;文件結(jié)束110 00 D直接尋址直接尋址: :M.MOV AX, BUF2代碼段代碼段代碼段地址1 21D24: 00151D24: 0016A 1AHALAX1D26 :DS : EA數(shù)據(jù)段地址數(shù)據(jù)段數(shù)據(jù)段0D003 35 53 35 5

8、CSIP 0014 1D24: 1D24 0014000D讀取指令讀取指令分析指令分析指令執(zhí)行指令執(zhí)行指令0 D0 0指令緩沖寄存器A10D00A10D0012 (2)寄存器間接尋址)寄存器間接尋址。操作數(shù)在存儲器中,地址寄存器地址寄存器BX,BP,SI,DI存放操作數(shù)的有效地址存放操作數(shù)的有效地址。 例2.4 MODEL SMALL 地地 址址 操作數(shù)操作數(shù) DATA1D26:000E 1155 BUF1 DB 11H,55H1D26:0010 2233 BUF2 DW 3322H CODE 地地 址址 機器碼機器碼 STARTUP1D24:0010 BE0E00 MOV SI,OFFSET

9、 BUF1 ;變量BUF1的 有效地址送SI1D24:0013 8A04 MOV AL,SI ;AL11H1D24:0015 BF1000 MOV DI,OFFSET BUF2 ;變量BUF2的 有效地址送DI1D24:0018 8B1D MOV BX,DI ;BX3322H EXIT END13寄存器間接尋址寄存器間接尋址: :M.8 B1 D1 13 32 25 5數(shù)據(jù)段地址 MOV BX, DI代碼段代碼段數(shù)據(jù)段數(shù)據(jù)段1D24代碼段地址: 0019 1D24 0018CSIP 1D26 0010DSDIBX1D26 : 0011BHBL 1D24 0018: 1D26 0010:2 23

10、 3讀取指令讀取指令分析指令分析指令執(zhí)行指令執(zhí)行指令指令緩沖寄存8B1D14 例2.5 MOV AX,ES: SI 段超越前綴 ES:, 操作數(shù)的有效地址在SI中,段基址在ES中, 在附加段附加段中取字操作數(shù)送AX中。 采用間接尋址時,尋址寄存器尋址寄存器放在方括號方括號中,表示寄存器中存放的是地址。 這種尋址方式尋址方式適用于表格的處理適用于表格的處理。15 (3)(3)寄存器相對尋址寄存器相對尋址。操作數(shù)在存儲器中,操作數(shù)的有效地址為基址或變址值加上偏移量基址或變址值加上偏移量,即8位或16位偏移量采用補碼形式表示。 在計算有效地址時,如果偏移量為8位,則按帶符號數(shù)據(jù)擴展為16位,當(dāng)計算出

11、的有效地址超過FFFFH時,按64KB取模。 16 例例2.6 寄存器相對尋址寄存器相對尋址 MODEL SMALL 地 址 操作數(shù) DATA 1D26:0002 112233445566 BUF DB 11H,22H,33H, 44H,55H,66H CODE 地 址 機器碼 STARTUP 1D24:0010 BF0200 MOV DI, 2 ;DI2 1D24:0013 8A850200 MOV AL,BUFDI ;AL33H 1D24:0017 BF0500 MOV DI,5 ;Dl5 1D24:001A 8A9D0200 MOV BL,BUFDI ;BL66H EXIT END17寄

12、存器相對尋址寄存器相對尋址: :代碼段地址M.8 A9 D0 20 02 21 13 34 45 56 6 MOV BL, BUFDI代碼段代碼段數(shù)據(jù)段地址數(shù)據(jù)段數(shù)據(jù)段 1D24 001ACSIP 1D26DSBL 1D24 001A: 1D26:6 6DI 0005+讀取指令讀取指令分析指令分析指令執(zhí)行指令執(zhí)行指令指令緩沖寄存8A9D020002000007 00051D24 : 001B1D24 : 001C1D24 : 001D18 尋址寄存器為BX,BP,稱相對基址尋址相對基址尋址; 尋址寄存器為SI,DI,稱相對變址尋址相對變址尋址。 參與尋址的寄存器名要加方括號 ,偏移量可以不加方

13、括號,下列兩條指令是等價的: MOV AX,BX十5 MOV AX,5BX 寄存器相對尋址適用于?適用于? 實現(xiàn)對結(jié)構(gòu)或記錄實現(xiàn)對結(jié)構(gòu)或記錄等數(shù)據(jù)類型進行的操作。 19 (4)基址變址尋址。)基址變址尋址。操作數(shù)在存儲器中,操作數(shù)的有效地址為基址和變址之和,即有效操作數(shù)的有效地址為基址和變址之和,即有效地址所在的段基址由基址寄存器地址所在的段基址由基址寄存器BX,BP決定決定。 基址寄存器為BX時,缺省段寄存器為DS; 基址寄存器為BP時,缺省段寄存器為SS。 也可以使用段超越前綴,指定段寄存器。20例例2.7 基址變址尋址基址變址尋址 MODEL SMALL 地地 址址 操作數(shù)操作數(shù) DAT

14、A1D25:000C 11002200 BUF DW 0011H,0022H,0033H, 33004400 0044H,0055H,0066H 55006600 CODE 地地 址址 機器碼機器碼 STARTUP1D24:0010 BB0C00 MOV BX,OFFSET BUF ;BX000CH1D24:0013 BE0600 MOV SI,6 ;SI61D24:0016 8B00 MOV AX,BX+SI ;AX0044H EXIT END21基址變址尋址基址變址尋址: :M.8 B0 03 30 04 40 0 MOV AX, BX+SI代碼段代碼段地址+ 00121D25: 0013

15、數(shù)據(jù)段數(shù)據(jù)段地址 1D24 0016CSIP 000C 0006BXSI 1D25DSAXAHAL 1D24 0016: 1D25 000C 0006:0 04 4讀取指令讀取指令分析指令分析指令執(zhí)行指令執(zhí)行指令指令緩沖寄存8B001D24 : 001722下列指令是等價的: MOV AX,BP十DI; MOV AX,BPDI; 基址變址尋址適用于數(shù)組或表格存取數(shù)組或表格存取,將數(shù)組或表格首地址,放在基址寄存器中,而將數(shù)組或表格中的數(shù)據(jù)的相對位移,放在變址寄存器中,靈活地實現(xiàn)數(shù)組或表格中數(shù)據(jù)的存取。23 (5)相對基址變址尋址)相對基址變址尋址。操作數(shù)在存儲器中,操作數(shù)操作數(shù)的有效地址為基址、

16、變址和位移量之和的有效地址為基址、變址和位移量之和。 缺省段寄存器以基址寄存器為準(zhǔn)。下列指令是等價的: MOV AX,BX十SI十1122H; MOV AX,1122HBX十SI; MOV AX,1122HBXSI;指令中給出8位或16位偏移量,采用補碼表示。在計算有效地址時,對8位偏移量將帶符號擴展為16位,當(dāng)有效地址超過FFFFH時,按64KB取模。24例例2.8 2.8 相對基址變址尋址相對基址變址尋址 MODEL SMALL 地地 址址 操作數(shù)操作數(shù) DATA1D25:000E 000000000000 BUF1 DB 10HDUP(?) 000000000000 000000001D

17、25:001E 112233445566 BUF2 DB 11H,22H,33H, 44H,55H,66H CODE 地地 址址 機器碼機器碼 STARTUP1D24:0010 BB0E00 MOV BX,OFFSET BUF1 ;BX000EH1D24:0013 BF1100 MOV DI,11H ;DI0011H1D24:0016 8A4104 MOV AL,BX+DI十十4 ;AL66H EXIT END25相對基址變址尋址相對基址變址尋址: : 1D24 0016CSIP 000E 0011BXDI 1D25DSM.8 A4 15 56 6AL+代碼段地址 0023代碼段代碼段數(shù)據(jù)段數(shù)

18、據(jù)段 MOV AL, BX+DI+4 1D24 0016: 000E 00110 4 1D25:6 6讀取指令讀取指令分析指令分析指令執(zhí)行指令執(zhí)行指令指令緩沖寄存指令緩沖寄存8A410404268088的指令執(zhí)行過程返回返回27 212 程序地址尋址方式程序地址尋址方式 表示指令轉(zhuǎn)移地址所在的方式表示指令轉(zhuǎn)移地址所在的方式稱程序地址尋址方式。 用于轉(zhuǎn)移類指令和過程調(diào)用類指令的程序地址尋址方式有3種: 相對尋址 直接尋址 間接尋址28 一、相對尋址(段內(nèi))一、相對尋址(段內(nèi)) 為段內(nèi)尋址,段內(nèi)尋址, 指令中給出帶符號的相對偏移量,指令中給出帶符號的相對偏移量, 程序目標(biāo)地址為當(dāng)前程序目標(biāo)地址為當(dāng)

19、前IP值值(即轉(zhuǎn)移或調(diào)用指令即轉(zhuǎn)移或調(diào)用指令的下一條指令地址的下一條指令地址),加上相對偏移量作為偏移地,加上相對偏移量作為偏移地址址。 相對尋址類型如表2.1如示(P23)。29例2.9 相對尋址(段內(nèi)) MODEL TINY CODE 地 址 機器碼 STARTUP 1D24:0100 8BF7 MOV SI, DI 1D24:0102 EB02 JMP SHORT NEXT ;轉(zhuǎn)移到標(biāo)號NEXT處 1D24:0104 8ACA MOV CL, DL 1D24:0106 8AC3 NEXT: MOV AL, BL EXIT END3031二、直接尋址二、直接尋址 (段間)(段間) 直接尋址

20、是指指令中直接給出轉(zhuǎn)移指令的目指令中直接給出轉(zhuǎn)移指令的目標(biāo)地址標(biāo)地址。 在段間轉(zhuǎn)移中,指令中給出目標(biāo)代碼段段地址或代碼段選擇符,以及16位或32位偏移地址。 32例2.10 直接尋址 (段間) MODEL MEDIUM CODE CODE1 地 址 機器碼 STARTUP1D24:0010 8BF7 MOV SI,DI1D24:0012 EA0A00251D JMP FAR PTR NEXT ;轉(zhuǎn)CODE2段標(biāo)號NEXT處1D24:0017 B210 MOV DL,10H 地 址 機器碼 CODE CODE21D25:000A 8ACA NEXT:MOV CL,DL1D25:000C 32D2

21、 XOR DL,DL EXIT END等價于JMP 1D25: 000A33三、間接尋址三、間接尋址(段內(nèi)、段間段內(nèi)、段間) 間接尋址分段內(nèi)和段間間接尋址, 指令中以間接方式間接方式給出轉(zhuǎn)移指令的目標(biāo)地址, 轉(zhuǎn)移指令的目標(biāo)地址,通常存放在數(shù)據(jù)段。轉(zhuǎn)移指令的目標(biāo)地址,通常存放在數(shù)據(jù)段。若采用若采用 (E) BP尋址,指令目標(biāo)地址放在堆棧段尋址,指令目標(biāo)地址放在堆棧段。使用段超越前綴,也可以存放在其它段。 34例2.11 間接尋址(段內(nèi)、段間) MODEL MEDIUM 地 址 操作數(shù) DATA1D26:0000 0800251D BUF DD NEXT ;標(biāo)號NEXT的地址 CODECODE1

22、地 址 機器碼 STARTUP1D24:0010 BB0000 MOV BX,OFFSET BUF1D24:0013 FF2F JMP FAR PTRBX ;轉(zhuǎn)移到CODE2段 標(biāo)號NEXT處1D24:0015 B210 MOV DL,10 CODE CODE21D25:0008 8ACA NEXT: MOV CL,DL1D25:000A 32D2 XOR DL,DL EXIT END35362 21 13 3 堆棧地址尋址堆棧地址尋址 堆棧段堆棧段用于暫存數(shù)據(jù),用于暫存數(shù)據(jù),并且為程序并且為程序保存返回保存返回地址地址。堆棧的存取方式不同于一般數(shù)據(jù)段,堆棧。堆棧的存取方式不同于一般數(shù)據(jù)段,堆

23、棧采用采用先進后出先進后出的存取方式。的存取方式。 使用使用PUSHPUSH指令指令將操作數(shù)壓入堆棧,使用將操作數(shù)壓入堆棧,使用POPPOP指指令令從堆棧中彈出操作數(shù)。堆棧棧頂指針為從堆棧中彈出操作數(shù)。堆棧棧頂指針為(E)SP(E)SP。 在在1616位指令模式下,堆棧地址由位指令模式下,堆棧地址由SSSS10H10HSPSP形式。形式。 在在3232位指令模式下,段寄存器位指令模式下,段寄存器SSSS存放段選擇存放段選擇符,通過段選擇符訪問段描述符,獲取符,通過段選擇符訪問段描述符,獲取3232位段址,位段址,ESPESP存放偏移地址。存放偏移地址。 37 使用PUSH 源操作數(shù) 指令,向堆

24、棧壓入一個字的具體操作為: SPSP1 ;源操作數(shù)高8位存入棧頂 SPSP1 ;源操作數(shù)低8位存入棧頂 使用POP目的操作數(shù) 指令,從堆棧彈出一個字的具體操作為: SP SP1;棧頂內(nèi)容傳送到目的操作數(shù)低8位 SPSP1;棧頂內(nèi)容傳送到目的操作數(shù)高8位; 堆棧操作數(shù)據(jù)類型允許為字或雙字,操作數(shù)為字類型時,SP值加/減2,操作數(shù)為雙字類型時,ESP值加/減4。38圖2.10 進棧出棧操作示意圖 堆棧操作主要用途為:寄存器內(nèi)容保護,現(xiàn)場和返回地址的保存,參數(shù)傳遞、存儲局部變量。3922 80 x86指令格式指令格式 221 80 x86指令編碼格式指令編碼格式 是指指令的機器碼表示格式指令的機器碼

25、表示格式,其最多可以由以下5部分組合構(gòu)成: 前 綴 操作碼 尋址方式 偏移量 立即數(shù) 02字節(jié) 12字節(jié) 02字節(jié) 04字節(jié) 04字節(jié) 一前綴一前綴(使使16位位32位位) 指令前綴有兩種:地址長度前綴 操作數(shù)長度前綴40 匯編程序在匯編時,根據(jù)當(dāng)前代碼段的USE屬性、地址長度屬性、操作數(shù)長度屬性決定是否產(chǎn)生前綴??梢詫⒅噶畈僮鲾?shù)或地址長度,由16位轉(zhuǎn)換到32位,或由32位轉(zhuǎn)換到16位。 (1)操作數(shù)長度前綴 (66H) 用于改變當(dāng)前指令模式操作數(shù)長度缺省值。 當(dāng)16位指令模式下,操作數(shù)用32位寄存器,則在指令前加前綴66H; 當(dāng)在32位指令模式下,操作數(shù)用16位寄存器,則在指令前加前綴66H

26、,允許用16位寄存器。 41 (2)地址長度前綴 (67H) 用于改變當(dāng)前指令模式地址長度缺省值。其用法與操作數(shù)指令長度類似。 例如在16位指令模式下,指令匯編后機器碼如下: 67668B03 MOV AX,WORD PTREBX 在指令機器碼前加前綴67H和66H,表示允許使用32位寄存器,但地址長度為16位,允許地址范圍為64KB內(nèi)。42二操作碼及尋址方式二操作碼及尋址方式 操作碼及尋址方式屬于指令中最基本組成部分,大多數(shù)指令編碼格式為: 操作碼操作碼規(guī)定處理器執(zhí)行的操作,如傳送,加、減等,具體操作采用編碼表示。 其中: D位規(guī)定數(shù)據(jù)流的方向,為第2字節(jié)指定的R/M域和REG域之間數(shù)據(jù)流動

27、方向。 W位規(guī)定操作數(shù)長度是字節(jié),字或雙字。43 尋址方式尋址方式尋找操作數(shù)的方式。 7 6 5 3 2 0 MOD域選擇尋址類型,指定R/M域為寄存器還是存儲器,如為存儲器,還要指定是否有偏移量。 REG域采用三位編碼表示8個寄存器。 R/M域表示寄存器或存儲器,由MOD域指定,如為寄存器,則與REG域相同;如為存儲器,則表示8種尋址方式。 modregr/m44三偏移量及立即數(shù)三偏移量及立即數(shù) 偏移量允許指令中直接給出尋址方式所需的偏移量。 立即數(shù)允許指令中直接給出操作數(shù)。45222 80 x86指令格式指令格式 指令格式是指指令在源程序中的書寫格式指令在源程序中的書寫格式,指令基本格式為: 標(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論