03 80X86指令系統(tǒng)_第1頁
03 80X86指令系統(tǒng)_第2頁
03 80X86指令系統(tǒng)_第3頁
03 80X86指令系統(tǒng)_第4頁
03 80X86指令系統(tǒng)_第5頁
已閱讀5頁,還剩370頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第3章章 80X86指令系統(tǒng)指令系統(tǒng) 本章主要內(nèi)容本章主要內(nèi)容 本章將主要介紹本章將主要介紹80X86微處理器的指令格式、微處理器的指令格式、 尋址方式、指令系統(tǒng)、尋址方式、指令系統(tǒng)、DOS系統(tǒng)功能調(diào)用和系統(tǒng)功能調(diào)用和 BIOS功能調(diào)用。功能調(diào)用。 其中,其中,尋址方式尋址方式和和基本指令基本指令的學(xué)習(xí)是重點(diǎn)。的學(xué)習(xí)是重點(diǎn)。 通過本章的學(xué)習(xí),讀者可以了解和掌握通過本章的學(xué)習(xí),讀者可以了解和掌握80X86 指令系統(tǒng),為后續(xù)的指令系統(tǒng),為后續(xù)的80 x86匯編語言程序設(shè)計匯編語言程序設(shè)計 奠定基礎(chǔ)。奠定基礎(chǔ)。 3.1 80 x86微處理器的指令格式微處理器的指令格式 程序程序是使計算機(jī)完成一個任

2、務(wù)的一組命令或是使計算機(jī)完成一個任務(wù)的一組命令或 指令序列指令序列。 指令指令是規(guī)定微處理器執(zhí)行某種特定操作的是規(guī)定微處理器執(zhí)行某種特定操作的 “命令命令”。 指令系統(tǒng)指令系統(tǒng)是是CPU機(jī)器指令的集合。機(jī)器指令的集合。 不同類型和型號的不同類型和型號的CPU的機(jī)器指令、指令系的機(jī)器指令、指令系 統(tǒng)是不一樣的。統(tǒng)是不一樣的。 系統(tǒng)控制指令集系統(tǒng)控制指令集 系統(tǒng)控制指令集系統(tǒng)控制指令集 基本基本 指令集指令集 基本基本+增增 強(qiáng)指令強(qiáng)指令 集集 基本基本+增增 強(qiáng)強(qiáng)+專用專用 指令集指令集 8086/80888028680386及以上及以上 圖圖 Intel 80 x86 Intel 80 x86

3、指令集的發(fā)展指令集的發(fā)展 Intel 80 x86指令集的發(fā)展指令集的發(fā)展 機(jī)器指令機(jī)器指令由二進(jìn)制數(shù)組成,計算機(jī)硬件只能由二進(jìn)制數(shù)組成,計算機(jī)硬件只能 識別存儲和運(yùn)行機(jī)器指令。識別存儲和運(yùn)行機(jī)器指令。 機(jī)器指令無論是在書寫、閱讀和記憶都是非機(jī)器指令無論是在書寫、閱讀和記憶都是非 常困難的,為此,產(chǎn)生了符號化的機(jī)器指令,常困難的,為此,產(chǎn)生了符號化的機(jī)器指令, 即即助記符助記符/符號指令符號指令/匯編指令匯編指令。 80X86匯編語言的指令是一種符號語言,用助匯編語言的指令是一種符號語言,用助 記符表示操作碼,用符號或符號地址表示操記符表示操作碼,用符號或符號地址表示操 作數(shù)或操作數(shù)地址,它與

4、機(jī)器指令作數(shù)或操作數(shù)地址,它與機(jī)器指令基本上基本上是是 一一對應(yīng)一一對應(yīng)的。的。 機(jī)器指令由機(jī)器指令由操作碼操作碼字段和字段和操作數(shù)操作數(shù)字段兩部分組成。字段兩部分組成。 字段字段:說明:說明CPU完成何種操作。在機(jī)器指令完成何種操作。在機(jī)器指令 中對每個操作指定一個確定的中對每個操作指定一個確定的二進(jìn)制二進(jìn)制代碼。代碼。 如果指令比較長需要用多個連續(xù)的存儲單元來存儲,如果指令比較長需要用多個連續(xù)的存儲單元來存儲, 通常第一個存儲單元的字節(jié)表示,不夠可以占第二通常第一個存儲單元的字節(jié)表示,不夠可以占第二 個字節(jié)中的某幾個二進(jìn)制位。個字節(jié)中的某幾個二進(jìn)制位。 字段字段:說明參加操作的:說明參加操

5、作的數(shù)據(jù)數(shù)據(jù)對象或其所在的對象或其所在的 存儲單元存儲單元地址地址。操作數(shù)字段可以有一個,二個或三。操作數(shù)字段可以有一個,二個或三 個操作數(shù)或者操作數(shù)所在存儲單元的地址。個操作數(shù)或者操作數(shù)所在存儲單元的地址。 80X86 CPU指令系統(tǒng)采用指令系統(tǒng)采用變長變長的指令格式的指令格式(根根 據(jù)指令的使用頻率據(jù)指令的使用頻率) 。 一條一條指令指令可以由可以由1 11616個字節(jié)組成。較長的指個字節(jié)組成。較長的指 令需要占用令需要占用連續(xù)連續(xù)多個的存儲單元。多個的存儲單元。 指令在多個存儲單元中連續(xù)存放,其中,存指令在多個存儲單元中連續(xù)存放,其中,存 放指令的放指令的第一個第一個存儲單元地址稱為存儲

6、單元地址稱為。 一條指令可能包含需要操作的對象即一條指令可能包含需要操作的對象即操作數(shù)操作數(shù), 也可能占用內(nèi)存的多個存儲單元。一個操作也可能占用內(nèi)存的多個存儲單元。一個操作 數(shù)如果占用連續(xù)多個的存儲單元,也是進(jìn)行數(shù)如果占用連續(xù)多個的存儲單元,也是進(jìn)行 連續(xù)連續(xù)存放。存放。 其中,其中, 。 存放數(shù)據(jù)的存放數(shù)據(jù)的第一個第一個存儲單元地址稱為存儲單元地址稱為 。 3.1.1 80 x86微處理器的指令編碼格式微處理器的指令編碼格式 80X86機(jī)器指令機(jī)器指令編碼的一般形式,如圖所示。編碼的一般形式,如圖所示。 opcod modr/mregdispdata 操作碼操作碼 方式存儲器方式存儲器 位移

7、量位移量 立即數(shù)立即數(shù) (Mod 字節(jié)字節(jié)) 圖圖3-1 8086/8088/80286指令編碼的一般形式指令編碼的一般形式 圖圖3-2 8086/8088不同字長不同字長的指令格式類型的指令格式類型 圖圖3-3 操作碼和尋址方式字節(jié)格式操作碼和尋址方式字節(jié)格式 表表3-1 reg域及其說明域及其說明 regW=1 (字字 操操 作作) W=0(字字 節(jié)操節(jié)操 作作) 000AXAL 001CXCL 010DXDL 011BXBL 100SPAH 101BPCH 110SIDH 111DIBH 表表3-2 mod(方式方式)域及說明域及說明 mo d 方方 式式 00存儲器尋址,存儲器尋址,

