匯編語(yǔ)言與匯編程序_第1頁(yè)
匯編語(yǔ)言與匯編程序_第2頁(yè)
匯編語(yǔ)言與匯編程序_第3頁(yè)
匯編語(yǔ)言與匯編程序_第4頁(yè)
匯編語(yǔ)言與匯編程序_第5頁(yè)
已閱讀5頁(yè),還剩227頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、匯編語(yǔ)言與匯編程序,第二章,主講:王曉影,計(jì)算機(jī)的指令是由一個(gè)或多個(gè)字節(jié)的二進(jìn)制數(shù)組成的,這種指令稱(chēng)為機(jī)器指令。,機(jī)器指令: 在計(jì)算機(jī)中,能夠被計(jì)算機(jī)識(shí)別,并能直接加以執(zhí)行的語(yǔ)句,我們稱(chēng)之為指令。,簡(jiǎn)單說(shuō),指令就是指揮計(jì)算機(jī)進(jìn)行某一基本操作的命令。,機(jī)器指令也叫做硬指令,不同類(lèi)型的CPU都有自己特有的、一定數(shù)量的基本指令。,機(jī)器語(yǔ)言:由指令構(gòu)成的集合。,由于使用起來(lái)不方便,所以不直接使用機(jī)器指令,而是使用助記符、符號(hào)等組成的符號(hào)指令。 用符號(hào)指令書(shū)寫(xiě)程序的語(yǔ)言稱(chēng)為匯編語(yǔ)言。,匯編語(yǔ)言:,從本質(zhì)上看,匯編語(yǔ)言是一種符號(hào)化的機(jī)器語(yǔ)言。它用助記符表示機(jī)器指令的操作碼,用變量代替操作數(shù)的存放地址,在語(yǔ)

2、句前加一個(gè)標(biāo)號(hào),用來(lái)代表該指令的存放地址。因此,匯編語(yǔ)言就是一種用符號(hào)書(shū)寫(xiě)的、其主要操作與機(jī)器指令一一對(duì)應(yīng),并遵循一定語(yǔ)法規(guī)則的計(jì)算機(jī)語(yǔ)言。,例如:,MOV AX,7FH MOV BX,1234H ADD AX,BX,注意: 匯編語(yǔ)言是為了方便用戶(hù)而設(shè)計(jì)的一種符號(hào)語(yǔ)言,并不能直接被計(jì)算機(jī)識(shí)別,必須將匯編語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序(也叫目標(biāo)程序),才能由計(jì)算機(jī)所執(zhí)行。,翻譯程序: 把匯編源程序翻譯成目標(biāo)代碼的程序。 目標(biāo)代碼: 就是機(jī)器語(yǔ)言程序。,把用匯編語(yǔ)言編寫(xiě)的源程序翻譯成機(jī)器指令(目標(biāo)程序)的過(guò)程叫匯編。 完成匯編任務(wù)的程序叫匯編程序,翻譯過(guò)程的圖形表示:,注意: 其它高級(jí)語(yǔ)言編寫(xiě)的程序,

3、也必須經(jīng)過(guò)編譯成目標(biāo)代碼,再經(jīng)過(guò)連接,生成可執(zhí)行文件才能執(zhí)行。,翻譯程序又稱(chēng)為: 編譯/解釋/匯編。,匯編程序: 把匯編源程序翻譯成目標(biāo)代碼程序的語(yǔ)言加工程序。,匯編程序的功能: (1)將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言程序; (2)根據(jù)用戶(hù)指定自動(dòng)分配存貯區(qū)域(包括程序區(qū)、數(shù)據(jù)區(qū)、 暫存區(qū)等); (3)自動(dòng)地把各種進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),把字符轉(zhuǎn)換成 ASC碼,計(jì)算表達(dá)式的值等。 (4)自動(dòng)對(duì)源程序進(jìn)行檢查,給出錯(cuò)誤信息。,注意:匯編程序不同于匯編語(yǔ)言程序。,匯編程序的分類(lèi): ASM 小匯編程序,占有較小的存貯區(qū),但 功能較弱。 MASM 宏匯編程序,需要較大的存貯區(qū), 但功能強(qiáng)大,具有宏匯編能力

4、。,宏匯編能力: 允許用一個(gè)宏指令名字代替程序中重復(fù)出現(xiàn)的一組語(yǔ)句,在其它的地方,可以用宏指令名字及不同的參數(shù)來(lái)調(diào)用。,使用宏調(diào)用的目的: 使程序清晰、簡(jiǎn)潔,便于閱讀修改。,為了MASM.EXE能很好地工作,源程序必須有一定的格式指出: 程序從什么地方開(kāi)始、什么時(shí)候結(jié)束、數(shù)據(jù)放在哪里、數(shù)據(jù)類(lèi)型是什么、臨時(shí)存貯區(qū),這需要一組指令指示MASM工作,這種指令叫做 偽指令。,2.1 符號(hào)指令中的表達(dá)式 使用符號(hào)指令編寫(xiě)程序,除了正確使用助記符和定義符號(hào)外,其主要問(wèn)題是正確地表示操作數(shù)的地址,即正確地使用尋址方式。而尋址方式的使用又可歸結(jié)為地址表達(dá)式的使用。,1常量 常量 指那些在將匯編源程序翻譯成目標(biāo)

5、程序期間已經(jīng)確定數(shù)值的量。 常量主要用于: 偽指令語(yǔ)句中給變量賦初值,或者用作機(jī)器指令語(yǔ)句中的立即操作數(shù)、變址尋址和基址加變址中的位移量。 常量一般可以直接以數(shù)值形式出現(xiàn)在匯編語(yǔ)言中,這種常量稱(chēng)數(shù)值常量。 對(duì)經(jīng)常引用的數(shù)值常量,可以事先定義一個(gè)名字,然后在語(yǔ)句中用名字來(lái)表示該常量,這種常量稱(chēng)為符號(hào)常量。 偽指令EQU和等號(hào)“=”可用來(lái)實(shí)現(xiàn)將數(shù)值常量定義成符號(hào)常量的功能。,2.1.1 常量和數(shù)值表達(dá)式,例: A EQU 10 B=100 MOV AX,A ADD AX,B 1) 數(shù)字常數(shù) IBM宏匯編中,允許以下幾種常數(shù): 二進(jìn)制常數(shù) 以字母B結(jié)尾的由若干個(gè)“0”和“1”組成的序列 例:0 0

