微型計算機(jī)原理及接口技術(shù) 第3章_第1頁
微型計算機(jī)原理及接口技術(shù) 第3章_第2頁
微型計算機(jī)原理及接口技術(shù) 第3章_第3頁
微型計算機(jī)原理及接口技術(shù) 第3章_第4頁
微型計算機(jī)原理及接口技術(shù) 第3章_第5頁
已閱讀5頁,還剩173頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第3 3章章 指令系統(tǒng)指令系統(tǒng) 3.1 3.1 概述概述 3.2 3.2 80486 80486尋址方式尋址方式 3.3 3.3 80486 80486標(biāo)志寄存器標(biāo)志寄存器 3.4 3.4 匯編語言語法規(guī)則之一匯編語言語法規(guī)則之一 3.5 3.5 80486 80486基本集指令基本集指令 3. 3. 概述概述 指令指令:通知:通知 CPUCPU執(zhí)行某種操作的執(zhí)行某種操作的“命令命令”,CPUCPU全部指令全部指令的的 集合,稱為指令系統(tǒng)集合,稱為指令系統(tǒng)指令的書寫格式指令的書寫格式H目標(biāo)指令目標(biāo)指令(機(jī)器指令):用一串(機(jī)器指令):用一串0 0,1 1代碼書寫代碼書寫 注意:硬件只能識別,

2、存儲,運行目標(biāo)指令注意:硬件只能識別,存儲,運行目標(biāo)指令H符號指令:符號指令:用規(guī)定的助記符用規(guī)定的助記符, ,規(guī)定的書寫格式書寫規(guī)定的書寫格式書寫 的指令的指令 80486 80486符號指令與機(jī)器指令對照表符號指令與機(jī)器指令對照表 操作操作 80486 80486符號指令符號指令 80486 80486機(jī)器指令機(jī)器指令 1234HAX 1234HAX MOV AX, 1234H MOV AX, 1234H B8 34 12 B8 34 12 AX+BXAX AX+BXAX ADD AX, BX ADD AX, BX 03 C3 03 C3 CX-DXCXCX-DXCX SUB CX, DX

3、SUB CX, DX 2B CA 2B CA 返回調(diào)用程序返回調(diào)用程序 RETRET C3C3MOV: MOVEMOV: MOVE傳送傳送 ADD:ADD:加加 SUB:SUB:減減 RET:RETURN RET:RETURN 返回返回指令的組成:指令的組成: 操作碼操作碼 + 操作數(shù)操作數(shù) 操作碼操作碼 告訴計算機(jī)要執(zhí)行的操作是什么,如:告訴計算機(jī)要執(zhí)行的操作是什么,如:加、減、邏輯與等。加、減、邏輯與等。 操作數(shù)操作數(shù) 執(zhí)行操作過程所要操作的數(shù),如加運算執(zhí)行操作過程所要操作的數(shù),如加運算的兩個加數(shù)。的兩個加數(shù)。3.3.指令的組成指令的組成4.4.目標(biāo)程序的生成目標(biāo)程序的生成 匯編匯編源程序

4、源程序編輯、編譯、鏈接編輯、編譯、鏈接可執(zhí)行的機(jī)器指令可執(zhí)行的機(jī)器指令程序(目標(biāo)程序程序(目標(biāo)程序) )5.5.指令長度指令長度 486 486指令長度(機(jī)器指令長度)為指令長度(機(jī)器指令長度)為1 11616字節(jié)字節(jié)規(guī)定:多字節(jié)指令占用連續(xù)的內(nèi)存單元,存放指令第規(guī)定:多字節(jié)指令占用連續(xù)的內(nèi)存單元,存放指令第 一字節(jié)的內(nèi)存地址,稱為一字節(jié)的內(nèi)存地址,稱為“指令地址指令地址”。 CPUCPU只能識別,存儲,運行目標(biāo)指令,而用機(jī)器指只能識別,存儲,運行目標(biāo)指令,而用機(jī)器指令編程非常困難。于是早期的專家們發(fā)明了符號指令,再經(jīng)過令編程非常困難。于是早期的專家們發(fā)明了符號指令,再經(jīng)過軟件把符號指令軟件把

5、符號指令機(jī)器指令。圖示如下:機(jī)器指令。圖示如下:6.6.指令存放指令存放 如:如:12345H12345H單元中有一條指令單元中有一條指令 MOV AX,6789HMOV AX,6789H67H67H89H89HB8HB8H12345H:12345H:操作碼操作碼操作數(shù)操作數(shù)6789H6789HMOV AX,6789H 先寫操作碼,再寫操作數(shù)。先寫操作碼,再寫操作數(shù)。 多字節(jié)操作數(shù)連續(xù)存放。存放規(guī)律多字節(jié)操作數(shù)連續(xù)存放。存放規(guī)律: : 低位字節(jié)存放在低地低位字節(jié)存放在低地址單元,高位字節(jié)存放在相鄰的高地址單元址單元,高位字節(jié)存放在相鄰的高地址單元8. 符號指令的符號指令的 書寫格式書寫格式標(biāo)號

6、標(biāo)號: : 操作碼助記符操作碼助記符 空格空格 操作數(shù)助記符操作數(shù)助記符;注釋;注釋 如如:NEXT: ADD AX , BX ;AX+BX AXNEXT: ADD AX , BX ;AX+BX AX INC SI INC SI ;SI+1 SI ;SI+1 SI 標(biāo)號:標(biāo)號:以字母開頭以字母開頭, ,后跟字母后跟字母, ,數(shù)字?jǐn)?shù)字, ,下劃線下劃線, ,長度長度3131字符字符 標(biāo)號又稱符號地址標(biāo)號又稱符號地址, ,代表該指令的邏輯地址。可有可代表該指令的邏輯地址??捎锌?無,設(shè)置是為了程序的轉(zhuǎn)向無,設(shè)置是為了程序的轉(zhuǎn)向注解:注解:以以“ ;”開頭,不執(zhí)行,打印程序清單時照原樣打印,開頭,不

7、執(zhí)行,打印程序清單時照原樣打印,“系統(tǒng)保留字系統(tǒng)保留字”不能做標(biāo)號。不能做標(biāo)號。3.2 804863.2 80486尋址方式尋址方式操作數(shù)是指令的操作對象,尋址方式與地址碼有密切關(guān)操作數(shù)是指令的操作對象,尋址方式與地址碼有密切關(guān)系系. . 形成操作數(shù)地址碼的過程就是尋址。形成操作數(shù)地址碼的過程就是尋址?!皩ぶ贩绞綄ぶ贩绞健保和ㄋ椎闹v,就是通知:通俗的講,就是通知CPUCPU本條指令的操本條指令的操作數(shù)在哪兒?或者說用什么方式才能得到作數(shù)在哪兒?或者說用什么方式才能得到操作數(shù)操作數(shù)。操作數(shù)操作數(shù)存在方式存在方式 在微型計算機(jī)中,操作數(shù)可能以以下三種方式存在:在微型計算機(jī)中,操作數(shù)可能以以下三種方