8、沒有位移量沒有位移量 01存儲器尋址,存儲器尋址, 有有8位移量位移量 10存儲器尋址,存儲器尋址, 有有16位移量位移量 11寄存器尋址,寄存器尋址, 沒有位移量沒有位移量 mod r/m 存儲器尋址存儲器尋址寄存器尋址寄存器尋址 邏輯地址的計算公式邏輯地址的計算公式W=0W=1 Mod=00BMod=01BMod=10BMod=11B 000 001 010 011 100 101 110 111 DS:BX+SI DS:BX+DI SS:BP+SI SS:BP+DI DS:SI DS:DI DS:disp16 DS:BX DS:BX+SI+disp8 DS:BX+DI+disp8 SS:

9、BP+SI+disp8 SS:BP+DI+disp8 DS:SI+disp8 DS:DI+disp8 SS:BP+disp8 DS:BX+disp8 DS:BX+SI+disp16 DS:BX+DI+disp16 SS:BP+SI+disp16 SS:BP+DI+disp16 DS:SI+disp16 DS:DI+disp16 SS:BP+disp16 DS:BX+disp16 AL CL DL BL AH CH DH BH AX CX DX BX SP BP SI DI 表表3-3 mod與與r/m域所組成的尋址方式域所組成的尋址方式 【例【例3-1】寫出:符號指令】寫出:符號指令 MOV

10、AH , BX+SI+88H 所對應(yīng)的機(jī)器指令編碼。所對應(yīng)的機(jī)器指令編碼。 OpcodeDWmod reg r/mdisp8 0000001101 100 000 10001000 3.1.2 80 x86微處理器的指令書寫格式微處理器的指令書寫格式 與機(jī)器指令相同,符號指令同樣由操作碼字與機(jī)器指令相同,符號指令同樣由操作碼字 段和操作數(shù)字段組成段和操作數(shù)字段組成: 操作碼操作數(shù)(地址碼)操作數(shù)(地址碼) n操作碼操作碼(OP: Operation Code):描述計算機(jī)所要執(zhí)描述計算機(jī)所要執(zhí) 行的操作,其長度取決于指令系統(tǒng)中指令的條數(shù)。行的操作,其長度取決于指令系統(tǒng)中指令的條數(shù)。 n操作數(shù)操

11、作數(shù)(Operand):描述該指令的操作對象描述該指令的操作對象(地址碼地址碼 /操作數(shù)操作數(shù)),如給出參與操作的操作數(shù)的值是多少或者,如給出參與操作的操作數(shù)的值是多少或者 指出操作數(shù)存放在何處、操作的結(jié)果應(yīng)送往何處等信指出操作數(shù)存放在何處、操作的結(jié)果應(yīng)送往何處等信 息。操作數(shù)可分為存儲器操作數(shù),寄存器操作數(shù)和立息。操作數(shù)可分為存儲器操作數(shù),寄存器操作數(shù)和立 即數(shù)。即數(shù)。 根據(jù)操作數(shù)地址碼部分所給出的地址個數(shù),根據(jù)操作數(shù)地址碼部分所給出的地址個數(shù), 分為分為: 零地址零地址指令指令 格式:格式: 指令中只有操作碼沒有操作數(shù),所有地址均指令中只有操作碼沒有操作數(shù),所有地址均 隱含約定,也叫無操作

12、數(shù)指令。隱含約定,也叫無操作數(shù)指令。 OP 通常有以下情況:通常有以下情況: 無需任何操作數(shù)無需任何操作數(shù),如空操作指令、,如空操作指令、CPU控控 制指令等。制指令等。 所需的操作數(shù)是所需的操作數(shù)是隱含約定隱含約定的。如字符串指的。如字符串指 令中的源、目的操作數(shù)都是隱含默認(rèn)的;堆令中的源、目的操作數(shù)都是隱含默認(rèn)的;堆 棧指令中,所需操作數(shù)默認(rèn)在堆棧中由棧指令中,所需操作數(shù)默認(rèn)在堆棧中由SP隱隱 含指出;對默認(rèn)寄存器內(nèi)容進(jìn)行操作等。含指出;對默認(rèn)寄存器內(nèi)容進(jìn)行操作等。 一地址一地址指令指令 格式:格式: 只有目的操作數(shù)只有目的操作數(shù)的單操作數(shù)指令的單操作數(shù)指令 功能:功能:OP(D1)D1

13、隱含目的操作數(shù)隱含目的操作數(shù)的雙操作數(shù)指令的雙操作數(shù)指令 功能:功能:(D1)OP(A)A OPD1 二地址二地址指令指令 格式:格式: 功能:功能:(D1)OP(D2)D1 注意,兩操作數(shù)運(yùn)算指令中,目的操作數(shù)原注意,兩操作數(shù)運(yùn)算指令中,目的操作數(shù)原 來的內(nèi)容將被新的執(zhí)行結(jié)果所替代。來的內(nèi)容將被新的執(zhí)行結(jié)果所替代。 OPD1D2 三地址三地址指令指令 格式:格式: 功能:功能:(D1)OP(D2)D3 該指令表示操作數(shù)該指令表示操作數(shù)D1、D2執(zhí)行執(zhí)行OP指定的操指定的操 作,將結(jié)果存入作,將結(jié)果存入D3所指定的地址中。所指定的地址中。 OPD1D2D3 總的來說,零地址、一地址和二地址指令

14、都總的來說,零地址、一地址和二地址指令都 具有指令短、執(zhí)行速度快、硬件實(shí)現(xiàn)簡單等具有指令短、執(zhí)行速度快、硬件實(shí)現(xiàn)簡單等 優(yōu)點(diǎn),一般在結(jié)構(gòu)簡單、字長較短的小型機(jī)優(yōu)點(diǎn),一般在結(jié)構(gòu)簡單、字長較短的小型機(jī) 和微型機(jī)中采用。和微型機(jī)中采用。 而兩地址以上的指令具有功能強(qiáng)、便于編程而兩地址以上的指令具有功能強(qiáng)、便于編程 等優(yōu)點(diǎn)多為字節(jié)較長的中型、大型機(jī)采用。等優(yōu)點(diǎn)多為字節(jié)較長的中型、大型機(jī)采用。 此外,并非所有計算機(jī)有具有以上介紹的全此外,并非所有計算機(jī)有具有以上介紹的全 部指令格式。部指令格式。 3.2 80X86的尋址方式的尋址方式 尋址方式:一般的,是指在指令中尋找尋址方式:一般的,是指在指令中尋找