6、1 0 1 1 0 0 B 十進(jìn)制常數(shù): 由若干個(gè)0到9的數(shù)字組成的序列,可以以字母D結(jié)尾,或省略字母D。 例:1 2 3 4 D或1 2 3 4,十六進(jìn)制常數(shù): 以字母H結(jié)尾,由若干個(gè)09的數(shù)字或字母AF所組成的序列。為了避免與標(biāo)識(shí)符相混淆,十六進(jìn)制數(shù)必須以數(shù)字打頭。所以凡以字母AF開(kāi)始的十六進(jìn)制數(shù),必須在前面加上0。 例:0AFH,0BDH,456H等 八進(jìn)制常數(shù): 以字母Q結(jié)尾的,由若干個(gè)07的數(shù)字組成的序列。 例:1 2 3 4 Q等 十進(jìn)制科學(xué)表示法:即十進(jìn)制浮點(diǎn)表示法 例:1.5E-2,2.5E+2等,十六進(jìn)制實(shí)數(shù) 由若干位十六進(jìn)制數(shù)碼(09)和(AF)組成,以字母H結(jié)尾,第一位必

7、須是09之間的數(shù)碼,一個(gè)十六進(jìn)制實(shí)數(shù)的總的數(shù)字位數(shù)必須是8、16或20,而由字母打頭的數(shù)前面必須加0,這時(shí)數(shù)字位數(shù)多一位。 例如:356C H,0ABH 主要原因是:可以和標(biāo)號(hào)中或變量名相區(qū)別,因?yàn)樽兞棵?和標(biāo)號(hào)名不能以數(shù)字開(kāi)頭,可以以其它字符 開(kāi)頭。 F6可以是變量名和標(biāo)號(hào)名,而不能作為操作項(xiàng)中常數(shù)(十六進(jìn)制數(shù))。要作為十六進(jìn)制數(shù),必須寫(xiě)成0F6H。 例如:常數(shù) MOV AL,0BCH;將十六進(jìn)制數(shù)0BC送入AL 變量 MOV AL,BCH;將符號(hào)地址為BCH數(shù)據(jù)段 中的字節(jié)單元的內(nèi)容送入 AL中。,1) 字符串常數(shù) 字符串常數(shù) 是由包含在同一種單引號(hào)“,”內(nèi)的1至2個(gè)以上ASC字符構(gòu)成的,

8、匯編程序把它們表示成一個(gè)字符序列,一個(gè)字節(jié)對(duì)應(yīng)一個(gè)字符,把引號(hào)中的字符翻譯成它的ASC的值。 例如:A41H,AB4142H。 在可以使用單字節(jié)立即數(shù)的地方,就可以使用單個(gè)字符組成的字符串常數(shù)。 在可以使用立即數(shù)的地方,就可以使用兩個(gè)字符組成的字符串常數(shù)。 在初始化存儲(chǔ)器時(shí)才可以使用多于兩個(gè)字符的字符串常數(shù)。 2) 符號(hào)常數(shù) 符號(hào)常數(shù) 常數(shù)也可以用符號(hào)名代替 例如:MOV CX,COUNT,它必須用偽指令EQU定義,2、數(shù)值表達(dá)式 表達(dá)式是常數(shù)、寄存器、標(biāo)號(hào)、變量與一些運(yùn)算符和操作符相結(jié)合的序列。 表達(dá)式可以分為兩類(lèi): 數(shù)字表達(dá)式 它的運(yùn)算結(jié)果是一數(shù)值常量,它只有大小沒(méi)有屬 性。 地址表達(dá)式

9、它的值一般都是段內(nèi)偏移地址,因此它具有段、偏 移地址及類(lèi)型三個(gè)屬性。 在匯編期間,匯編程序按照一定的優(yōu)先規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算后得到一個(gè)數(shù)值或一個(gè)地址。,數(shù)字表達(dá)式: 下面介紹五類(lèi)運(yùn)算和操作符: 1.算術(shù)運(yùn)算符 算術(shù)運(yùn)算符包括: 加(+)、減()、乘(*)、除(/)、 模除(MOD)、右移(SHR)、左移(SHL) 模除(MOD) 表示兩整數(shù)相除后取余數(shù)。 移位運(yùn)算 表示將二進(jìn)制常量右移或左移,運(yùn)算符右邊所規(guī)定的 次數(shù),所空出的位數(shù)均補(bǔ)0。,例如:SHL AL,1 算術(shù)(或邏輯)左移次數(shù)=m,即m=1,左移1位 算術(shù)運(yùn)算可以用于數(shù)字表達(dá)式或地址表達(dá)式中。 當(dāng)它用于地址表達(dá)式時(shí),只有當(dāng)其結(jié)果有明確

10、的物理意義時(shí),其結(jié)果才是有效的。 例如:兩個(gè)地址相乘或相除是無(wú)意義的。 兩個(gè)不同段地址相加也是無(wú)意義的。 在地址表達(dá)式中,可以使用+或-,但也必須注意其物理意義。 例如:SUM+1 指SUM字節(jié)單元的下一個(gè)字節(jié)單元的地址 (注意,不是指SUM單元的內(nèi)容加1) 例如:要求把首地址為AA的字?jǐn)?shù)組的第3個(gè)字傳送到DX寄存器, 可用如下指令表示:MOV DX,AA+(3-1)*2,2.1.2 變量和地址表達(dá)式 變量 是一個(gè)數(shù)據(jù)存儲(chǔ)單元的名字,即數(shù)據(jù)存放地址的符號(hào)表示。 它可以用EQU偽指令定義。 由于主存是分段使用的,因而對(duì)源程序中所定義的變量體現(xiàn)出以下三個(gè)方面的屬性: 1) 變量的段地址 即指定義變

11、量所在段的段首址除以10H之商,當(dāng)需要訪(fǎng)問(wèn)該變量時(shí),該段首址一定要在某一段寄存器中。 2) 變量的偏移地址 是指變量所在段的段首址到該變量定義語(yǔ)句的字節(jié)距離。 3) 變量的類(lèi)型 是指存取該變量中的數(shù)據(jù)所需要的字節(jié)數(shù)。,字節(jié)類(lèi)型 (一個(gè)數(shù)據(jù)存儲(chǔ)單元占1個(gè)字節(jié)) DB 字類(lèi)型 (一個(gè)數(shù)據(jù)存儲(chǔ)單元占2個(gè)字節(jié)) DW 雙字類(lèi)型 (一個(gè)數(shù)據(jù)存儲(chǔ)單元占4個(gè)字節(jié)) DD 4字類(lèi)型 (一個(gè)數(shù)據(jù)存儲(chǔ)單元占8個(gè)字節(jié)) DQ 10字節(jié)類(lèi)型(一個(gè)數(shù)據(jù)存儲(chǔ)單元占10個(gè)字節(jié)) DT 在程序中,標(biāo)號(hào)名或變量名只能在一處定義,不能在不同的位置用同一標(biāo)號(hào)名或變量名,否則匯編程序會(huì)指示出錯(cuò)。 變量的定義 變量一般都在數(shù)據(jù)段或附加