8、式存在: 操作數(shù)包含在指令中操作數(shù)包含在指令中即指令的操作數(shù)部分就包含著操作數(shù)本身。即指令的操作數(shù)部分就包含著操作數(shù)本身。 MOV AX, 1234H ; ADD AL, 2 操作數(shù)包含在操作數(shù)包含在CPU的某一個內(nèi)部寄存器中的某一個內(nèi)部寄存器中 這時指令中的操作數(shù)是這時指令中的操作數(shù)是CPU內(nèi)部的某一個寄存器內(nèi)部的某一個寄存器 MOV DS, AX 操作數(shù)在內(nèi)存的數(shù)據(jù)區(qū)中操作數(shù)在內(nèi)存的數(shù)據(jù)區(qū)中 這時指令中的操作數(shù)包含著此操作數(shù)的地址這時指令中的操作數(shù)包含著此操作數(shù)的地址 MOV AX,DS:2000H ; MOV BUF , AL 8048680486有有3 3類類7 7種尋址方式種尋址方式

9、立立 即即 尋址方式:尋址方式:獲得立即數(shù)獲得立即數(shù)寄存器尋址方式:寄存器尋址方式:獲得寄存器操作數(shù)獲得寄存器操作數(shù)存儲器尋址方式:存儲器尋址方式:獲得內(nèi)存操作數(shù)(存儲器操作數(shù))獲得內(nèi)存操作數(shù)(存儲器操作數(shù))H學(xué)習(xí)重點:學(xué)習(xí)重點:怎樣在怎樣在符號指令符號指令中,正確的描述各種尋址方式中,正確的描述各種尋址方式 1.立即尋址方式立即尋址方式 這種尋址方式所提供的操作數(shù)直接放在指令中,緊跟在操作碼的后這種尋址方式所提供的操作數(shù)直接放在指令中,緊跟在操作碼的后面,與操作碼一起放在代碼段區(qū)域中。立即數(shù)可以是面,與操作碼一起放在代碼段區(qū)域中。立即數(shù)可以是8、16、32位位.操作數(shù)是指令的一部分操作數(shù)是指

10、令的一部分,完整地取出該條指令,也就獲得了操完整地取出該條指令,也就獲得了操作數(shù)。作數(shù)。 操作碼操作碼34H12H代代碼碼段段低低高高DXDLDHDX3412例:例:MOVDX,1234H015立即尋址方式示意圖立即尋址方式示意圖如如:MOVEAX , 12345678H MOVBL , 10101010B ;AAH BL MOV CL , 4;FCH CL MOVDL , A;41H DL ADD AL , 0C8H MOVSI , 3*5;15 SI上例源操作數(shù)即為立即尋址,上例源操作數(shù)即為立即尋址, 立即數(shù)書寫規(guī)定:立即數(shù)書寫規(guī)定:H立即數(shù)以數(shù)字開頭,以開頭的立即數(shù)以數(shù)字開頭,以開頭的1

11、616進(jìn)制數(shù),必須前綴進(jìn)制數(shù),必須前綴0 0。H程序員可以按自己的習(xí)慣書寫立即數(shù),各種合法的立即數(shù)經(jīng)匯編程序員可以按自己的習(xí)慣書寫立即數(shù),各種合法的立即數(shù)經(jīng)匯編 后,一律自動轉(zhuǎn)換成等值的二進(jìn)制數(shù),負(fù)數(shù)用補(bǔ)碼表示。后,一律自動轉(zhuǎn)換成等值的二進(jìn)制數(shù),負(fù)數(shù)用補(bǔ)碼表示。H立即數(shù)的數(shù)制用后綴表示立即數(shù)的數(shù)制用后綴表示,B,B表示二進(jìn)制數(shù)表示二進(jìn)制數(shù),H,H表示十六進(jìn)制數(shù)表示十六進(jìn)制數(shù),D,D或或 缺省為十進(jìn)制數(shù),單引號括起來的字符編譯成相應(yīng)的缺省為十進(jìn)制數(shù),單引號括起來的字符編譯成相應(yīng)的ASCIIASCII碼碼 。H可以用可以用+ + * * / / 組成立即數(shù)表達(dá)式組成立即數(shù)表達(dá)式2. 寄存器尋址寄存

12、器尋址操作數(shù)在操作數(shù)在CPU的某個寄存器中,符號指令中直接寫出寄存的某個寄存器中,符號指令中直接寫出寄存器名稱。器名稱。 如:如: MOV AX , DS ;DS內(nèi)容內(nèi)容 AX INC SI ;SI+1 SI (Increase 增量增量) DEC DI ;DI 1 DI (Decrease 減量減量)如:下述條指令,目標(biāo)操作數(shù)即為寄存器尋址如:下述條指令,目標(biāo)操作數(shù)即為寄存器尋址 MOVEAX,12345678H MOVBL,10101010B ;AAH BL MOV CL, 4;FCH CL MOVDL,5;35H DL ADD AL,0C8H MOVSI,3*5;15 SI3.3.存儲器

13、操作數(shù)尋址方式存儲器操作數(shù)尋址方式 重申:重申:H在讀寫內(nèi)存操作數(shù)之前,在讀寫內(nèi)存操作數(shù)之前,CPUCPU必須知道相關(guān)存儲單元的物理地址。必須知道相關(guān)存儲單元的物理地址。H 程序員的責(zé)任僅在于正確的書寫邏輯地址表達(dá)式,然后由程序員的責(zé)任僅在于正確的書寫邏輯地址表達(dá)式,然后由CPUCPU自動運自動運 算以求出物理地址。算以求出物理地址。 H 由于由于CPUCPU對存儲器采用分段管理對存儲器采用分段管理, , 因此指令格式中只能寫出存放操作數(shù)因此指令格式中只能寫出存放操作數(shù) 的內(nèi)存單元的的內(nèi)存單元的“邏輯地址邏輯地址”。操作系統(tǒng)將程序調(diào)入內(nèi)存時才給段寄存器賦實際值。此時,計算出的操作系統(tǒng)將程序調(diào)入

14、內(nèi)存時才給段寄存器賦實際值。此時,計算出的20位地址才是實際的物理地址位地址才是實際的物理地址程序員給出的邏輯地址形式程序員給出的邏輯地址形式 段寄存器:段寄存器:偏移地址偏移地址偏移地址偏移地址可以由以下各種情況構(gòu)成:可以由以下各種情況構(gòu)成: 直接地址直接地址 包含在指令中的包含在指令中的16位地址偏移量位地址偏移量。 間接地址間接地址 由由CPUCPU內(nèi)部某個內(nèi)部某個1616位寄存器的內(nèi)容決定,如位寄存器的內(nèi)容決定,如 BXBX、BPBP、SISI、DIDI。 基址基址 基址寄存器基址寄存器BXBX或或BPBP加上指令中包含的加上指令中包含的8 8位或位或1616位位移量位位移量。 變址變