15、操作操作 數(shù)數(shù)的方式。的方式。 思考:為什么思考:為什么指令指令無需專門考慮尋址問題?無需專門考慮尋址問題? 操作數(shù)的存放位置包含操作數(shù)的存放位置包含情況:情況: (1)操作數(shù)包含在操作數(shù)包含在CPU的一個內(nèi)部寄存器中。的一個內(nèi)部寄存器中。 例:例:INC CX 對應(yīng)的機(jī)器指令中的操作數(shù)字段是對應(yīng)的機(jī)器指令中的操作數(shù)字段是CPU內(nèi)部寄存器內(nèi)部寄存器 的一組機(jī)器編碼。這種操作數(shù)稱為的一組機(jī)器編碼。這種操作數(shù)稱為寄存器寄存器(直接直接)尋尋 址址。 (2)操作數(shù)在內(nèi)存數(shù)據(jù)區(qū)。操作數(shù)在內(nèi)存數(shù)據(jù)區(qū)。(“”的概念的概念) 絕大多數(shù)絕大多數(shù)操作數(shù)存放在內(nèi)存單元中。操作數(shù)存放在內(nèi)存單元中。 一個操作數(shù)占用一

16、個或者連續(xù)多個存儲單元中。機(jī)一個操作數(shù)占用一個或者連續(xù)多個存儲單元中。機(jī) 器指令中操作數(shù)字段包含著此操作數(shù)所在的第一個器指令中操作數(shù)字段包含著此操作數(shù)所在的第一個 存儲單元的存儲單元的邏輯地址邏輯地址。 這種操作數(shù)稱之為這種操作數(shù)稱之為存儲器操作數(shù)存儲器操作數(shù)或者或者內(nèi)存操作數(shù)內(nèi)存操作數(shù)。 (3)操作數(shù)在接口電路的操作數(shù)在接口電路的I/O端口端口寄存器中。寄存器中。 (4)操作數(shù)操作數(shù)包含在指令中包含在指令中 即指令的操作數(shù)字段包含操作數(shù)本身。這種即指令的操作數(shù)字段包含操作數(shù)本身。這種 操作數(shù)為操作數(shù)為立即數(shù)立即數(shù)。例:。例:MOV CX ,100 立即尋址立即尋址 1非存儲器操作數(shù)尋址非存儲

17、器操作數(shù)尋址 寄存器尋址寄存器尋址 X86尋址方式尋址方式 直接尋址直接尋址 寄存器間接尋址寄存器間接尋址 2. 存儲器操作數(shù)尋址存儲器操作數(shù)尋址 基址尋址基址尋址 變址尋址變址尋址 基址加變址尋址基址加變址尋址 立即數(shù)立即數(shù)(Immediate Address) :操作數(shù)直接存:操作數(shù)直接存 放在指令中,緊跟在操作碼之后,作為放在指令中,緊跟在操作碼之后,作為指令指令 的一部分的一部分存放在代碼段里。存放在代碼段里。 在指令譯碼執(zhí)行時,可以立即得到,可以是在指令譯碼執(zhí)行時,可以立即得到,可以是8 位或位或16位或位或32位的。位的。 注意:立即尋址主要用來給寄存器或存儲器注意:立即尋址主要用

18、來給寄存器或存儲器 賦賦初值初值。 【例】【例】 MOV AX,1234h AH AL OP 34H 12H 指令 代碼段代碼段 存儲器存儲器 OP表示該指令的操作碼部分;表示該指令的操作碼部分; 1234H則為立即數(shù),它是指令的一個組成部分。則為立即數(shù),它是指令的一個組成部分。 說明:在雙操作數(shù)指令中:說明:在雙操作數(shù)指令中: 兩個操作數(shù)用逗號兩個操作數(shù)用逗號“,”分隔:分隔: 源操作數(shù)源操作數(shù)在指令執(zhí)行結(jié)束之后通常不改變;在指令執(zhí)行結(jié)束之后通常不改變; 目的操作數(shù)目的操作數(shù)通常作為指令的一個操作數(shù),同通常作為指令的一個操作數(shù),同 時在指令結(jié)束之后保存結(jié)果時在指令結(jié)束之后保存結(jié)果 。 匯編語

19、言規(guī)定:匯編語言規(guī)定:源程序源程序中:中: 立即數(shù)必須以數(shù)字開頭立即數(shù)必須以數(shù)字開頭,以,以字母開頭的字母開頭的16進(jìn)進(jìn) 制數(shù)必須前面加制數(shù)必須前面加0;操作數(shù)的;操作數(shù)的數(shù)制用后綴表示數(shù)制用后綴表示: B、D、O、H;操作數(shù)可以是操作數(shù)可以是位或位或16位或位或 者更高位者更高位。 8位以上的立即數(shù)遵循高位字節(jié)在高地址,低位以上的立即數(shù)遵循高位字節(jié)在高地址,低 位字節(jié)在低地址的原則。位字節(jié)在低地址的原則。 在在編譯編譯過程中,所有立即數(shù)一律編譯成等值過程中,所有立即數(shù)一律編譯成等值 的的二進(jìn)制數(shù)二進(jìn)制數(shù),負(fù)數(shù)自動以,負(fù)數(shù)自動以補(bǔ)碼補(bǔ)碼方式存儲,用方式存儲,用 單引號括起來的字符或者字符串?dāng)?shù)據(jù)

20、以單引號括起來的字符或者字符串?dāng)?shù)據(jù)以ASCII 碼碼方式存儲。立即數(shù)還可以是算術(shù)方式存儲。立即數(shù)還可以是算術(shù)表達(dá)式表達(dá)式形形 式,編譯時會自動計算出二進(jìn)制結(jié)果。式,編譯時會自動計算出二進(jìn)制結(jié)果。 理解:計算機(jī)內(nèi)部的任何信息都是一個理解:計算機(jī)內(nèi)部的任何信息都是一個二進(jìn)制二進(jìn)制位串。位串。 MOV AL,01010101B MOV AX,-120 MOV AX,A0H ;思考:指令是否正確?思考:指令是否正確? 對比:對比:C語言:符號名的定義規(guī)則;語言:符號名的定義規(guī)則; MOV EAX,12345678H MOV DL, MOV CX,3*5 MOV BX,1234H MOV BX,34H

21、;思考:指令是否正確?思考:指令是否正確? 對比:對比: C語言:語言:int i; char c; i=c; MOV BL,1234H ;思考:指令是否正確?思考:指令是否正確? 對比:對比: C語言:語言:int i; char c; c=i; MOV CL,4 MOV CL,300 ;思考:指令是否正確?思考:指令是否正確? 對比:對比: C語言:語言:char c=300是否正確?是否正確? 寄存器寄存器(直接直接)尋址方式尋址方式 操作數(shù)放在操作數(shù)放在CPU的一個通用寄存器中。在匯的一個通用寄存器中。在匯 編指令中:直接寫出指定編指令中:直接寫出指定寄存器的名稱寄存器的名稱。 對于對