12、數(shù)據(jù)段中使用數(shù)據(jù)定義偽指令DB、DW、DD、DQ、DT來(lái)定義。,變量定義格式: 變量名 數(shù)據(jù)定義偽指令 表達(dá)式, 其中表達(dá)式可以是以下幾種形式: 數(shù)值表達(dá)式 ; ASC字符串(只有用DB定義變量時(shí),才允 許單字符串長(zhǎng)度超過(guò)2個(gè)字符); 地址表達(dá)式(只適用DW和DD兩個(gè)偽指令),如果該地址表達(dá)式為一變量或標(biāo)號(hào)時(shí),用DW定義,則是取偏移地址來(lái)初始化變量,若用DD定義,則是取其段地址和偏移地址來(lái)初始化變量。,取偏地址初始化變量,取段首址和偏移地址來(lái)初始化變量,(4)?(表示所定義的變量無(wú)確定的初值),一般用來(lái)預(yù)留若干字節(jié)(字或雙字)存儲(chǔ)單元,以存放程序的運(yùn)行結(jié)果; (5)重復(fù)子句。 格式:n DUP

13、(表達(dá)式) 其中:n是重復(fù)因子,只能取正整數(shù),它表示定義了n個(gè)數(shù)據(jù)存儲(chǔ)單元其類(lèi)型由它前面的數(shù)據(jù)定義偽指令確定。 而每個(gè)數(shù)據(jù)存儲(chǔ)單元中的初值由DUP后面的圓括號(hào)中的表達(dá)式給定,如果是問(wèn)號(hào),則表示無(wú)確定的初值。 例1:BUF1 DB 40 DUP( ) 定義了一個(gè)40個(gè)字符的緩沖區(qū)BUF1,其初值均設(shè)為空格字符。,例2:BUF2 DB 50 DUP(4 DUP(3),9) BUF2中有50(4+1)=250個(gè)字節(jié),初始內(nèi)容為50個(gè)連續(xù)的(3,3,3,3,9) n DUP(M DUP(表達(dá)式1),表達(dá)式2) 這里共有n(m+1)個(gè)定義類(lèi)型的數(shù)據(jù),初值由表達(dá)式確定。 綜合舉例: DATA SEGMEN

14、T A DB ABC,0DH,0AH B DW M C EQU 100H D DD A M DB 2 DUP(1),2 DUP(2,B),1,2,3 DATA ENDS,綜合舉例: DATA SEGMENT A DB ABC,0DH,0AH C EQU 100H M DB 2 DUP(1),2 DUP(2,B),1,2,3 DATA ENDS,定義了以變量A為首址的、大小為5個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)區(qū)。,定義了以變量M為首址的、大小為9個(gè)字節(jié)的數(shù)據(jù)存儲(chǔ)區(qū)。,標(biāo)號(hào)是某條指令所存放單元的符號(hào)地址,也可以是過(guò)程名。 過(guò)程入口地址的符號(hào)表示,即過(guò)程的第一條指令的地址。 變量是某操作數(shù)據(jù)所存放單元的符號(hào)地址。

15、標(biāo)號(hào)的定義方式有兩種: (1) 用“:”定義,直接寫(xiě)在指令助記符前。 如定義標(biāo)號(hào)YY YY: MOV AL,SI (2) 用PROC和ENDP偽指令定義過(guò)程。 標(biāo)號(hào)常常在轉(zhuǎn)移指令或CALL指令的操作數(shù)字段出現(xiàn),用以表示轉(zhuǎn)移地址。,2.1.3 標(biāo)號(hào),標(biāo)號(hào)也可以用EQU或LABEL偽指令來(lái)定義。 標(biāo)號(hào)常常在轉(zhuǎn)移指令或CALL指令的操作數(shù)字段出現(xiàn),用以表示轉(zhuǎn)移地址。 標(biāo)號(hào)是機(jī)器指令語(yǔ)句存放地址的符號(hào)表示,也可以是過(guò)程名,過(guò)程名實(shí)際上是過(guò)程的入口地址的符號(hào)表示,即過(guò)程第一條機(jī)器指令語(yǔ)句的存放地址。 CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DAT

16、A MOVDS,AX 定義該標(biāo)號(hào)所在段的段首址,例: JMP L1 標(biāo)號(hào)的偏移地址是16位無(wú)符號(hào)數(shù) L1: 例: JMP FAR PTR L2 段間引用 L2: 標(biāo)號(hào)的定義方式為: L1:MOV AL,SI ;定義近標(biāo)號(hào)。 SUB1 PROC FAR;定義過(guò)程名SUB1為遠(yuǎn)標(biāo)號(hào)。 SUB2 PROC ;定義過(guò)程名SUB2為近標(biāo)號(hào)。 標(biāo)號(hào)一般只在代碼段中定義和引用,由于標(biāo)號(hào)代表了指令的符號(hào)地址,因而也有3種屬性: 段、偏移和類(lèi)型。,1) 標(biāo)號(hào)的段屬性: 指定義該標(biāo)號(hào)所在段的段首址,此值必須在一個(gè)段寄存器中,而標(biāo)號(hào)的段則總是在CS段寄存器中。 2) 偏移屬性: 標(biāo)號(hào)的偏移地址是16位無(wú)符號(hào)數(shù),指它

17、所在段的段首址到該標(biāo)號(hào)定義語(yǔ)句之間的字節(jié)數(shù),標(biāo)號(hào)的偏移地址總是在IP寄存器中。 3) 類(lèi)型屬性: 用來(lái)指出標(biāo)號(hào)是本段內(nèi)引用還是在其它段中引用的, 如在段內(nèi)引用的,則稱(chēng)為NEAR PTR說(shuō)明。 如在段間引用的,則稱(chēng)為FAR PTR說(shuō)明。 若沒(méi)有對(duì)標(biāo)號(hào)進(jìn)行類(lèi)型說(shuō)明就假定為NEAR。 例: JMP AA 此標(biāo)號(hào)的屬性為NEAR,2.1.4 變量和標(biāo)號(hào)的變更,在編程時(shí)往往需要臨時(shí)改變?cè)x的變量或標(biāo)號(hào)的類(lèi)型,PRT算符用來(lái)明確指出某個(gè)變量、標(biāo)號(hào)或地址表達(dá)式的類(lèi)型屬性,或者使它們臨時(shí)兼有與原定義所不同的類(lèi)型屬性,但仍保持它們?cè)瓉?lái)的段地址和偏移地址屬性不變。 其格式: 類(lèi)型 PTR 地址表達(dá)式 例: BY

18、TE PTR W1 臨時(shí)改變字變量 W1的類(lèi)型為字節(jié)變量。 例: WORD PTR B3 臨時(shí)改變字節(jié)變量 B3的類(lèi)型為字變量。 例: BYTE PTR BX+5 明確地址表達(dá)式BX+5的類(lèi)型屬性為字節(jié)。,2.2 符號(hào)指令的尋址方式,在8086微處理器中,一條指令通常由操作碼加上操作數(shù)構(gòu)成。 指令形式:操作碼 操作數(shù)1,操作數(shù)2;注釋 其中,操作碼指明執(zhí)行的動(dòng)作,操作數(shù)指明操作的對(duì)象。 由于寄存器數(shù)量有限,操作數(shù)不可能都放在寄存器中,實(shí)際上,操作數(shù)既可以放在寄存器中,也可以放在主存貯器中,這樣就涉及到操作數(shù)的尋址問(wèn)題。我們將尋址操作數(shù)存放地址的方式稱(chēng)為尋址方式。 8086提供6種基本尋址方式。