15、址 變址寄存器變址寄存器SISI或或DIDI加上指令中包含的加上指令中包含的8 8位或位或1616位位移量位位移量。 基址加變址基址加變址 由一個基址寄存器由一個基址寄存器BXBX或或BPBP加上一個變址寄存器加上一個變址寄存器SISI或或DIDI,再加,再加 上指令中包含的上指令中包含的8 8位或位或1616位位移量位位移量。(1) (1) 直接尋址直接尋址 地址表達(dá)式的格式地址表達(dá)式的格式1 1:段寄存器:段寄存器: 偏移地址偏移地址 地址表達(dá)式的格式地址表達(dá)式的格式2 2: 段寄存器:變量名段寄存器:變量名 用變量名代表存儲單元的有效地址用變量名代表存儲單元的有效地址 如:如:MOVMO

16、VAL, ES:2CHAL, ES:2CH 從從ESES附加段偏移地址為附加段偏移地址為2CH2CH的單元取數(shù)的單元取數(shù)ALAL如:如:MOV AX, DS:2000HMOV AX, DS:2000H 從數(shù)據(jù)段偏移地址為從數(shù)據(jù)段偏移地址為2000H2000H的單元取一字的單元取一字AXAX這種格式很少使用,這種格式很少使用, 通常情況下,程序員不知道某單元的偏移地址通常情況下,程序員不知道某單元的偏移地址 操作碼操作碼34H12H50H30H代代碼碼段段低低高高DS0050AXALAH例:例: MOV AX, MOV AX, DS:1234HDS:1234H直接尋址方式示意圖直接尋址方式示意圖

17、50000H050000H+ 1234H51234H51234H數(shù)數(shù)據(jù)據(jù)段段設(shè)數(shù)據(jù)段設(shè)數(shù)據(jù)段XXXX字節(jié)單元的內(nèi)容為字節(jié)單元的內(nèi)容為11H11H ES ES附加段附加段YYYY字單元的內(nèi)容為字單元的內(nèi)容為2233H2233H MOV AL, MOV AL, DS:XX DS:XX ; ;取數(shù)據(jù)段取數(shù)據(jù)段XXXX字節(jié)單元的內(nèi)容字節(jié)單元的內(nèi)容ALAL 或或 MOV AL, MOV AL, XX XX ; AL=11H ; AL=11H MOV MOV AX, AX, ES:YY ES:YY ; ;取取ESES附加段附加段YYYY字單元的內(nèi)容字單元的內(nèi)容AXAX 或或 MOV MOV AX, AX,

18、 YYYY ; AX=2233H ; AX=2233H說明:說明:H匯編語言允許為某單元起一個匯編語言允許為某單元起一個“名字名字”, ,這個名字就稱為該單元的這個名字就稱為該單元的“變量變量名名”,經(jīng)匯編之后,變量名有段基址和偏移量兩種屬性。,經(jīng)匯編之后,變量名有段基址和偏移量兩種屬性。H變量名是唯一的,程序中不能有重復(fù)的變量名,變量名是唯一的,程序中不能有重復(fù)的變量名, “段寄存器:段寄存器:”可以省略??梢允÷浴?(2)(2)寄存器間接尋址寄存器間接尋址 寄存器間接尋址又稱間接尋址,間址寄存器間接尋址又稱間接尋址,間址 什么是間接尋址?什么是間接尋址? 操作數(shù)在內(nèi)存單元,該單元的段基址在

19、操作數(shù)在內(nèi)存單元,該單元的段基址在段寄存器段寄存器中中, , 有效地址在有效地址在間址寄存器間址寄存器中,中,CPUCPU首先進(jìn)行地址計算首先進(jìn)行地址計算 間接尋址的地址表達(dá)式間接尋址的地址表達(dá)式 段寄存器:段寄存器: 間址寄存器間址寄存器 某單元的物理地址某單元的物理地址= =段寄存器內(nèi)容段寄存器內(nèi)容16+16+間址寄存器間址寄存器 訪問約定的邏輯段訪問約定的邏輯段 ,間接尋址的地址表達(dá)式簡,間接尋址的地址表達(dá)式簡 化為:化為: 間址寄存器間址寄存器 某單元的物理地址某單元的物理地址= =約定的段寄存器內(nèi)容約定的段寄存器內(nèi)容16+16+間址寄存器間址寄存器 間址寄存器間址寄存器 和約定訪問的

20、邏輯段和約定訪問的邏輯段486486規(guī)定:規(guī)定:間址寄存器間址寄存器約定訪問的邏輯段約定訪問的邏輯段BPBP堆棧段堆棧段 16 16位尋址方式位尋址方式BX,SI,DIBX,SI,DI數(shù)據(jù)段數(shù)據(jù)段EBP,ESPEBP,ESP堆棧段堆棧段 32 32位尋址方式位尋址方式EAXEAXEDX,ESI,EDIEDX,ESI,EDI數(shù)據(jù)段數(shù)據(jù)段操作碼操作碼30H代代碼碼段段低低高高DS5 0 0 030例:例: MOV AX , MOV AX , BX BX 間接尋址方式示意圖間接尋址方式示意圖50000H051000H數(shù)數(shù)據(jù)據(jù)段段1 0 0 0 HH 5 1 0 0 0 HBX+50H50AX舉例:舉

21、例:設(shè)數(shù)據(jù)段設(shè)數(shù)據(jù)段BUFBUF字節(jié)單元的內(nèi)容為字節(jié)單元的內(nèi)容為55H,55H,取出該數(shù)取出該數(shù) ALAL解解1 1:用:用BXBX間址間址 MOV DS , MOV DS , 數(shù)據(jù)段段基址數(shù)據(jù)段段基址 MOV BX , BUFMOV BX , BUF單元的有效地址單元的有效地址 MOV AL , DS:BX ;AL=55HMOV AL , DS:BX ;AL=55H等價于等價于: : MOV AL , BX MOV AL , BX 由于由于BXBX間址,約定訪問的是數(shù)據(jù)段,間址,約定訪問的是數(shù)據(jù)段, “DS:DS:”可省可省解解2 2:用:用BPBP間址間址 MOV DS , MOV DS

22、, 數(shù)據(jù)段段基址數(shù)據(jù)段段基址 MOV BP , BUFMOV BP , BUF單元的有效地址單元的有效地址 MOV AL , DS:BP ;AL=55HMOV AL , DS:BP ;AL=55H 不能寫成不能寫成: MOV AL , BP: MOV AL , BP 由于由于BPBP間址約定訪問的是堆棧段,間址約定訪問的是堆棧段, “DS:DS:”不可省不可省解解3 3:用變量名直接尋址:用變量名直接尋址 MOV DS,MOV DS,數(shù)據(jù)段段基址數(shù)據(jù)段段基址 MOV AL, BUFMOV AL, BUF ;AL=55H ;AL=55H(3)(3)基址尋址基址尋址 該尋址方式的有效地址由兩部分組