22、于32位操作數(shù),寄存器可以是位操作數(shù),寄存器可以是EAX、EBX、 ECX、EDX、ESI、EDI、ESP、EBP等;等; 對于對于16位操作數(shù),寄存器可以是位操作數(shù),寄存器可以是AX、BX、 CX、DX、 SI、DI、SP、BP等;等; 對于對于8位操作數(shù),寄存器可以是位操作數(shù),寄存器可以是AL、AH、BL、 BH、CL、CH、DL、DH等。等。 特點(diǎn):訪問特點(diǎn):訪問速度快速度快。 MOV AX,1234H;立即數(shù)尋址;立即數(shù)尋址 MOV BX,5678H;立即數(shù)尋址;立即數(shù)尋址 ADD AX,BX;寄存器直接尋址;寄存器直接尋址 執(zhí)行:執(zhí)行:1234HAX 5678HBX (AX)+(BX

23、)AX 了解:了解: 雖然操作數(shù)可存放在雖然操作數(shù)可存放在CPU內(nèi)部內(nèi)部任意一個通用任意一個通用 寄存器寄存器中,而且它們都能參與算術(shù)或邏輯運(yùn)中,而且它們都能參與算術(shù)或邏輯運(yùn) 算并存放運(yùn)算結(jié)果。算并存放運(yùn)算結(jié)果。 但是,從但是,從CPU的硬件結(jié)構(gòu)的角度考慮:若讓的硬件結(jié)構(gòu)的角度考慮:若讓 AX參與運(yùn)算并將結(jié)果存放在參與運(yùn)算并將結(jié)果存放在AX中的話,通中的話,通 常指令執(zhí)行時間要短一些。常指令執(zhí)行時間要短一些。 AX:累加寄存器累加寄存器。 存儲器操作數(shù)尋址方式存儲器操作數(shù)尋址方式 絕大多數(shù)絕大多數(shù)操作數(shù)存放在一個或連續(xù)多個操作數(shù)存放在一個或連續(xù)多個 中。中。 CPU執(zhí)行指令時根據(jù)程序中的執(zhí)行指

24、令時根據(jù)程序中的邏輯地址邏輯地址自動自動 轉(zhuǎn)換得到轉(zhuǎn)換得到物理地址物理地址后尋址某個存儲單元,最后尋址某個存儲單元,最 后取出其中的信息。后取出其中的信息。 在在Intel的的80X86系列系列CPU中,由于采用中,由于采用分段管分段管 理理方式,物理地址必須通過邏輯地址獲得。方式,物理地址必須通過邏輯地址獲得。 事實(shí)上程序員在編寫程序時不可能也不應(yīng)該事實(shí)上程序員在編寫程序時不可能也不應(yīng)該 直接給出物理地址。直接給出物理地址。 任何一個內(nèi)存單元的地址任何一個內(nèi)存單元的地址()實(shí)際上由實(shí)際上由 兩部分組成:兩部分組成: 1、段的段的基地址基地址:該存儲單元所在段的基地址,:該存儲單元所在段的基地

25、址, 即該段的即該段的第一個第一個存儲單元的地址存儲單元的地址(如果是尋找如果是尋找 操作數(shù),在大多數(shù)情況下,數(shù)據(jù)存放在數(shù)據(jù)操作數(shù),在大多數(shù)情況下,數(shù)據(jù)存放在數(shù)據(jù) 段寄存器段寄存器DS中中); 2、段內(nèi)段內(nèi)偏移量偏移量:該存儲單元相對于所在段的:該存儲單元相對于所在段的 段基址的距離段基址的距離/偏移量。稱為偏移量。稱為偏移地址偏移地址或者或者有有 效地址效地址( EA, Effective Address) 。 在存儲器操作數(shù)尋址方式中,一個存儲單元在存儲器操作數(shù)尋址方式中,一個存儲單元完整的完整的 邏輯地址表達(dá)式邏輯地址表達(dá)式為:為: 段段R:基址基址R變址變址R * *比例因子位移量比例

26、因子位移量 冒號之前稱為冒號之前稱為段超越前綴段超越前綴助記符助記符(簡稱段超越前綴簡稱段超越前綴), 用于通知用于通知CPU在生成物理地址時應(yīng)該使用那個在生成物理地址時應(yīng)該使用那個段寄段寄 存器存器的內(nèi)容以獲取邏輯段的段基址。的內(nèi)容以獲取邏輯段的段基址。 冒號之后的部分即為冒號之后的部分即為有效有效/偏移地址偏移地址表達(dá)式。用來通表達(dá)式。用來通 知知CPU在生成物理地址時在一個邏輯段中的某個存在生成物理地址時在一個邏輯段中的某個存 儲單元,相對于段基址的偏移儲單元,相對于段基址的偏移/有效地址。有效地址。 通常不可省略,表示括號中的內(nèi)容是通常不可省略,表示括號中的內(nèi)容是存儲單元的存儲單元的

27、偏移偏移/有效地址有效地址、而、而不是操作數(shù)本身不是操作數(shù)本身。 有效地址有效地址(EA):在一個邏輯段中,某存儲存在一個邏輯段中,某存儲存 儲單元相對于段基址的地址位移量。有效地儲單元相對于段基址的地址位移量。有效地 址址(EA)的組成部分:的組成部分: 基址:存放在基址寄存器的內(nèi)容 變址:存放在變址寄存器中的內(nèi)容 比例因子:386及其后繼機(jī)型新增加的術(shù)語。其值可為1,2,4,或8, 可用變址寄存器的內(nèi)容乘以比例因子來取得變址值。 位移量:存放在指令中的一個8/16/32位的數(shù),但 它不是一個操作數(shù)不是一個操作數(shù),而是一個位移量,而是一個位移量(偏移偏移地址的地址的 一部分一部分)。 表表

28、16/32位尋址時偏移地址的構(gòu)成位尋址時偏移地址的構(gòu)成 十六位尋址三十二位尋址 基址寄存器任何32位的通 用寄存器 變址寄存器除ESP以外的 32位通用寄存 器 比例因子無1,2,4,8 位移量字長0,8,160,8,32 注意:注意: 內(nèi)內(nèi)不允許使用不允許使用8位寄存器位寄存器、同時不能、同時不能 使用使用AX、CX、DX、SP。 段基址和偏移地址合稱為邏輯地址。段基址和偏移地址合稱為邏輯地址。CPU在在 尋找某個存儲單元時根據(jù)邏輯地址的段基址尋找某個存儲單元時根據(jù)邏輯地址的段基址 和偏移地址就能形成和偏移地址就能形成(由由CPU的地址生成部分的地址生成部分 自動完成自動完成)最終的物理地址

29、,從而找到相應(yīng)的最終的物理地址,從而找到相應(yīng)的 存儲單元。存儲單元。 如果操作碼所需操作數(shù)存放在內(nèi)存儲器中,如果操作碼所需操作數(shù)存放在內(nèi)存儲器中, 則指令中需要給出操作數(shù)的地址信息。為了則指令中需要給出操作數(shù)的地址信息。為了 提高程序的靈活性,提高程序的靈活性,80 x86指令系統(tǒng)提供了多指令系統(tǒng)提供了多 種種存儲器尋址存儲器尋址方式。方式。 (1)直接尋址;直接尋址; (2)寄存器間接尋址;寄存器間接尋址; (3)基址尋址;基址尋址; (4)變址尋址;變址尋址; (5)基址加變址?;芳幼冎?。 直接尋址直接尋址 中只有位移量。中只有位移量。 兩種書寫格式兩種書寫格式 (1)有效地址表達(dá)式中以