19、,22.1 寄存器尋址 在這種尋址方式中,指令所指明的寄存器就是操作數(shù)的存放地址。 匯編格式:R(R為8或16位寄存器) 功能:寄存器R的內(nèi)容就是操作數(shù)。,表示:指令指明操作數(shù)在R中。,例:INC AX 操作數(shù)在AX中。 AX 執(zhí)行前:(AX)=12H 執(zhí)行:(AX)+1AX。 執(zhí)行后:(AX)=13H,INC指令,12H,13,例:ADD AX,BX AX為目的操作數(shù)地址,BX為源操作數(shù)地址。 執(zhí)行前:(AX)=1234H,(BX)=5620H 執(zhí)行:(AX)+(BX)AX。 執(zhí)行后:(AX)=6854H,(BX)=5620H 此例中,目的操作數(shù)、源操作數(shù)都是用寄存器尋址。,6854H,注意

20、: 采用寄存器尋址方式,指令執(zhí)行速度快。特別是加法指令,如果目的操作數(shù)為AX,指令執(zhí)行快一些。 采用寄存器尋址方式,目的、源操作數(shù)類(lèi)型必須一致。 如:MOV AH,BX就是錯(cuò)誤的。,2.2.2 立即尋址 操作數(shù)直接存放在指令中,緊跟在操作碼之后,它作為指令的一部分存放在代碼段里,這種操作數(shù)稱(chēng)為立即數(shù)。 匯編格式:n 功能:指令的下一單元的內(nèi)容為操作數(shù)n,即:,n也稱(chēng)為立即數(shù)。,例如:MOV AX,3064H 目的操作數(shù)采用寄存器尋址,地址為AX。 源操作數(shù)采用立即尋址。即:,該功能主要用來(lái)給寄存器賦值。,注意: (1) 立即數(shù)只能作源操作數(shù),不能作目的操作數(shù)。 如:MOV 100H,AX。 (

21、2)立即數(shù)作為源操作數(shù)時(shí),注意溢出。 如:MOV AH,-90H;這個(gè)語(yǔ)句是錯(cuò)誤的。 因?yàn)椋?-90H=-142-128。,2.2.3 直接尋址 直接尋址方式中,操作數(shù)的偏移地址就在指令操作碼后面,而操作數(shù)則存放在數(shù)據(jù)段。 匯編格式:地址表達(dá)式或段寄存器:EA 功能:指令下一字單元的內(nèi)容是操作數(shù)的偏移地址。,例如:MOV AX,2000H 執(zhí)行前:(DS)=3000H,(32000H)=1234H 源操作數(shù)尋址過(guò)程:,執(zhí)行:(32000H) AX 執(zhí)行后:(AX)=1234H 注意:8086匯編語(yǔ)言中,可以用含有變量的地址表達(dá) 式代替數(shù)地址。,如:MOV AX,VALUE+6 其中VALUE定

22、義在數(shù)據(jù)段: VALUE DW 12H,13H,14H,15H,16H 此時(shí),操作為(VALUE+6)的內(nèi)容AX, 也就是將15H送到AX中。,2.2.4 寄存器間接尋址 在間接尋址方式中,操作數(shù)存放在存儲(chǔ)器中,而操作數(shù)的偏移地址EA在指令指明的寄存器中,即寄存器的內(nèi)容為操作數(shù)的偏移地址的。 能夠用來(lái)間接尋址的寄存器,只能是寄存器SI、DI、BP、BX其中之一,所以,對(duì)于寄存器間接尋址方式給出的操作數(shù),其偏移地址EA按下式計(jì)算:,操作數(shù)在當(dāng)前數(shù)據(jù)段中,EA=,SI用SI作間址寄存器,DI用DI作間址寄存器,BX用BX作間址寄存器,BP用BP作間址寄存器,操作數(shù)在堆棧段中,其用寄存器BX、DI或

23、SI間接尋址,則操作數(shù)在當(dāng)前數(shù)據(jù)段中,即數(shù)據(jù)段寄存器DS的內(nèi)容左移四位,加上BX、DI或SI中的偏移地址EA形成操作的物理地址PA。 若用寄存器BP間接尋址,則操作數(shù)在堆棧段中,即堆棧段寄存器SS的內(nèi)容左移四位,加上BP中的偏移地址,EA形成操作數(shù)的物理地址PA。 操作數(shù)的有效地址(偏移地址)在基址寄存器BX、BP或變址寄存器SI、DI中,而操作數(shù)則在存貯器中。,匯編格式:R 功能:R的內(nèi)容為操作數(shù)的偏移地址EA,即:,注意BP所指的段為堆棧段。,此種尋址方式如圖所示,在寄存器間接尋址方式中,寄存器DI,SI,BP或BX作為間址寄存器使用,其內(nèi)容是操作數(shù)的偏移地址,所以,通常將它們稱(chēng)作地址指示

24、器,用于存取存儲(chǔ)中的數(shù)據(jù)。 若在指令中規(guī)定是段超越的,則BP也可以與其它段寄存器相加,形成操作數(shù)地址。,例:MOV AX,SI AX是目的操作數(shù)地址,采用寄存器尋址方式; SI指明源操作數(shù)采用寄存器間接尋址方式。 假定執(zhí)行前:(AX)=5,(DS)=2000H, (SI)=1000H,(21000H)=50A0H。 源操作數(shù)尋址過(guò)程:,執(zhí)行:(21000H) AX 執(zhí)行后:(AX)=50A0H,(SI)、(DS)、(21000H)不變,例:MOV AX,BP 假定執(zhí)行前:(AX)=0,(BP)=30H, (SS)=2000H,(20030H)=1234H。 源操作數(shù)尋址過(guò)程:,執(zhí)行:(2003

25、0H) AX 執(zhí)行后:(AX)=1234H,(BP)、(SS)、(20030H)不變。,2.2.5基址尋址 匯編格式:XR 功能: R的內(nèi)容和指令中指定的8位或16位偏移量之和為操作數(shù)的偏移地址的操作數(shù)的有效地址,是一個(gè)基址寄存器的內(nèi)容和指令中指定的8位或16位偏移量之和。,其中8位或16位偏移量是個(gè)帶符號(hào)數(shù),是補(bǔ)碼。 當(dāng)偏移量為8位時(shí),計(jì)算有效地址時(shí),符號(hào)位自動(dòng)擴(kuò)展成16位進(jìn)行計(jì)算。 同樣BX和BP用DS和SS。 這種尋址方式如圖所示:,寄存器相對(duì)尋址方式示意圖,例1:MOV AX,-6BX 源操作數(shù)采用變址尋址方式,X的值為-6,選用的變址寄存器為BX,所以源操作數(shù)的EA=BX-6,數(shù)據(jù)段