23、成。一部分在該尋址方式的有效地址由兩部分組成。一部分在基址寄存器中,另一部分為常量基址寄存器中,另一部分為常量 。 基址尋址的地址表達(dá)式:基址尋址的地址表達(dá)式: 段寄存器段寄存器:基址寄存器基址寄存器+ +位移量位移量 物理地址物理地址= =段寄存器內(nèi)容段寄存器內(nèi)容16+16+基址寄存器基址寄存器+ +位移量位移量 訪問約定的邏輯段,簡化的地址表達(dá)式:訪問約定的邏輯段,簡化的地址表達(dá)式: 基址寄存器基址寄存器+ +位移量位移量 物理地址物理地址= =約定的段寄存器內(nèi)容約定的段寄存器內(nèi)容16+16+基址寄存器基址寄存器+ +位移量位移量 基址寄存器和約定訪問的邏輯段基址寄存器和約定訪問的邏輯段基

24、址寄存器基址寄存器約定訪問的邏輯段約定訪問的邏輯段BPBP堆棧段堆棧段 16 16位尋址方式位尋址方式BXBX數(shù)據(jù)段數(shù)據(jù)段EBP,ESPEBP,ESP堆棧段堆棧段 32 32位尋址方式位尋址方式EAXEAXEDX,ESI,EDIEDX,ESI,EDI數(shù)據(jù)段數(shù)據(jù)段操作碼操作碼30H代代碼碼段段低低高高DS5 0 0 0AL例:例: MOV AL,MOV AL,BX+2BX+2基址尋址方式示意圖基址尋址方式示意圖50000H051002H數(shù)數(shù)據(jù)據(jù)段段1 0 0 0 HH 5 1 0 0 2 H+BX02H 0 2 +H 舉例舉例設(shè)數(shù)據(jù)段設(shè)數(shù)據(jù)段BUFBUF單元依次有:單元依次有:78H,56H,3

25、4H,12H78H,56H,34H,12H則:則:MOVMOV DS , , 數(shù)據(jù)段段基址數(shù)據(jù)段段基址MOV BX , BUFMOV BX , BUF單元有效地址單元有效地址MOV DH , MOV DH , BX+1BX+1 ;DH=56H ;DH=56HMOV DX , MOV DX , BX+2BX+2 ;DX=1234H ;DX=1234H12H34H56H78HBUF(4) (4) 變址尋址變址尋址 有比例因子的變址尋址其地址表達(dá)式為有比例因子的變址尋址其地址表達(dá)式為 段寄存器:段寄存器: 比例因子比例因子* *變址寄存器變址寄存器+ +位移量位移量 物理地址物理地址= =段寄存器段

26、寄存器16+16+比例因子比例因子變址寄存器變址寄存器+ +位移量位移量 沒有比例因子的變址尋址其地址表達(dá)式為:沒有比例因子的變址尋址其地址表達(dá)式為: 段寄存器:段寄存器: 變址寄存器變址寄存器+ +位移量位移量 訪問約定的邏輯段可簡化為訪問約定的邏輯段可簡化為 : 變址寄存器變址寄存器+ +位移量位移量 物理地址物理地址= =約定的段寄存器約定的段寄存器16+16+變址寄存器變址寄存器+ +位移量位移量 變址寄存器與約定訪問的邏輯段變址寄存器與約定訪問的邏輯段變址寄存器變址寄存器約定訪問的邏輯段約定訪問的邏輯段適用于適用于SI,DISI,DI數(shù)據(jù)段數(shù)據(jù)段無比例因子無比例因子,16,16位位尋

27、址尋址EBPEBP堆棧段堆棧段有比例因子有比例因子,32,32位位尋址尋址EAXEAXEDX,ESI,EDIEDX,ESI,EDI數(shù)據(jù)段數(shù)據(jù)段操作碼操作碼30H代代碼碼段段低低高高DS5 0 0 0AL例:例: MOV AL,MOV AL,SI+2SI+2基址尋址方式示意圖基址尋址方式示意圖50000H051002H數(shù)數(shù)據(jù)據(jù)段段1 0 0 0 HH 5 1 0 0 2 H+SI02H 0 2 +H說明:比例因子只能是說明:比例因子只能是1 1、2 2、4 4、8 8 因此:因此: MOV AL , 8MOV AL , 8* *SI+15 ;SI+15 ;非法,非法,1616位尋址不能使用比例因

28、子位尋址不能使用比例因子 MOV AL , 10MOV AL , 10* *ESI+5 ;ESI+5 ;非法指令,比例因子錯了非法指令,比例因子錯了 MOV AL , ES:SI ;MOV AL , ES:SI ;訪問附加段訪問附加段 MOV AL , SI ;MOV AL , SI ;訪問數(shù)據(jù)段訪問數(shù)據(jù)段(5) (5) 基址加變址尋址基址加變址尋址 存儲單元的有效地址由存儲單元的有效地址由3 3部分組成部分組成 有比例因子的基址加變址的地址表達(dá)式為:有比例因子的基址加變址的地址表達(dá)式為: 段寄存器:段寄存器: 基址寄存器基址寄存器+ +比例因子比例因子* *變址寄存器變址寄存器+ +位移量位

29、移量 訪問約定邏輯段其地址表達(dá)式簡化為:訪問約定邏輯段其地址表達(dá)式簡化為: 基址寄存器基址寄存器+ +比例因子比例因子* *變址寄存器變址寄存器+ +位移量位移量 無比例因子基址加變址無比例因子基址加變址地址表達(dá)式:地址表達(dá)式: 段寄存器:段寄存器: 基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +位移量位移量 訪問約定邏輯段:訪問約定邏輯段: 基址寄存器基址寄存器+ +變址寄存器變址寄存器+ +位移量位移量 基址加變址尋址是基址尋址和變址尋址的組合基址加變址尋址是基址尋址和變址尋址的組合,要求要求 基址寄存器和變址寄存器都是基址寄存器和變址寄存器都是1616位或都是位或都是3232位,否

30、位,否 則(則(1616位尋址和位尋址和3232位尋址混合使用)是非法指令位尋址混合使用)是非法指令 默認(rèn)的段寄存器不一致,這樣的組合雖然是合法,默認(rèn)的段寄存器不一致,這樣的組合雖然是合法, 但容易出錯但容易出錯操作碼操作碼30H代代碼碼段段低低高高DS5 0 0 0AL例:例: MOV AL,MOV AL,BX+SI+0250HBX+SI+0250H基址基址+變址尋址方式示意圖變址尋址方式示意圖50000H053250數(shù)數(shù)據(jù)據(jù)段段2 0 0 0 HH 5 3 2 5 0 H+SI50H0 2 5 0 +H1 0 0 0 H+BX02H 尋址方式的學(xué)習(xí)要點:尋址方式的學(xué)習(xí)要點:1.1.指令中的