30、有效地址表達(dá)式中以數(shù)值數(shù)值的方式直接寫出有效地的方式直接寫出有效地 址址EA。此時此時段超越前綴通常不可省略段超越前綴通常不可省略。 MOV BX,DS:1234H MOV AL,ES:2CH 這種用法這種用法極少極少。 因?yàn)橥ǔ4鎯卧姆峙涫怯删幾g程序、操作系統(tǒng)因?yàn)橥ǔ4鎯卧姆峙涫怯删幾g程序、操作系統(tǒng) 自動實(shí)現(xiàn)的。雖然程序員必須指定要訪問的信息所自動實(shí)現(xiàn)的。雖然程序員必須指定要訪問的信息所 在的存儲單元的地址,但是通常卻難以知道某個存在的存儲單元的地址,但是通常卻難以知道某個存 儲單元的具體偏移地址是多少。儲單元的具體偏移地址是多少。 (2)以以的方式給出有效地址。的方式給出有效地址。

31、 匯編語言匯編語言規(guī)定規(guī)定:程序員可以為一個:程序員可以為一個存儲單元存儲單元定義一定義一 個個變量名變量名。在程序設(shè)計過程中,程序員利用變量名。在程序設(shè)計過程中,程序員利用變量名 就可以方便的知道該存儲單元就可以方便的知道該存儲單元邏輯地址邏輯地址(所在段的段所在段的段 基址和有效地址基址和有效地址)。 源程序在被編譯程序變成機(jī)器語言程序的過程中,源程序在被編譯程序變成機(jī)器語言程序的過程中, 變量名會被變量名會被程序程序成對應(yīng)存儲單元的成對應(yīng)存儲單元的 。 理解:變量名、標(biāo)號名、段名、子程序名均屬于理解:變量名、標(biāo)號名、段名、子程序名均屬于符符 號地址號地址:代表存儲單元的地址。:代表存儲單

32、元的地址。 符號名不允許重名。符號名不允許重名。 對比:對比: C語言:訪問相同存儲單元的不同方法:變語言:訪問相同存儲單元的不同方法:變 量名與指針。量名與指針。 此時,段超越前綴可以省略,即此時,段超越前綴可以省略,即DS。 例:例: MOV AX,DS:ABC 或者或者 MOV AX,ABC ;DS可省可省 或者或者 MOV AX,ABC ; 也可省也可省 注意:這是在存儲器尋址方式中注意:這是在存儲器尋址方式中唯一唯一一種可一種可 以以省略省略 的情況。的情況。 特點(diǎn):在指令的操作數(shù)字段中直接給出存儲特點(diǎn):在指令的操作數(shù)字段中直接給出存儲 單元的有效地址。即:單元的有效地址。即:EA操

33、作數(shù)偏移量。操作數(shù)偏移量。 偏移量長度可以是偏移量長度可以是8位,位,16位,位,32位。操作數(shù)位。操作數(shù) 默認(rèn)存放在默認(rèn)存放在DS段寄存器指示的數(shù)據(jù)段段寄存器指示的數(shù)據(jù)段中。中。 例:寄存器和存儲器內(nèi)容為:例:寄存器和存儲器內(nèi)容為:(AX)=1234H, BUF為數(shù)據(jù)段定義的變量,其偏移地址是為數(shù)據(jù)段定義的變量,其偏移地址是 2000H,(DS)=3000H,(32000H)=5678H。 執(zhí)行指令:執(zhí)行指令:MOV ,BUF ;(AX)=? 執(zhí)行時執(zhí)行時: (32000H)AX 圖形表示:圖形表示: 如果如果AX改為改為:執(zhí)行后:執(zhí)行后:(AX)=? H 繼續(xù):繼續(xù):BUF改為改為:執(zhí)行后

34、:執(zhí)行后:(AX)=? H 注意:注意:CPU也允許數(shù)據(jù)存放在數(shù)據(jù)段也允許數(shù)據(jù)存放在數(shù)據(jù)段DS以外以外 的其它段的其它段中,此時在指令中中,此時在指令中必須指定必須指定段跨越段跨越 前綴前綴(可以是可以是CS,SS,ES)。 例例 MOV AL,ES:78H ;(ES:78H)AL 該指令的源操作數(shù)前使用了段超越前綴該指令的源操作數(shù)前使用了段超越前綴 “ES:”,明確表示使用附加數(shù)據(jù)段中的變量。明確表示使用附加數(shù)據(jù)段中的變量。 理解:理解:78H與與ES:78H表示不同的存儲單元表示不同的存儲單元 的物理地址,只是段內(nèi)偏移量相同而已。的物理地址,只是段內(nèi)偏移量相同而已。 例例1:MOV AX,

35、DS:3100H (DS)=6000H , (63100H)=3050H 則則:(AX)=3050H 或者,或者,用符號地址代替數(shù)值地址。用符號地址代替數(shù)值地址。 MOV AX,VALUE 或或 MOV AX,VALUE VALUE操作數(shù)所在存儲單元的操作數(shù)所在存儲單元的 有效地址。有效地址。 如果如果VALUE在附加段中,在附加段中,則必須指則必須指 定段跨越。定段跨越。 MOV AX,ES:VALUE 或或MOV AX,ES:VALUE 直接尋址方式直接尋址方式 6000H6000H. 操作碼操作碼 0000 3131 . 50H50H 30H30H . 6 0 0 0 06 0 0 0

36、0 3 1 0 03 1 0 0 + + 6 3 1 0 06 3 1 0 0 63100H63100H 30H30H50H50H AHAHALAL 代代 碼碼 段段 數(shù)數(shù) 據(jù)據(jù) 段段 DSDS 寄存器間接尋址寄存器間接尋址 是指是指 中只有中只有唯一的一個寄存器唯一的一個寄存器。此時,。此時, 中的寄存器可以稱為中的寄存器可以稱為間址寄存器間址寄存器。 操作數(shù)格式:操作數(shù)格式:段寄存器段寄存器:間址寄存器間址寄存器 按照一定的規(guī)則,對于約定的邏輯段可以按照一定的規(guī)則,對于約定的邏輯段可以省省 略略段超越前綴。此時,段超越前綴。此時,EA可以表示為:可以表示為: EA=間址寄存器間址寄存器 。

37、 寄存器間接尋址方式是存儲器尋址方式中最寄存器間接尋址方式是存儲器尋址方式中最 為為常見常見的一種。的一種。 寄存器寄存器間接間接尋址方式不同于寄存器尋址方式不同于寄存器(直接直接)尋址尋址 方式的地方在于:方式的地方在于: 寄存器的內(nèi)容寄存器的內(nèi)容并并不是操作數(shù)不是操作數(shù),而是操作數(shù)所,而是操作數(shù)所 在的內(nèi)存中某個在的內(nèi)存中某個存儲單元的偏移地址存儲單元的偏移地址。 尋址時,尋址時, EA由由BX,SI,DI或或BP提供。提供。 其中,其中,BX,SI,DI默認(rèn)使用默認(rèn)使用DS,BP默認(rèn)使默認(rèn)使 用用SS。 32位位尋址時,尋址時, EA由由EAX,EBX,ECX, EDX,ESI,EDI,