26、寄存器DS的內(nèi)容左移4位與EA相加,形成源操作數(shù)的物理地址PA,目的操作數(shù)采用寄存器尋址方式,其操作數(shù)地址為AX。 執(zhí)行前:(AX)=0,(BX)=16H,(DS)=2000H, (2000H)=3789H EA=16-6=10H PA=(DS)左移4位+EA,源操作數(shù)的尋址過(guò)程用以下示意圖表示:,執(zhí)行:(2000H)AX 執(zhí)行后:(AX)=3789H,(BX)、(DS)、 (20010H)未變。,例2:ADD 5BP, BX 執(zhí)行前:(BX)=40H,(BP)=30H, (SS)=2000H 執(zhí)行:,(20035H)+(BX)20035H,執(zhí)行后:(20035H)=90H,(BX)(BP)

27、(SS)未變。,請(qǐng)同學(xué)們填空,90,2.2.6 變址尋址,(或稱(chēng)直接變址尋址方式) 匯編格式:XR 功能: R的內(nèi)容和指令中指定的8位或16位偏移量之和為操作數(shù)的偏移地址的操作數(shù)的有效地址,是一個(gè)變址寄存器的內(nèi)容和指令中指定的8位或16位偏移量之和。,其中8位或16位偏移量是個(gè)帶符號(hào)數(shù),是補(bǔ)碼。 當(dāng)偏移量為8位時(shí),計(jì)算有效地址時(shí),符號(hào)位自動(dòng)擴(kuò)展成16位進(jìn)行計(jì)算。 同樣SI和DI用DS。 這種尋址方式如圖所示:,寄存器相對(duì)尋址方式示意圖,例:MOV AX , ES: COUNTDI 此指令的源操作數(shù)的有效地址EA=COUNT+DI 段地址為ES 物理地址PA=16ES+COUNT+DI,關(guān)于段寄

28、存器的選擇同寄存器間接尋址一樣,只能是BP、BX、DI、SI之一。注意BP所指的段為堆棧段。,例:MOV AX ,COUNTSI 或 MOV AX , SI+COUNT 其中COUNT為16位偏移量這是符號(hào)地址實(shí)際上 COUNT究竟是8位偏移量,還是16位偏移量,可由偽指令來(lái)定義。 如: DS=3000H,SI=2000H,COUNT=3000H, 則: EA=2000+3000=5000H PA=30000H+5000H=35000H 指令執(zhí)行前:(AX)=8A45H ,(35000H)=34H (35001H)=12H,指令執(zhí)行后:(AX)=1234H 這種尋址方式也可采用段超越前綴。,1

29、2,34,源操作數(shù)的尋址過(guò)程如下:,執(zhí)行:(35000H) AX 執(zhí)行后:(AX)=1234H,(SI)、(DS)、(35000H)內(nèi)容不變。,例2:MOV AX,6SI MOV CX,6BX MOV DX,6BP 執(zhí)行前:(DS)=2000H,(SS)=4000H,(SI)=10H (DI)=20H,(BX)=30H,(BP)=40H 第1條:源操作數(shù)地址EA=SI+6=16H PA=(DS)左移4位+EA=20016H 第2條:源操作數(shù)地址EA=BX+6=36H PA=(DS)左移4位+EA=20036H 第3條:源操作數(shù)地址EA=BP+6=46H PA=(SS)左移4位+EA=40046

30、H,2.2.7 基址加變址尋址 操作數(shù)的偏移地址EA是指令中指定的基址寄存器內(nèi)容、變址寄存器內(nèi)容及位移量X三者之和。 操作數(shù)存放在主存之中。段地址由基址寄存器確定在那一個(gè)段寄存器中,即若用BX作為基址寄存器,則操作數(shù)在數(shù)據(jù)段區(qū)域中;若用BP作為基址寄存器,則操作數(shù)在堆棧段區(qū)域中。 匯編格式:XBR + IR BR表示基址寄存器,只能選用BX,BP之一; IR表示變址寄存器,只能選用SI,DI之一。 功能:BR的內(nèi)容加上IR的內(nèi)容,再加上X,得到操 作數(shù)的偏移地址。也就是: EA =(BR)+(IR)+X。,物理地址(PA): PA=16DS+BX+SI PA=16DS+BX+DI PA=16S

31、S+BP+SI PA=16SS+BP+DI,這種尋址方式如圖所示:,EA = BX + SI或DI + X; 數(shù)據(jù)在當(dāng)前DS中 EA = BP + SI或DI + X; 數(shù)據(jù)在當(dāng)前SS中 同前面一樣,基址寄存器決定操作數(shù)所在的段。如果選用BX,則操作數(shù)在數(shù)據(jù)段內(nèi);如果選用BP,則操作數(shù)在堆棧段內(nèi)。,例1:MOV AX,MASKBXSI,也可以寫(xiě)成: MOV AX,MASKBX+SI或MOV AX,MASK+BX+SI 目的操作數(shù)采用寄存器尋址,地址在AX。 源操作數(shù)采用基址加變址尋址, EA = BX+SI+MASK。 執(zhí)行前:(DS)=3000H,(BX)=2000H,(SI)=1000H,

32、 MASK=250H,(33250H)=1234H,源操作數(shù)尋址過(guò)程:,執(zhí)行:(33250H) AX 執(zhí)行后:(AX)=1234H,(BX)、(SI)、(DS)、 (33250H)不變。,例2:ADD AX,MASKBP+DI 目的操作數(shù)采用寄存器尋址,地址在AX。 源操作數(shù)采用基址加變址尋址, EA = BP+DI+MASK。 執(zhí)行前:(SS)=3000H,(BP)=2000H, (DI)=1000H,MASK=8H,(33008H)=34H, (AX)=12H。,源操作數(shù)尋址過(guò)程:,執(zhí)行:(AX)+(33008H) AX 執(zhí)行后:(AX)=46H,(BP)、(DI)、(SS)、 (3300

33、8H)不變。,2.2.8 跨段尋址 8086的存儲(chǔ)器是分段使用的,通常若選用寄存器BP作間址寄存器,變址寄存器或基址寄存器,即在采用寄存器間接尋址,變址尋址或基址加變址時(shí),只要BP出現(xiàn)在方括號(hào)之內(nèi),則操作數(shù)在當(dāng)前堆棧段,此時(shí),操作數(shù)的物理地址PA由堆棧段寄存器SS的內(nèi)容左移4位與偏移地址的EA相加形成,否則,操作數(shù)在當(dāng)前數(shù)據(jù)段,此時(shí),操作數(shù)物理地址PA由數(shù)據(jù)段寄存器DS的內(nèi)容左移4位與偏移地址EA相加形成,還是8086的基本約定,即默認(rèn)狀態(tài)。當(dāng)要否定默認(rèn)狀態(tài)。 到非約定段尋找操作數(shù)時(shí),必須用跨段前綴指明操作數(shù)所在段的段寄存器名。,例如:MOV AX,DS:BP MOV BX,ES:BX MOV