31、操作數(shù)有指令中的操作數(shù)有3 3種種: :立即數(shù)立即數(shù), ,寄存器數(shù)寄存器數(shù), ,內(nèi)存操作數(shù)內(nèi)存操作數(shù) 訪問立即數(shù)叫立即尋址方式訪問立即數(shù)叫立即尋址方式; ;訪問寄存器數(shù)叫寄存器尋訪問寄存器數(shù)叫寄存器尋 址方式址方式; ; 訪問內(nèi)存操作數(shù)由訪問內(nèi)存操作數(shù)由5 5種尋址方式種尋址方式: : 直接尋址、間址、基址、變址、基址加變址直接尋址、間址、基址、變址、基址加變址 不同的尋址方式是為了程序員在寫指令時通過不同的手不同的尋址方式是為了程序員在寫指令時通過不同的手 段提供操作數(shù)段提供操作數(shù). .2.2.關(guān)于關(guān)于1616位尋址和位尋址和3232位尋址位尋址 1616位尋址:采用位尋址:采用1616位間

32、址、基址、變址、基址加變址位間址、基址、變址、基址加變址 3232位尋址:采用位尋址:采用3232位間址、基址、變址、基址加變址位間址、基址、變址、基址加變址3 3. .在實模式下,一個邏輯段的體積最大為在實模式下,一個邏輯段的體積最大為64K64K,存儲,存儲 單元的單元的有效地址為有效地址為1616位,不可能超過位,不可能超過FFFFH,FFFFH,在實模式下運行的程在實模式下運行的程序通常采用序通常采用1616位尋址位尋址4.4.關(guān)于段約定和段超越關(guān)于段約定和段超越在 用 間 址 、 基 址 、 變 址 、 基 址 加 變 址 尋 址 內(nèi) 存 操在 用 間 址 、 基 址 、 變 址 、

33、 基 址 加 變 址 尋 址 內(nèi) 存 操 作數(shù)時,其地址表達(dá)式都有作數(shù)時,其地址表達(dá)式都有2 2種書寫格式種書寫格式有段有段 前綴和前綴和無段前綴無段前綴如用如用BPBP、EBPEBP、ESPESP參與尋址,參與尋址,CPUCPU自動認(rèn)為是訪問堆棧段自動認(rèn)為是訪問堆棧段, , 段超越前綴段超越前綴“SSSS:”可省可省MOV AL , SSMOV AL , SS:BP BP ;訪問;訪問SSSS段,用段,用BPBP間址間址MOV AL , BPMOV AL , BP如用如用BPBP、EBPEBP、ESPESP參與尋址非堆棧段,必須明確寫出段參與尋址非堆棧段,必須明確寫出段超越前綴,如:超越前綴

34、,如:MOV AL , DSMOV AL , DS:BP BP ;訪問堆棧段,用;訪問堆棧段,用BPBP間址間址MOV AL , ESMOV AL , ES:BP+2BP+2如用如用BXBX、SISI、DIDI、EAXEAXEDXEDX、ESIESI、EDIEDI參與尋址參與尋址, CPU, CPU自動認(rèn)為是訪問數(shù)據(jù)段,自動認(rèn)為是訪問數(shù)據(jù)段,“ DSDS:”可省可省明確寫出,不能省明確寫出,不能省如:如:MOV ALMOV AL,DSDS:BXBX MOV AL MOV AL,BXBX 如用如用BXBX、SISI、DIDI、EAXEAX、EDXEDX、ESIESI、EDIEDI參與尋址非數(shù)參與

35、尋址非數(shù)據(jù)段,必須明確寫出段超越前綴,如:據(jù)段,必須明確寫出段超越前綴,如:MOV AL, ES:BXMOV AL, FS:SI+25 5使用段約定訪問內(nèi)存操作數(shù)是最常用的編程風(fēng)格使用段約定訪問內(nèi)存操作數(shù)是最常用的編程風(fēng)格明確寫出,不能省明確寫出,不能省假設(shè)假設(shè) BP=1000H,BX=1000H,SI=2000H BP=1000H,BX=1000H,SI=2000H 偏移地址偏移地址=0016H=0016H說明下面幾條指令的源操作數(shù)的尋址方式、偏移地址及結(jié)果說明下面幾條指令的源操作數(shù)的尋址方式、偏移地址及結(jié)果(1 1)MOV BX,1000H (5) MOV AL,SI+0016HMOV B

36、X,1000H (5) MOV AL,SI+0016H (2) MOV AL,DS:2000H (6) MOV AL,BP+0016H (2) MOV AL,DS:2000H (6) MOV AL,BP+0016H (3) MOV AX,BX (7) MOV Al,BX+SI+0016H (3) MOV AX,BX (7) MOV Al,BX+SI+0016H (4) MOV DL,BX (4) MOV DL,BX12H34H56H78H1000H1016H2000H2016H3016H數(shù)據(jù)段數(shù)據(jù)段21H43H65H87H1016H2000H3016H堆棧段堆棧段1000H9AHA9H2016

37、H3.3標(biāo)志寄存器標(biāo)志寄存器AC VM RNT IOPL ODITSZAPC D31 D19 D18 D080486標(biāo)志寄存器標(biāo)志寄存器80486標(biāo)志寄存器為標(biāo)志寄存器為32位位,實際使用實際使用15位位 15位標(biāo)志分為兩類位標(biāo)志分為兩類:狀態(tài)標(biāo)志狀態(tài)標(biāo)志和和控制標(biāo)志控制標(biāo)志 H狀態(tài)標(biāo)志記錄了當(dāng)前指令執(zhí)行后的狀態(tài)信息狀態(tài)標(biāo)志記錄了當(dāng)前指令執(zhí)行后的狀態(tài)信息 H控制標(biāo)志用來控制微處理器操作控制標(biāo)志用來控制微處理器操作本節(jié)首先介紹本節(jié)首先介紹6種狀態(tài)標(biāo)志種狀態(tài)標(biāo)志狀態(tài)標(biāo)志寄存器狀態(tài)標(biāo)志寄存器 O D I T S Z A P C 進(jìn)位標(biāo)志進(jìn)位標(biāo)志C(Carry Flag)當(dāng)結(jié)果的最高位產(chǎn)生一個進(jìn)位或借

38、位,則當(dāng)結(jié)果的最高位產(chǎn)生一個進(jìn)位或借位,則C=1,否則,否則C=0。 溢出標(biāo)志溢出標(biāo)志O(Overflow Flag)在算術(shù)運算中,帶符號數(shù)的運算結(jié)果超出了在算術(shù)運算中,帶符號數(shù)的運算結(jié)果超出了8位或位或16位位 帶符號數(shù)能表達(dá)的范圍,則帶符號數(shù)能表達(dá)的范圍,則O=1,否則,否則O=0。 8位(字節(jié))運算位(字節(jié))運算 -128 +127 16位(字)位(字) 運算運算 -32768 +32767 符號標(biāo)志符號標(biāo)志S(Sign Flag) 結(jié)果的最高位(結(jié)果的最高位(D15或或D7)為)為1,則,則S=1,否則,否則 S=0。 零標(biāo)志零標(biāo)志Z(Zero Flag) 若運算的結(jié)果為若運算的結(jié)果為