38、ESP,EBP。其中,其中,ESP, EBP默認(rèn)使用默認(rèn)使用, 其余默認(rèn)使用其余默認(rèn)使用DS。 例如:若例如:若(DS)2000H,(SI)1000H。指令執(zhí)行前,指令執(zhí)行前, (AX)2030H,(21000H)0A0H,(21001H)50H。 問:執(zhí)行指令問:執(zhí)行指令MOV AX,SI后后(AX)? 物理地址物理地址20000H1000H21000H。指令執(zhí)行后指令執(zhí)行后, (21000H)0A0H,(21001H)50H ,所以,所以(AX) 50A0H。指令執(zhí)行情況如下:指令執(zhí)行情況如下: AX AH AL 數(shù)據(jù)段 物理地址 A0H 21000H 50H 20001H 56H 200

39、02H 例例 MOV AL,BX ;(DS:BX)AL ;如下圖所示如下圖所示 其中其中BX為寄存器間接尋址方式,注意它與為寄存器間接尋址方式,注意它與 寄存器尋址方式在匯編格式上的區(qū)別。寄存器尋址方式在匯編格式上的區(qū)別。 DSDS BXBX ALAL 寄存器間接尋址方式執(zhí)行情況寄存器間接尋址方式執(zhí)行情況 對于對于MOV AL,BX 若:若:(DS) 3000H,(BX) 78H (30078H) 12H 則:則: 物理地址物理地址10H(DS)(BX)30078H 該指令的執(zhí)行結(jié)果是該指令的執(zhí)行結(jié)果是(AL) 12H 例例 MOV AX,BP ;(SS:BP)AX 若若(SS) 2000H,

40、(BP) 80H (20080H) 12H,(20081H) 56H 則物理地址則物理地址 10H (SS)(BP) 20080H 該指令的執(zhí)行結(jié)果是該指令的執(zhí)行結(jié)果是 (AX) 5612H。 例:例:MOV BX,DI (DS)=6000H (DI)=2000H PA=62000H (62000H)=50A0H (BX)=50A0H 寄存器間接尋址方式寄存器間接尋址方式 MOV BX,DI 6000H6000H2000H2000H DSDSDIDI 6 0 0 0 06 0 0 0 0 2 20 00 00 0+ + 6 2 0 0 06 2 0 0 0 . AOHAOH 50H50H .

41、62000H62000H 50H50HA0HA0H BLBLBHBH數(shù)數(shù) 據(jù)據(jù) 段段 理解:如果僅僅為了尋址幾個理解:如果僅僅為了尋址幾個特定的存儲單特定的存儲單 元元:定義變量名、使用:定義變量名、使用直接尋址直接尋址方式即可;方式即可; 寄存器間接尋址寄存器間接尋址方式:常常用于在方式:常常用于在循環(huán)循環(huán)程序程序 中連續(xù)處理一片連續(xù)存儲單元中的大量數(shù)據(jù)。中連續(xù)處理一片連續(xù)存儲單元中的大量數(shù)據(jù)。 寄存器相對尋址寄存器相對尋址 操作數(shù)的有效地址:一個操作數(shù)的有效地址:一個基址基址(BX、BP)或或變變 址寄存器址寄存器(SI、DI)的內(nèi)容和指令中指定的的內(nèi)容和指令中指定的8位位 或或16位的位

42、的(disp)之和。格式:之和。格式: 段寄存器段寄存器:基址基址/變址寄存器變址寄存器, 或:或: 段寄存器段寄存器:基址基址/變址寄存器變址寄存器。 對比:對比: C語言:訪問一個數(shù)組元素:語言:訪問一個數(shù)組元素:a i 或或*(a+i) 數(shù)組名數(shù)組名a的含義:的含義: 地址、常數(shù)!地址、常數(shù)! 寄存器相對尋址寄存器相對尋址:基址尋址基址尋址 格式:格式: 段寄存器段寄存器:基址寄存器基址寄存器, 或者寫為:或者寫為: 段寄存器段寄存器:基址寄存器基址寄存器。 寄存器相對尋址寄存器相對尋址:基址尋址基址尋址 操作數(shù)的有效地址:一個操作數(shù)的有效地址:一個基址寄存器基址寄存器的內(nèi)容和指令的內(nèi)容

43、和指令 中指定的中指定的8位或位或16位的位的之和。之和。 寄存器寄存器BP和和BX作基址寄存器。使用作基址寄存器。使用BP基址尋基址尋 址,址, 約定訪問約定訪問SS; 使用使用BX基址尋址,基址尋址, 約定訪問約定訪問DS。 8個個32位位寄存器寄存器EBP、ESP、EAXEDX、ESI、EDI 作基址寄存器,作基址寄存器, 使用使用EBP和和ESP基址尋址時,基址尋址時, 約定約定 訪問訪問SS;其余其余32位寄存器,位寄存器, 約定訪問約定訪問DS。位移量可位移量可 以是一個字節(jié)、一個字、一個雙字以是一個字節(jié)、一個字、一個雙字(386以上以上)的有符的有符 號數(shù)。號數(shù)。 EA(基址或變

44、址寄存器基址或變址寄存器)disp,或:,或: EA(32位通用寄存器位通用寄存器)+disp 例例 MOV AL,8 BX 可以表示為:可以表示為: MOV AL,BX+8 若若 (DS) 3000H,(BX) 70 (30078H) 12H 則物理地址則物理地址10H(DS)(BX)8 30078H 該指令的執(zhí)行結(jié)果是該指令的執(zhí)行結(jié)果是(AL)12H。 其中其中8 BX為寄存器相對尋址方式為寄存器相對尋址方式,該指令執(zhí)該指令執(zhí) 行情況如下圖所示。行情況如下圖所示。 寄存器相對尋址執(zhí)行情況寄存器相對尋址執(zhí)行情況 DSDS BXBX ALAL MOV AL,BX+8MOV AL,BX+8 例例

45、 MOV AL,TABLEBX 也可以表示為:也可以表示為:MOV AL,BX+TABLE 其中其中TABLE為位移量的符號表示,指令執(zhí)行為位移量的符號表示,指令執(zhí)行 結(jié)果是結(jié)果是(DS:BX+TABLE)AL。 使用這種尋址方式可以訪問一維數(shù)組使用這種尋址方式可以訪問一維數(shù)組,其中其中 TABLE是數(shù)組起始地址的偏移量是數(shù)組起始地址的偏移量,寄存器中是寄存器中是 數(shù)組元素的下標(biāo)乘以元素的長度數(shù)組元素的下標(biāo)乘以元素的長度(一個元素占一個元素占 用的字節(jié)數(shù)用的字節(jié)數(shù)),下標(biāo)從,下標(biāo)從0開始計數(shù)。開始計數(shù)。 寄存器相對尋址寄存器相對尋址:變址尋址變址尋址 無比例因子的變址尋址無比例因子的變址尋址