34、 CX,SS:SI MOV DX,SS:DI DS、ES、SS指明了數(shù)據(jù)所在段,而原來(lái)的默認(rèn)狀態(tài)不起作用。 其中,DS:,ES:,SS:均為跨段前綴,此時(shí),默認(rèn)狀態(tài)不起作用。所以,操作數(shù)的物理地址由,“:”前面的段寄存器內(nèi)容左移4位與偏移地址相加形成。,匯編格式:段寄存器名: 功能:冒號(hào)之前的段寄存器指明了操作數(shù)所在段。,按跨段前綴的說(shuō)明,上述4條指令的源操作數(shù)物理地址分別如下計(jì)算: 第(1):(DS)左移4位+(BP)源操作數(shù)在堆棧段 第(2):(ES)左移4位+(BX) 第(3):(SS)左移4位+(SI) 第(4):(SS)左移4位+(DI) 無(wú)論是段默認(rèn)狀態(tài),還是跨段情況,操作數(shù)的物理

35、地址PA均由系統(tǒng)自動(dòng)計(jì)算。,28 尋址方式綜合舉例 例:ADD,AX,BX 其源操作數(shù)采用寄存器間接尋址方式,目的操作數(shù)采用寄存器承擔(dān)方式。 執(zhí)行前:(AX)=30,(BX)=100H, DS=(100H)=16 執(zhí)行過(guò)程: 目的地址為AX,從中取出目的操作的數(shù)30。源操作數(shù)地址為DS:100H,從中取出源操作數(shù)16,源目操作數(shù)相加送入目的地址為AX之中。 執(zhí)行后:(AX)=46,(BX), DS:(100H)未變。,例2:ADD 2BX,AX 其源操作數(shù)采用寄存器尋址,目的操作數(shù)采用變址尋址方式。 執(zhí)行前: (AX)=40,(BX)=100H,DS=(102H)=57 執(zhí)行過(guò)程:目的操作數(shù)地

36、址為DS=102H,從中取出目的操作數(shù)57。 源操作數(shù)地址為AX,從中取出源操作數(shù)40,源、 目操作數(shù)相加送入目的地址之中。 即:57+40=97 DS:102H 執(zhí)行后:DS:(102H)=97,(AX)(BX)未變。 例3:ADD AX ,4BX+SI 其源操作數(shù)采用基址加變址尋址方式,目的操作數(shù)采用寄存器尋址方式。 執(zhí)行前:(AX)=35,(BX)=100H, (SI)=20H,(124H)=43。 執(zhí)行過(guò)程:目的操作數(shù)地址是AX,從中取出目的操作數(shù)35,源操作數(shù)地址是124H,從中取出目的操作數(shù)43,源操作數(shù)相加,,運(yùn)算結(jié)果送入目的地址AX之中, 即43+35=78AX 執(zhí)行后:(AX

37、)=78,(BX)(SI)(124H)未變。 該指令的源操作數(shù)在當(dāng)前數(shù)據(jù)段(選用了BX作基址寄存器)故(124H)表示當(dāng)前數(shù)據(jù)段124H號(hào)字單元中的內(nèi)容。 例4:請(qǐng)問(wèn)如下程序執(zhí)行到EXIT時(shí),字節(jié)單元A,B,C+1,C+2,中的內(nèi)容又是什么? STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT A DB 0 B DB 0 C DB 30H,40H,50H DATA ENDS,;開(kāi)辟200個(gè)字節(jié)的存儲(chǔ)屋,每個(gè)存儲(chǔ)單元的初值均為0。,CODE SEGMENT ASSUME CS:CODE ,DS:DATA,SS:STACK START

38、:MOV AX ,DATA MOV DS ,AX MOV AL,C+1 ;直接尋址(C+1)=40AL ADD AL,C ;直接尋址(AL)+(C)=40+30AL MOV,A,AL ;寄存器尋址;(AL)=70A MOV,AL,C+1 ;直接尋址;(C+1)=40AL ADD,AL,C+2,;直接尋址;(AL)+(C+2)=40+50AL MOV,B,AL ;寄存器尋址;(AL)=90B ADD,C,10, ;立即尋址;(C)+10=40C ADD,C+1,20 ;立即尋址;(C+1)+20=60C+1 ADD,C+2,30 ;立即尋址;(C+2)+30=80C+2 EXIT:MOV,AH,

39、4CH INT,21H; ; 結(jié)束用戶(hù)程序,返回DOS狀態(tài) CODEENDS END START,功能: 定義一個(gè)以變量名為首地址的字節(jié)數(shù)據(jù)存儲(chǔ)區(qū),所含數(shù)據(jù)存儲(chǔ)單元的個(gè)數(shù)由其后表達(dá)式的個(gè)數(shù)決定,并為各數(shù)據(jù)存儲(chǔ)單元提供一個(gè)由其對(duì)應(yīng)表達(dá)式得出的初值。 本程序數(shù)據(jù)段中,三次利用偽指令DB定義了三個(gè)字節(jié)數(shù)據(jù)存儲(chǔ)區(qū)它們?cè)谥鞔嬷写娣诺男问饺鐖D所示。,當(dāng)程序從START執(zhí)行到EXIT時(shí)各字節(jié)變量的內(nèi)容和存放形式如圖所示:,變量C與數(shù)據(jù)段首址相距2字節(jié),即其偏移地址為2,所以以下兩條語(yǔ)句具有相同的功能: (1)MOV AL,C (2)MOV AL,DS:2 二者的功能都是從字節(jié)變量C中取出數(shù)據(jù)送AL中。,例:

40、執(zhí)行下列指令后,AX的內(nèi)容是什么? TABLE DW 10H,20H,30H,40H,50H ENTRY DW 3 MOV BX,OFFSET TABLE ADD BX,ENTRY 直接尋址 MOV AX,BX 寄存器間接尋址 ,第1句:TABLE在DS段內(nèi)的偏移地址 BX 第2句:TABLE偏移地址 + 3 BX 第3句:(TABLE偏移地址 + 3)單元的內(nèi)容 AX 所以,執(zhí)行后:(AX)=3000H,例:指出下列程序完成的功能。,STACK SEGMENT DB 200 DUP(0) STACK ENDS ;- DATA SEGMENT BUF1 DB 20,21,22,23,24,25

41、,26,27,28,29,30,31 BUF2 DB 12 DUP(0) DATA ENDS ;- CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX,MOV SI,OFFSET BUF1 MOV DI,OFFSET BUF2 MOV CX,12 LOOPA: MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNE LOOPA EXIT: MOV AH,4CH INT 21H CODE ENDS ;- END START 分析: 循環(huán)12次,每一次將BUF1中的一個(gè)數(shù)送