39、0,則,則Z=1,否則,否則Z=0。 奇偶標(biāo)志奇偶標(biāo)志P(Parity Flag) 若結(jié)果中若結(jié)果中1的個數(shù)為偶數(shù),則的個數(shù)為偶數(shù),則P=1,否則,否則,P=0。 輔助進(jìn)位標(biāo)志輔助進(jìn)位標(biāo)志A(Auxitiary Flag) 在操作時,由低半字節(jié)在操作時,由低半字節(jié)(第第3位位)向高半字節(jié),向高半字節(jié), 有進(jìn)位或借位,則有進(jìn)位或借位,則A=1,否則,否則A=0。 方向方向 標(biāo)志(標(biāo)志(Direction Flag) D=1 ,串操作時地址自動減量,串操作時地址自動減量,D=0,串操作時地址自,串操作時地址自 動增量。動增量。 中斷允許標(biāo)志(中斷允許標(biāo)志(Interruptenable Flag)

40、 I=1,則允許,則允許CPU接收外部的中斷請求,接收外部的中斷請求, I=0,則屏蔽外部中斷請求。,則屏蔽外部中斷請求。 追蹤標(biāo)志(追蹤標(biāo)志(Trace Flag) T=1,使處理進(jìn)入單步方式,以便于調(diào)試。,使處理進(jìn)入單步方式,以便于調(diào)試。狀狀態(tài)態(tài)標(biāo)標(biāo)志志控控制制標(biāo)標(biāo)志志二二 .復(fù)習(xí)復(fù)習(xí):有關(guān)溢出的幾個概念有關(guān)溢出的幾個概念 1. 什麼是溢出?什麼是溢出? 運算結(jié)果超出寄存器能表示的范圍運算結(jié)果超出寄存器能表示的范圍,稱為溢出。稱為溢出。 溢出和操作數(shù)的性質(zhì)有關(guān)。溢出和操作數(shù)的性質(zhì)有關(guān)。 8位無符號數(shù)運算位無符號數(shù)運算, 結(jié)果結(jié)果255 有溢出有溢出16位無符號數(shù)運算位無符號數(shù)運算, 結(jié)果結(jié)

41、果65535 有溢出有溢出32位無符號數(shù)運算位無符號數(shù)運算, 結(jié)果結(jié)果 232_1 有溢出有溢出8位有符號數(shù)運算位有符號數(shù)運算, -128結(jié)果結(jié)果127 有溢出有溢出16位有符號數(shù)運算位有符號數(shù)運算, -32768結(jié)果結(jié)果32767 有溢出有溢出32位有符號數(shù)運算位有符號數(shù)運算, -231結(jié)果結(jié)果 231_1 有溢出有溢出2. CPU如何判斷溢出如何判斷溢出 由于溢出和操作數(shù)的性質(zhì)有關(guān)由于溢出和操作數(shù)的性質(zhì)有關(guān),而操作數(shù)的性質(zhì)是由而操作數(shù)的性質(zhì)是由 程序員定義的。程序員定義的。CPU只能默認(rèn)一種選擇只能默認(rèn)一種選擇,即即CPU一律一律 默認(rèn)操作數(shù)是有符號補(bǔ)碼數(shù)默認(rèn)操作數(shù)是有符號補(bǔ)碼數(shù),并以此來

42、設(shè)置溢出標(biāo)志。并以此來設(shè)置溢出標(biāo)志。 3.3.程序員如何判斷溢出程序員如何判斷溢出H 有符號數(shù)運算有符號數(shù)運算, ,判判O O標(biāo)志標(biāo)志,O,O標(biāo)志為標(biāo)志為1,1,有溢出有溢出H 無符號數(shù)加無符號數(shù)加/ /減減, ,判判C C標(biāo)志標(biāo)志,C,C標(biāo)志為標(biāo)志為1,1,有溢出有溢出例例: :下列指令執(zhí)行后下列指令執(zhí)行后 AL=?AL=? A.C.O.P.S.Z A.C.O.P.S.Z 為何值為何值? ? MOV AL ,0C8H ADD AL ,0C8H AL=90H, AL=90H,如果如果C8HC8H為無符號數(shù)為無符號數(shù)( (值值=200),=200),則有溢出。則有溢出。 如果如果C8HC8H為有

43、符號數(shù)為有符號數(shù)( (值值=-56),=-56),則無溢出。則無溢出。 這這6 6個標(biāo)志中個標(biāo)志中,C.O.P.S.Z,C.O.P.S.Z可為程序的轉(zhuǎn)移提供測試條件??蔀槌绦虻霓D(zhuǎn)移提供測試條件。000010011000 100 110 01 0 0 1 1 0C=1S=1P=1 O=0Z=01A=1 3.4 3.4 匯編語言語法規(guī)則匯編語言語法規(guī)則為了在介紹指令的過程中為了在介紹指令的過程中, ,穿插一些例題穿插一些例題, ,有必要先介紹一些匯編語言的有必要先介紹一些匯編語言的語法規(guī)則語法規(guī)則一一. .概述概述 1.1.可執(zhí)行文件的生成可執(zhí)行文件的生成 編輯編輯 編編 輯輯匯編源程序匯編源程序

44、. ASM文件文件 調(diào)編輯程序調(diào)編輯程序如如:EDIT.EXE QEDIT.EXE 編譯編譯.ASM文件文件 匯匯 編編.OBJ文件文件 調(diào)調(diào) 匯匯 編編 程程 序序如如:TASM.EXE 鏈接鏈接 鏈鏈 接接.OBJ文件文件 庫文件庫文件可執(zhí)行文件可執(zhí)行文件.EXE.EXE .COM .COM調(diào)調(diào) 鏈鏈 接接 程程 序序如如:TLINK.EXE2.2.源程序中的語句類型源程序中的語句類型 一個完整的源程序應(yīng)包含一個完整的源程序應(yīng)包含2 2類語句類語句: : 符號指令、匯編偽指令符號指令、匯編偽指令( (偽語句偽語句) )標(biāo)號名、變量名、段名、過程名標(biāo)號名、變量名、段名、過程名命名規(guī)則命名規(guī)則

45、: :以字母開頭以字母開頭, ,后跟字后跟字母、數(shù)字母、數(shù)字長度長度3131個字符個字符H符號指令符號指令: :經(jīng)匯編后經(jīng)匯編后, ,其目標(biāo)指令通知其目標(biāo)指令通知CPUCPU進(jìn)行什么操作進(jìn)行什么操作H偽偽 指指 令令: :是非機(jī)器指令,是在匯編期間進(jìn)行操作的。是非機(jī)器指令,是在匯編期間進(jìn)行操作的。 為匯編程序為匯編程序, ,鏈接程序提供匯編鏈接信息鏈接程序提供匯編鏈接信息 符號名符號名 偽指令偽指令偽指令偽指令 標(biāo)號標(biāo)號 : 符號指令符號指令符號指令符號指令此處無冒號此處無冒號二二. .常用的偽指令常用的偽指令1.1.字節(jié)字義偽指令字節(jié)字義偽指令 變量名變量名 DB DB 一串用逗號間隔的單字

46、節(jié)數(shù)一串用逗號間隔的單字節(jié)數(shù) 說明說明: :v DB DB Define Byte Define Byte 的縮寫的縮寫, ,“定義字節(jié)定義字節(jié)”。v ? ? 隨機(jī)數(shù)隨機(jī)數(shù), Dup , Dup Duplicate(Duplicate(重復(fù)重復(fù)) )v 3 Dup(?) 3 Dup(?) 代表代表3 3個用逗號間隔的隨機(jī)數(shù)個用逗號間隔的隨機(jī)數(shù)v 5 Dup (A) 5 Dup (A) 代表代表5 5個用逗號間隔的個用逗號間隔的A A的的ASCASC碼碼如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLO N2 DB ?,?,?

47、 ;與下條等價與下條等價 N2 DB 3 DUP(?)匯編后匯編后12 H40 HFF H09 H55 H41 H42 HA6 H48 H45 H4C H4C H4F HX X X XX XN1:N2:功能功能: :H通知匯編程序把通知匯編程序把DBDB后跟的單字后跟的單字 節(jié)數(shù)節(jié)數(shù), ,依次存入從變量依次存入從變量(如如N1)N1) 開始的單元開始的單元, ,負(fù)數(shù)用補(bǔ)碼表示負(fù)數(shù)用補(bǔ)碼表示, , 單引號中的字符翻譯成單引號中的字符翻譯成ASCASC碼。碼。 如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLON2 DB ?,?

48、,? ;與下條等價與下條等價N2 DB 3 DUP(?)如如: : N1 DB 12H,64,-1,3*3 DB 01010101B, A , B DB 0A6H, HELLON2 DB ?,?,? ;與下條等價與下條等價N2 DB 3 DUP(?)功能功能: :H H用用DBDB定義的這些內(nèi)存單元定義的這些內(nèi)存單元(N1(N1 N1+12,N1+12, N2 N2 N2+2)N2+2)的屬性均為的屬性均為“字節(jié)型字節(jié)型”。匯編后匯編后12 H40 HFF H09 H55 H41 H42 HA6 H48 H45 H4C H4C H4F HX X X XX XN1:N2:N1+12:N2+2:2

49、.2.字定義偽指令字定義偽指令 變量名變量名 DWDW 一串用逗號間隔的雙字節(jié)數(shù)一串用逗號間隔的雙字節(jié)數(shù)如如: :WNUM DW 1234H,12, AB, C DW ?,? DW 2 DUP(?)說明說明: : H H DW DW Define Word Define Word “字定義字定義” H H ? ? 雙字節(jié)隨機(jī)數(shù)雙字節(jié)隨機(jī)數(shù) H H 單引號中只能是一個或兩個字符單引號中只能是一個或兩個字符 功能功能: : H H通知匯編程序把通知匯編程序把DWDW后跟的雙字節(jié)數(shù)后跟的雙字節(jié)數(shù), , 依次存入從變量名開始的單元依次存入從變量名開始的單元, ,每一個數(shù)每一個數(shù) 占占2 2個字節(jié)個字節(jié)

50、, ,低位字節(jié)低位字節(jié)低址單元低址單元, , 高位字節(jié)高位字節(jié)相鄰的高址單元。相鄰的高址單元。功能功能: :H H用用DWDW定義的這些單元的屬性都是定義的這些單元的屬性都是“字字型型”, , 如上例如上例, WNUM , WNUM WNUM+11WNUM+11這這1212個單元的個單元的 屬性都是屬性都是“字型字型”。 匯編后匯編后WNUM:34 H 12 H 0CH0 042 H41 H43 H0 0X X X X X XX XWNUM+11:功能功能: :H H通知匯編程序把通知匯編程序把DDDD后跟的數(shù)存入變量名開始的單元后跟的數(shù)存入變量名開始的單元, , 每一個數(shù)占每一個數(shù)占4 4個

51、字節(jié)個字節(jié), ,低位字節(jié)低位字節(jié)低址單元低址單元, ,高位字高位字 節(jié)節(jié)高址單元。高址單元。 H H用用DDDD定義的這些單元的屬性都是定義的這些單元的屬性都是“雙字型雙字型”, ,上例上例 DNUM DNUM DNUM+3DNUM+3單元單元, ,這些單元都是雙字型單元。這些單元都是雙字型單元。3. 3. 雙字定義偽指令雙字定義偽指令 變量名變量名 DDDD 一串用逗號間隔的一串用逗號間隔的4 4字節(jié)數(shù)字節(jié)數(shù) 如如: : DNUM DD 12345678H 匯編后匯編后DNUM: 34H78H 56 H 12H5. 5. 等值偽指令等值偽指令 符號常數(shù)符號常數(shù) EQUEQU 表達(dá)式表達(dá)式 如

52、如: : NUM EQU 33 功能功能: : 定義符號常數(shù)定義符號常數(shù)NUMNUM的值為的值為33 33 6. 6. 等號偽指令等號偽指令 符號常數(shù)符號常數(shù)= =表達(dá)式表達(dá)式 如如: : NUM = 33 功能功能: :定義符號常數(shù)定義符號常數(shù)NUMNUM的值為的值為33 33 4. 4. 多字節(jié)定義偽指令多字節(jié)定義偽指令 變量名變量名 DFDF 一串用逗號間隔的一串用逗號間隔的6 6字節(jié)數(shù)字節(jié)數(shù) 變量名變量名 DQDQ 一串用逗號間隔的一串用逗號間隔的8 8字節(jié)數(shù)字節(jié)數(shù) 變量名變量名 DTDT 一串用逗號間隔的一串用逗號間隔的1010字節(jié)數(shù)字節(jié)數(shù)功能功能: : 通知匯編程序為通知匯編程序為

53、DF/DQ/DTDF/DQ/DT后跟的每一個數(shù),分配后跟的每一個數(shù),分配 6/8/106/8/10個單元。個單元。 三三. . 常用運算符常用運算符 1. 1. 算術(shù)運算符算術(shù)運算符: +, -, : +, -, * *, / , / 2. 2. 關(guān)系運算符關(guān)系運算符: : EQ( EQ(等于等于), NE(), NE(不等于不等于), GT(), GT(大于大于),LT(),LT(小于小于),), GE( GE(大于或等于大于或等于) )例如例如: : NUM EQU 33 MOV AL, NUM;該指令與下條指令等價該指令與下條指令等價 MOV AL , 33區(qū)別區(qū)別: :H H用用EQU

54、EQU定義的符號常數(shù)定義的符號常數(shù), ,其值在后繼語句中不能更改其值在后繼語句中不能更改H H用用“= =”定義的符號常數(shù)定義的符號常數(shù), ,其值在后繼語句中可以重新定義其值在后繼語句中可以重新定義 應(yīng)用應(yīng)用: : H H$ $運算符緊跟在運算符緊跟在 DBDB、DWDW、DDDD偽指令之后偽指令之后, ,統(tǒng)計字符統(tǒng)計字符 串的長度。串的長度。 例如數(shù)據(jù)段有例如數(shù)據(jù)段有: : BUF DB THE QUICK BROWN FOX ;字符串長度字符串長度19 LLL EQU $-BUF 匯編后匯編后 符號常數(shù)符號常數(shù)LLLLLL的值即為的值即為19193. $3. $運算符運算符 H H匯編程序

55、對源程序是逐行匯編的匯編程序?qū)υ闯绦蚴侵鹦袇R編的,$,$運算符可以返回運算符可以返回 匯編計數(shù)器的當(dāng)前值。匯編計數(shù)器的當(dāng)前值。如如: : MOV AX, SEG DATA MOV DS, AX設(shè)設(shè)“DATADATA”是數(shù)據(jù)段的段名是數(shù)據(jù)段的段名, ,上述兩條指令算出數(shù)據(jù)段上述兩條指令算出數(shù)據(jù)段的段基址的段基址, ,先賦給先賦給AX,AX,再轉(zhuǎn)賦再轉(zhuǎn)賦DSDS。 5.OFFSET5.OFFSET運算符運算符 H H格式:格式:OFFSET OFFSET 變量名或標(biāo)號名變量名或標(biāo)號名 H H功能:算出某個變量或標(biāo)號名所在單元的偏移地址(有效功能:算出某個變量或標(biāo)號名所在單元的偏移地址(有效地址)。

56、地址)。4. SEG4. SEG運算符運算符 H H格式格式: SEG : SEG 段名或變量名或標(biāo)號名段名或變量名或標(biāo)號名 H H功能功能: : 計算某一邏輯段的段基址計算某一邏輯段的段基址 設(shè)以設(shè)以“DATADATA”為段名的數(shù)據(jù)段中,存在為段名的數(shù)據(jù)段中,存在 BUF DB 12 ,34 ,56代碼段:代碼段: MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET BUF MOV AL,BX ;AL=12以下兩條指令等價的:以下兩條指令等價的: MOV BX,OFFSET BUF LEA BX,BUF6. PTRPTR運算符運算符 格式格式: : 類型說明符類型

57、說明符 PTR PTR 地址表達(dá)式地址表達(dá)式 功能功能: : 在在本條指令本條指令中中臨時修改臨時修改地址表達(dá)式的屬性地址表達(dá)式的屬性 內(nèi)存單元內(nèi)存單元5 5種尋址方式種尋址方式子程序的名稱子程序的名稱 BYTE BYTE(字節(jié))(字節(jié)) WORDWORD(字)(字) DWORDDWORD(雙字)(雙字) FARFAR(遠(yuǎn))(遠(yuǎn)) NEARNEAR(近)(近)PTRPTR運算符使用規(guī)則運算符使用規(guī)則 (1 1) 指令的操作數(shù)至少有一個類型屬性要確定,否則必須用指令的操作數(shù)至少有一個類型屬性要確定,否則必須用PTRPTR運算符說明其中的內(nèi)存操作數(shù)的類型運算符說明其中的內(nèi)存操作數(shù)的類型(2 2)若

58、兩個操作數(shù)的類型屬性都確定,則必須保持一致。否)若兩個操作數(shù)的類型屬性都確定,則必須保持一致。否則必須用則必須用PTRPTR運算符改變其中的內(nèi)存操作數(shù)的類型,以保持前運算符改變其中的內(nèi)存操作數(shù)的類型,以保持前后屬性一致。后屬性一致。類型屬性確定的操作數(shù)類型屬性確定的操作數(shù): 寄存器寄存器 用變量名直接尋址的內(nèi)存操作數(shù)用變量名直接尋址的內(nèi)存操作數(shù)類型屬性不確定的操作數(shù):類型屬性不確定的操作數(shù): 立即數(shù)立即數(shù) 間址、基址、變址、基址間址、基址、變址、基址+ +變址尋址的內(nèi)存操作數(shù)變址尋址的內(nèi)存操作數(shù)應(yīng)用:在下列指令中必須用應(yīng)用:在下列指令中必須用PTRPTR臨時修改或者顯示說明臨時修改或者顯示說明