46、變址寄存器只能選用變址寄存器只能選用DI或或SI, 約定訪問約定訪問 DS。 格式:格式: 段寄存器:段寄存器:變址寄存器變址寄存器 或或 段寄存器:段寄存器:變址寄存器變址寄存器 寄存器相對尋址寄存器相對尋址:變址尋址變址尋址 有比例因子的變址尋址有比例因子的變址尋址 操作數(shù)的有效地址為一個變址寄存器乘以比操作數(shù)的有效地址為一個變址寄存器乘以比 例因子再與指令中指定的例因子再與指令中指定的8位或位或16位的位移量位的位移量 之和。變址寄存器可為之和。變址寄存器可為EBP或或EAXEDX, ESI, EDI這這7個個32位寄存器位寄存器. 除除EBP默認(rèn)訪問默認(rèn)訪問 SS外,外, 其余變址寄存

47、器默認(rèn)訪問其余變址寄存器默認(rèn)訪問DS. 格式:格式: 段寄存器:段寄存器:變址寄存器變址寄存器 段寄存器:段寄存器: 變址寄存器變址寄存器 (相對相對)基址加變址尋址基址加變址尋址 無比例因子的基址加變址尋址無比例因子的基址加變址尋址 操作數(shù)的有效地址操作數(shù)的有效地址EA一個基址寄存器一個基址寄存器+一個變址一個變址 寄存器的內(nèi)容寄存器的內(nèi)容+位移量。位移量。 格式:格式: 段寄存器:段寄存器:基址寄存器變址寄存器基址寄存器變址寄存器位移量位移量 段寄存器:位移量段寄存器:位移量基址寄存器變址寄存器基址寄存器變址寄存器 段寄存器:位移量段寄存器:位移量基址寄存器基址寄存器變址寄存器變址寄存器

48、注意:注意:基址寄存器和變址寄存器必須是正確的寄存基址寄存器和變址寄存器必須是正確的寄存 器。比如:器。比如: 16位模式下,位模式下,BX+SI正確;正確; 但但BX+BP或或SI+DI錯誤。錯誤。 例例 MOV AL, BX SI ;(DS:BX+SI)AL 或者表示為:或者表示為:MOV AL,BX+SI BX+SI方式可以用來訪問方式可以用來訪問一維數(shù)組一維數(shù)組:其中:其中 BX存放數(shù)組起始地址的偏移量存放數(shù)組起始地址的偏移量(數(shù)組名數(shù)組名),SI 存放數(shù)組元素的存放數(shù)組元素的下標(biāo)下標(biāo)乘以元素的乘以元素的字節(jié)長度字節(jié)長度, 下標(biāo)從下標(biāo)從0開始計數(shù)。開始計數(shù)。 (相對相對)基址加變址尋址

49、基址加變址尋址 有比例因子的基址加變址尋址有比例因子的基址加變址尋址 段寄存器:段寄存器:基址寄存器比例因子基址寄存器比例因子*變址寄變址寄 存器位移量存器位移量 段寄存器:位移量段寄存器:位移量基址寄存器比例因子基址寄存器比例因子* 變址寄存器變址寄存器 段寄存器:位移量段寄存器:位移量基址寄存器基址寄存器變址寄存器變址寄存器* 比例因子比例因子 基址寄存器和變址寄存器須為規(guī)定的基址寄存器和變址寄存器須為規(guī)定的32位寄位寄 存器存器. 理解比例因子的作用:理解比例因子的作用: 例如:例如:C語言訪問整型語言訪問整型(2個字節(jié)個字節(jié))數(shù)組元素數(shù)組元素a 3 所在的存儲單元:所在的存儲單元: 匯

50、編中的邏輯地址為:匯編中的邏輯地址為:DS: BX+SI*2 ! 例例 MOV AL, ARYBX SI ;(DS:BX+SI+ARY)AL 可表示為:可表示為: MOV AL, ARY BX+SI 或或 MOV AL,BX+SI+ARY 執(zhí)行情況如下圖所示。執(zhí)行情況如下圖所示。 返回返回 相對基址變址尋址方式相對基址變址尋址方式 DSDS BXBX ALAL SISI MOV AL,ARY BXSI 使用這種尋址方式可以訪問形如使用這種尋址方式可以訪問形如ARY32的的 二維數(shù)組二維數(shù)組,下標(biāo)從,下標(biāo)從0開始計數(shù)。開始計數(shù)。 假設(shè)數(shù)組在內(nèi)存中以行的形式存放假設(shè)數(shù)組在內(nèi)存中以行的形式存放(即先

51、存第即先存第 一行的所有元素一行的所有元素,然后依次存第二行然后依次存第二行) 其中其中ARY為數(shù)組起始地址的偏移量為數(shù)組起始地址的偏移量,基址寄存基址寄存 器器(例例BX)為某行首與數(shù)組起始地址的距離為某行首與數(shù)組起始地址的距離(即即 BX行下標(biāo)行下標(biāo)一行占用的字節(jié)數(shù)一行占用的字節(jié)數(shù)),變址寄存變址寄存 器器(例例SI)為某列與所在行首的距離為某列與所在行首的距離(即即SI列列 下標(biāo)下標(biāo)元素長度元素長度),若保持,若保持BX不變而不變而SI改變改變, 則可以訪問同一行的所有元素則可以訪問同一行的所有元素;若保持若保持SI不變不變 而而BX改變,則可以訪問同一列的所有元素。改變,則可以訪問同一

52、列的所有元素。 段約定和段超越前綴段約定和段超越前綴 間接尋址寄間接尋址寄 存器存器 基址尋址寄基址尋址寄 存器存器 變址寄存器變址寄存器約定訪問的約定訪問的 邏輯段邏輯段 BPBP 堆棧段堆棧段SS BX,SI,DIBXSI,DI數(shù)據(jù)段數(shù)據(jù)段DS EBP,ESPEBP,ESPEBP堆棧段堆棧段SS EAX,EBX ECX,EDX ESI,EDI EAX,EBX ECX,EDX ESI,EDI EAX,EBX ECX,EDX ESI,EDI 數(shù)據(jù)段數(shù)據(jù)段DS 存儲器操作數(shù)存儲器操作數(shù)的邏輯地址中:的邏輯地址中:省略段超越前省略段超越前 綴的規(guī)則綴的規(guī)則: 1、直接尋址方式中:如果省略,必是、直

53、接尋址方式中:如果省略,必是DS; 2、在寄存器間址類尋址方式中:如果、在寄存器間址類尋址方式中:如果 中寄中寄 存器名稱帶有存器名稱帶有字母字母P(BP、EBP、ESP),則省,則省 略的是略的是SS,否則都是,否則都是DS。 尋址方式:小結(jié)尋址方式:小結(jié) (1) 有效地址表達(dá)式有效地址表達(dá)式 中的中的位移量:不是操作數(shù)、而位移量:不是操作數(shù)、而 是是偏移地址的一部分偏移地址的一部分; (2)帶有比例因子的變址尋址,可以用來檢索一維數(shù)帶有比例因子的變址尋址,可以用來檢索一維數(shù) 組元素;組元素; (3)帶有比例因子的基址加變址,用于檢索二維數(shù)組帶有比例因子的基址加變址,用于檢索二維數(shù)組 元素;