42、到BUF2中。SI為BUF1的指針,DI為BUF2的指針,每次循環(huán)完成SIDI工作,同時(shí)將指針SI、DI加1,指向下一個(gè)數(shù)。,例:求一組數(shù)據(jù)中,正數(shù)、負(fù)數(shù)零的個(gè)數(shù)。 分析: 對(duì)于一個(gè)數(shù)組來(lái)說(shuō),要判斷正負(fù)數(shù)和零的個(gè)數(shù),必須將它們逐個(gè)取出來(lái)與零比較,確定它的正負(fù),從而計(jì)算出正數(shù)、負(fù)數(shù)零的個(gè)數(shù)。,DATA SEGMENT N_NUM DW 0 P_NUM DW 0 Z_NUM DW 0 ARRAY DW 0,-2,3,4,5,10,30H DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,7

43、 ;數(shù)據(jù)個(gè)數(shù) MOV BX,0 ;指針 MOV DI,0 ;正數(shù)個(gè)數(shù) MOV SI,0 ;零個(gè)數(shù) AGAIN:CMP ARRAYBX,0 JLE L1 ;小于等于0,轉(zhuǎn)移 INC DI,JMP NEXT L1: JL NEXT;小于0,轉(zhuǎn)移 INC SI NEXT:ADD BX,2 DEC CX JNZ AGAIN MOV AX,7 SUB AX,DI SUB AX,SI MOV N_NUM,AX MOV Z_NUM,SI MOV P_NUM,DI EXIT: MOV AH,4CH INT 21H CODE ENDS END START,1傳送指令或通用數(shù)據(jù)傳送指令 格式:MOV OPD,OP

44、S 功能: 將源操作數(shù)傳送至目的地址中, 即(OPS)OPD MOV是操作碼 源操作數(shù)可以是:累加器、寄存器、存貯器以及立即操作數(shù); 目的操作數(shù)可以是:累加器、寄存器、存貯器數(shù)據(jù)。 傳送方向的示意圖.,2.3.1 數(shù)據(jù)傳送指令,2.3 常用指令,數(shù)據(jù)傳送方向的示意圖,具體說(shuō),一條數(shù)據(jù)傳送指令能實(shí)現(xiàn): (1)CPU內(nèi)部寄存器之間數(shù)據(jù)的任意傳送結(jié)果 (除CS和IP以外) 例:Mov AL,BL Mov DL,CL Mov DS,BX (2)立即數(shù)傳送至CPU內(nèi)部的通用寄存器組,給這些寄存器 賦初值。,例:Mov CL, 4 Mov SI, D57BH Mov AX, 0FFB1H (3)CPU內(nèi)部

45、寄存器(除CS和IP以外)與存貯器(所有尋址 方式)之間的數(shù)據(jù)傳送,可以實(shí)現(xiàn)一個(gè)字節(jié)或一個(gè)字的 傳送。 例:Mov AL, BUF Mov AX,SI Mov DI,CX Mov SI,5BP Mov指令不能實(shí)現(xiàn)存貯單元之間的數(shù)據(jù)傳送。,圖1 描述了Mov指令在傳送數(shù)據(jù)時(shí)所允許的所送路徑及類(lèi)型,字節(jié)類(lèi)型/字類(lèi)型,注:Mov指令不能向代碼段寄存器CS作傳送操作 圖1 Mov指令所允許的數(shù)據(jù)傳送路徑及類(lèi)型。,Mov指令有如下九種形式。 (1)從累加器送到存儲(chǔ)器 格式:MOV mem, ac ; B/W 執(zhí)行的操作:(mem)ac 其中ac表示累加器AX、AH、AL。 存儲(chǔ)器操作數(shù)(mem)可采用與

46、數(shù)據(jù)有關(guān)的尋址存儲(chǔ)器的各種尋址方式(直接、寄存器間接、寄存器相對(duì)、基礎(chǔ)變址和相對(duì)基礎(chǔ)變址)。 例1:Mov AP,AX 其中AP是存儲(chǔ)單元的符號(hào)地址。 此指令由AX除含表示是個(gè)字傳送,AL的內(nèi)容送AP存儲(chǔ)單元,AH的內(nèi)容送入AP+1存儲(chǔ)單元。,如DS=2000H,AP=1234H 此存儲(chǔ)單元的物理地址:PA=20000+1234=21234H 指令執(zhí)行前:AX=2600H,(21234H)=27,(21235H)=29H 指令執(zhí)行后:AX=2600H,(21234H)=00H, (21235H)=26H,指令執(zhí)行情況,例2 Mov ARBXSI,AL 其中:AR是偏移量,用了符號(hào)地址,此指令是

47、將一字節(jié)的AL內(nèi)容送入以BX內(nèi)容加上SI內(nèi)容和AR的值相加作為有效地址(偏移地址)的數(shù)據(jù)段的存儲(chǔ)單元中。 即:EA=AR+(BX)+(SI) 假設(shè):DS=2000H,SI=1000H, BX=3000H,AR=1020H 此物理地址:PA=20000+1000+3000+1020=24020H 指令執(zhí)行后將AL中的內(nèi)容A9H,送到24020H為地址的存儲(chǔ)單元中。AL寄存器內(nèi)容不變,存儲(chǔ)單元的原始數(shù)據(jù)被A9取代。,例3 Mov ES:AT,AX 其中指令中有段超越前綴,AX的一個(gè)字的數(shù)據(jù)送入附加段中的AT為符號(hào)地址的存儲(chǔ)單元的相繼兩個(gè)單元中。 假設(shè):ES=4000H,AT=2000H 此單元的物

48、理地址: PA=40000+2000=42000H,(2)從存儲(chǔ)器送累加器 格式:MOV ac, mem;B/W 執(zhí)行的操作:ac(mem) 此指令與(1)的指令差別是傳送方向相反,其余規(guī)定和要求都相同。 例:MovAX,AT MovAL,BX MovAH,APBXSI MovAX,ES:BXDI,存儲(chǔ)器操作數(shù)mem可采用與數(shù)據(jù)有關(guān)的尋址存儲(chǔ)器的各種尋址方式,(3)從存儲(chǔ)器或寄存器送到段寄存器 格式:Mov segreg, mem/reg ;本指令只能是字操作 執(zhí)行操作:segreg(mem/reg) 其中 segreg表示不包括cs的段寄存器SS,DS,ES reg表示寄存器操作數(shù),可采用1

49、6位寄存器 (AX,BX,CX,DX,SP,BP,SI,DI) mem存儲(chǔ)器操作數(shù),尋址方式同(1)的規(guī)定。 例1:Mov ES,DX 指令執(zhí)行前:ES=1000H,DX=2000H 指令執(zhí)行后:ES=2000H,DX=2000H,例2:Mov SS, NWDI 假設(shè):DS=1000H, DI=2000H, NW=3000H 存儲(chǔ)單元的物理地址: PA=10000+2000+3000 =15000H 此指令是字操作,因此是15000H和15001H兩單元的內(nèi)容傳送到SS。,指令執(zhí)行前: SS=5040 ,(15000)=45, (15001)=67 執(zhí)行后:SS=6745H,(15000)=4