59、 內(nèi)存單元的屬性內(nèi)存單元的屬性 在雙操作數(shù)指令中在雙操作數(shù)指令中( (如如:MOV:MOV,ADDADD,SUB,CMPSUB,CMP) H HH H源操作數(shù)為立即數(shù),目標(biāo)為直接尋址的內(nèi)存操作數(shù),源操作數(shù)為立即數(shù),目標(biāo)為直接尋址的內(nèi)存操作數(shù), 但立即數(shù)超過內(nèi)存操作數(shù)范圍,后者必須用但立即數(shù)超過內(nèi)存操作數(shù)范圍,后者必須用PTRPTR臨時修改臨時修改 其屬性其屬性 。 H H一操作數(shù)為寄存器,另一為直接尋址的內(nèi)存操作數(shù),一操作數(shù)為寄存器,另一為直接尋址的內(nèi)存操作數(shù), 但兩者屬性不一致,后者必須用但兩者屬性不一致,后者必須用PTRPTR臨時修改臨時修改 其屬性其屬性 。 H H源為單字節(jié)源為單字節(jié)/

60、 /雙字節(jié)立即數(shù),目標(biāo)為間址、變址、基雙字節(jié)立即數(shù),目標(biāo)為間址、變址、基址或基址加變址尋址的內(nèi)存操作數(shù)址或基址加變址尋址的內(nèi)存操作數(shù), ,后者必須用后者必須用PTRPTR顯顯示說明其屬性,以便和源操作數(shù)屬性一致。示說明其屬性,以便和源操作數(shù)屬性一致。 在單操作數(shù)指令中(如在單操作數(shù)指令中(如:INC:INC,DECDEC) 操作數(shù)為間址、變址、基址或基址加變址尋址的內(nèi)操作數(shù)為間址、變址、基址或基址加變址尋址的內(nèi) 存操作數(shù),必須用存操作數(shù),必須用PTRPTR說明是字節(jié)操作?字操作?還說明是字節(jié)操作?字操作?還 是雙字操作?是雙字操作?舉例:設(shè)數(shù)據(jù)段有:舉例:設(shè)數(shù)據(jù)段有: BUF DB 11,22

溫馨提示

  • 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

提交評論