54、元素; (4)在間址、基址、變址、基址加變址這在間址、基址、變址、基址加變址這4種尋址方種尋址方 式中,可以使用式中,可以使用16位和位和32位的寄存器尋址。位的寄存器尋址。 需要注意的問題:在需要注意的問題:在實(shí)模式實(shí)模式下,段長度不能超過下,段長度不能超過 64K,操作數(shù)操作數(shù)最高字節(jié)單元的有效地址不能超過最高字節(jié)單元的有效地址不能超過 0FFFFH。如:如: MOV EBX,10000H MOV AL,EBX ;錯誤錯誤 MOV SI, 0FFFFH MOV AX,SI ;錯誤錯誤 理解:在存儲器尋址方式中,除了理解:在存儲器尋址方式中,除了直接尋址直接尋址 以外;以外; 其他所有所有尋

55、址方式都可以理解為是類似其他所有所有尋址方式都可以理解為是類似 于于寄存器間接尋址寄存器間接尋址的方式。的方式。 因?yàn)?,因?yàn)椋?,而是操作數(shù)所在的內(nèi)存中某個存儲單元,而是操作數(shù)所在的內(nèi)存中某個存儲單元 的邏輯地址中的的邏輯地址中的偏移地址偏移地址。 確定確定目標(biāo)指令目標(biāo)指令的地址的地址 修改修改IP、CS的方式!的方式! 3.3 80 x86的指令系統(tǒng)的指令系統(tǒng) 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令 算術(shù)指令算術(shù)指令 邏輯指令邏輯指令 串處理指令串處理指令 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令 處理機(jī)控制指令與其他操作指令處理機(jī)控制指令與其他操作指令 80486的指令系統(tǒng)是在的指令系統(tǒng)是在8086、286和和386基

56、礎(chǔ)上基礎(chǔ)上 發(fā)展起來的,增加了發(fā)展起來的,增加了32位操作和位操作和32位尋址方位尋址方 式。式。 雙操作數(shù)指令中:逗號雙操作數(shù)指令中:逗號“,”分隔:分隔:源操作數(shù)源操作數(shù)(指令指令 執(zhí)行結(jié)束之后通常不改變執(zhí)行結(jié)束之后通常不改變) 、目的操作數(shù)目的操作數(shù)(通常作為通常作為 指令的一個操作數(shù),同時在指令結(jié)束之后用于保存指令的一個操作數(shù),同時在指令結(jié)束之后用于保存 結(jié)果結(jié)果) 。 參數(shù)約定參數(shù)約定 SEGREG(段寄存器段寄存器):包括:包括CS,DS,ES,SS; REG(寄存器寄存器):16位通用寄存器包括位通用寄存器包括AX , BX , CX, DX, SP, BP, SI, DI; M

57、EM(存儲器操作數(shù)尋址存儲器操作數(shù)尋址):直接尋址,寄存器間接:直接尋址,寄存器間接 尋址,基址尋址,變址尋址,尋址,基址尋址,變址尋址, 基址加變址尋址?;芳幼冎穼ぶ?。 3.3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 傳送指令負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到傳送指令負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到 寄存器或存儲單元中。寄存器或存儲單元中。 傳送指令執(zhí)行后,傳送指令執(zhí)行后,源操作數(shù)不變、不影響狀源操作數(shù)不變、不影響狀 態(tài)標(biāo)志態(tài)標(biāo)志。(涉及標(biāo)志位寄存器本身的傳送指令涉及標(biāo)志位寄存器本身的傳送指令 除外。除外。) (1)數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令MOV 語句格式:語句格式:MOV 目標(biāo)操作數(shù),源操作數(shù)目標(biāo)操

58、作數(shù),源操作數(shù) 功能:將源操作數(shù)傳送入目的地址,源地址功能:將源操作數(shù)傳送入目的地址,源地址 內(nèi)容不變,不影響狀態(tài)標(biāo)志。即:內(nèi)容不變,不影響狀態(tài)標(biāo)志。即:(源操作源操作 數(shù)數(shù))目標(biāo)。目標(biāo)。 MOV指令需要注意的若干問題:指令需要注意的若干問題: MOV指令指令不改變源操作數(shù),不影響標(biāo)志位不改變源操作數(shù),不影響標(biāo)志位;源操作源操作 數(shù)數(shù)可以是可以是任何任何一類一類8、16或者或者32位的位的操作數(shù)操作數(shù)(立即數(shù)、立即數(shù)、 寄存器、段寄存器、存儲器操作數(shù)寄存器、段寄存器、存儲器操作數(shù)); 立即數(shù)立即數(shù)不能作為不能作為目的操作數(shù)目的操作數(shù)。例:。例: MOV 1234H,AX ;非法指令非法指令 C

59、S或或IP不能作為不能作為目的操作數(shù)目的操作數(shù),任何以,任何以CS或或IP為目標(biāo)為目標(biāo) 的傳送指令都是非法的;的傳送指令都是非法的; 當(dāng)源、目的操作數(shù)不能同時為存儲器操作數(shù)當(dāng)源、目的操作數(shù)不能同時為存儲器操作數(shù)。例:。例: ADD DI,SI ;非法指令非法指令 源操作數(shù)是立即數(shù)時,段寄存器不能作為目源操作數(shù)是立即數(shù)時,段寄存器不能作為目 的操作數(shù)的操作數(shù)。 例:例:MOV DS,1000H ;是非法指令是非法指令 為了把立即數(shù)的值傳送給段寄存器,通常可為了把立即數(shù)的值傳送給段寄存器,通常可 以借用一個以借用一個寄存器寄存器/存儲器操作數(shù)作為過渡存儲器操作數(shù)作為過渡。 例如:例如: MOV A

60、X,DATA ;DATA為數(shù)據(jù)段名為數(shù)據(jù)段名 ;編譯后即為;編譯后即為DATA段的段基址、立即數(shù)段的段基址、立即數(shù) MOV DS,AX 切記:切記:任何一條指令任何一條指令 ! 而且,而且,指令要求源操作數(shù)和目的操作指令要求源操作數(shù)和目的操作 數(shù)數(shù)必須必須,(即:類型匹配即:類型匹配)。傳送類指令大。傳送類指令大 多如此。多如此。 例:例:MOV AL , BX ;非法指令非法指令 例:例:MOV AX , BL ;非法指令非法指令 PTR指定存儲器操作數(shù)類型指定存儲器操作數(shù)類型 例:例:MOV BX,12H ;對?錯?;對?錯? ;錯誤,源、目的操作數(shù)都無法指明數(shù)據(jù)長錯誤,源、目的操作數(shù)都無

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論