50、5, (15001)=67,對(duì)mem也可指定段寄存器 如:Mov ES,SS:BX,(4)從段寄存器到寄存器或存儲(chǔ)器 格式:Mov mem/reg,segreg;W 此指令與(3)的指令傳送方向相反,其它規(guī)定相同,但segreg可以包括四個(gè)段寄存器:CS、DS、SS、ES。 例:MovBX,SS MovAA,DS MovATBXDI,ES MovAX,CS,(5)從寄存器到寄存器 格式:Mov reg1,reg2 ;B/W 執(zhí)行的操作:reg1reg2 此指令可以是字操作,也可以是字節(jié)操作 字節(jié)操作:(8位寄存器) (AH,AL,BH,BL,CH,CL,DH,DL) 字操作: ( 16位寄存器

51、) (AX,BX,CX,DX,BP,SP,DI,SI) 注: 兩個(gè)寄存器之間傳送時(shí),只能在相同字長(zhǎng)的寄存器間傳送,不能在不同的字長(zhǎng)寄存器間傳送。,例如:正確的傳送 Mov AX,BX MovAH,CL MovDI,DX MovBX,SI 錯(cuò)誤的傳送 MovAX,CL MovDI,AH MovBL,SI,(6)從寄存器到存儲(chǔ)器 格式:Movmem,reg ;B/W 執(zhí)行操作:(mem)reg 此指令中mem和reg的規(guī)定與(1)和(5)相同 此指令中可以是字操作,也可以是字節(jié)操作 例:MovMB,DX 假設(shè):DS=3000H,MB=2000H, 目的操作數(shù)的存儲(chǔ)單元物理地址=30000+2000

52、=32000H 指令執(zhí)行前:DX=1234H,(32000H)=20H, (32001H)=BAH 指令執(zhí)行后:DX=1234H,(32000H)=34H, (32001H)=12H,例:MovSI,DI MovES:BPSI,DX 基址加變址,(7)從存儲(chǔ)器到寄存器 格式:Movreg,mem ;B/W 此指令與(6)的指令傳送方向相反,規(guī)定相同 例:MovBL,AT MovSI,AP MovCX,BX MovDX,ES:BXSI,(8)立即數(shù)送寄存器 格式:Movreg,data ;B/W 執(zhí)行操作:regdata 其中: data可以是8位立即數(shù),也可以是16位立即數(shù), 立即數(shù)可以是常量

53、,各種數(shù)制的常數(shù), ASC字符,也可以是符號(hào)名. Data數(shù)據(jù)的類(lèi)型必須與寄存器字長(zhǎng)相一致。 8位數(shù)可送16位寄存器,但16位數(shù)不能送8位寄存器,例:MovCH,34H ;一字節(jié)十六進(jìn)制數(shù)34HCH中 MovDL,A;ASC碼A送DL中 MovSI,Count;Count值送SI MovBX,2346;十進(jìn)制數(shù)2346BX 例:MovSI,OFFSET TABLE ;取TABLE的偏移地址送SI 指令執(zhí)行前:BX=1247H, TABLE的EA=257AH 指令執(zhí)行后:BX=257AH,TABLE的EA=257AH 注意:MOV指令的執(zhí)行不影響標(biāo)志位。,立即送存儲(chǔ)器 格式:Mov mem, d

54、ata ; B/W 執(zhí)行的操作:memdata data右以是字節(jié)立即數(shù),也可以是字立即數(shù),規(guī) 定同. mem必須作數(shù)據(jù)類(lèi)型說(shuō)明 BYTE PTR:屬性操作符指明為字節(jié)操作 WORD PTR:屬性操作符指明為字操作,例:MOV BYTE PTR MEM, 30H 說(shuō)明目的存儲(chǔ)器操作數(shù)MEM是字節(jié)單元 假設(shè):DS=3000H, MEM=2000H 存儲(chǔ)器單元的物理地址: PA=30000+2000=32000 指令執(zhí)行前:(32000H)=40H 指令執(zhí)行后:(32000H)=30H 例:MOV WORD PTR BX,2345H 說(shuō)明目的操作數(shù)存儲(chǔ)單元是字單元 假設(shè):DS=3000H,BX=1

55、000H 字存儲(chǔ)單元的物理地址:PA=30000H+1000=31000H 指令執(zhí)行前:(31000H)=44,(31001H)=68H 指令執(zhí)行后:(31000H)=45H,(31001H)=23H,2、數(shù)據(jù)交換指令:XCHG 語(yǔ)句格式:XCHGOPD,OPS ;B/W 功能: (OPD)OPS,(OPS)OPD即將源和目的地址中的內(nèi)容互換。 其中,OPD和OPS表示兩個(gè)操作數(shù),該指令中必須有一個(gè)操作數(shù)是在寄存器中。 因此它可以在: (1)寄存器與寄存器之間交換數(shù)據(jù) (2)寄存器與存儲(chǔ)器之間交換數(shù)據(jù),但不能與段寄存器交換數(shù)據(jù)。 存儲(chǔ)器與存儲(chǔ)器之間也不能交換數(shù)據(jù)。 指令可以是字操作,也可以是字

56、節(jié)操作。 該指令執(zhí)行結(jié)果不影響標(biāo)志位。,例:XCHG AX,BX 指令執(zhí)行前:AX=2567H,BX=3107H 指令執(zhí)行后:AX=3107H,BX=2567H 例:XCHG AX,DI 執(zhí)行前:(AX)=0001H,(DI)=OFFFFH 執(zhí)行后:(AX)=OFFFFH,(DI)=0001H,3地址傳送指令 這組指令有三條:LEA、LDS和LES它們把地址送到指定的寄存器。 (1)傳送偏移地址指令 格式:LEA OPD,OPS 功能: 按OPS提供的尋址方式計(jì)算偏移地址,并將其送入OPD中。 OPD:一定要是一個(gè)十六位的通用寄存器,而不能 使用8位寄存器和段寄存器,(2) OPS:只能是各種尋址方式的存儲(chǔ)器操作數(shù); 寄存器、立即數(shù)和段寄存器操作都不能用作源操作數(shù) OPS。 換言之:所提供的一定是一個(gè)存儲(chǔ)器地址。 例:DATASEGMENT BUFDB ABCDEF ADW72,-57,100H BDW0 DATAENDS Mov SI,OFFSET A ;將A的EA即6SI MovAX,SI ;(SI)=72AX LEAAX,SI ;將SI所指的存儲(chǔ)單元的EA即6AX LEADI,4SI ;取以A為首址的第三個(gè)字存儲(chǔ)單元 的EA即10DI MovB,BUF ;錯(cuò)誤語(yǔ)句,因?yàn)镺PD不是寄存器。,例:LEADX,BABX 指令執(zhí)行前:BX=1254H

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論