匯編語言程序設(shè)計(jì)(劉慧婷 第3版)微課版 課件全套 第1-9章 匯編語言基礎(chǔ)知識-宏匯編及其它高級偽操作_第1頁
匯編語言程序設(shè)計(jì)(劉慧婷 第3版)微課版 課件全套 第1-9章 匯編語言基礎(chǔ)知識-宏匯編及其它高級偽操作_第2頁
匯編語言程序設(shè)計(jì)(劉慧婷 第3版)微課版 課件全套 第1-9章 匯編語言基礎(chǔ)知識-宏匯編及其它高級偽操作_第3頁
匯編語言程序設(shè)計(jì)(劉慧婷 第3版)微課版 課件全套 第1-9章 匯編語言基礎(chǔ)知識-宏匯編及其它高級偽操作_第4頁
匯編語言程序設(shè)計(jì)(劉慧婷 第3版)微課版 課件全套 第1-9章 匯編語言基礎(chǔ)知識-宏匯編及其它高級偽操作_第5頁
已閱讀5頁,還剩602頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一章匯編語言基礎(chǔ)知識1.1匯編語言簡介1.2計(jì)算機(jī)中數(shù)據(jù)的表示1.1匯編語言簡介1.1.1機(jī)器語言與匯編語言1.1.2匯編語言的組成1.1.3為什么要學(xué)習(xí)匯編語言1.1.1機(jī)器語言與匯編語言機(jī)器指令:cpu能直接識別并遵照執(zhí)行的指令,用二進(jìn)制編碼表示,由操作碼,操作數(shù)組成,編碼只含二進(jìn)制0或1。機(jī)器語言:用二進(jìn)制編碼組成的機(jī)器指令的集合和一組使用機(jī)器指令的規(guī)則。匯編語言:對機(jī)器指令中的操作碼用英文單詞的縮寫描述(助記符),對操作數(shù)用標(biāo)號、變量、常量描述。

用匯編語言編寫的程序稱為匯編源程序。

但是,匯編語言源程序要翻譯成機(jī)器語言程序才可以由計(jì)算機(jī)執(zhí)行。這個(gè)翻譯的過程稱為“匯編”,這種把匯編源程序翻譯成目標(biāo)程序的語言加工程序稱為匯編程序。

1.1.2匯編語言的組成匯編語言有以下三類指令組成:匯編指令:機(jī)器碼的助記符,有對應(yīng)的機(jī)器碼。它是匯編語言的核心。偽指令:沒有對應(yīng)的機(jī)器碼,由編譯器執(zhí)行,計(jì)算機(jī)并不執(zhí)行。其他符號:如+、-、*、/等,由編譯器識別,沒有對應(yīng)的機(jī)器碼。

1.1.3為什么要學(xué)習(xí)匯編語言匯編語言程序是用符號指令寫成的,本質(zhì)上還是機(jī)器語言,與具體機(jī)機(jī)型的硬件密切相關(guān),可以直接有效地控制計(jì)算機(jī)硬件,程序運(yùn)行速度快,程序短小精悍,占用內(nèi)存少,在某些特殊應(yīng)用場合更能發(fā)揮作用。如:智能化儀表,家用電器,實(shí)時(shí)控制系統(tǒng),單片機(jī)控制,病毒研究等。學(xué)習(xí)匯編語言是從根本上認(rèn)識和理解計(jì)算機(jī)工作過程的最好方法。匯編程序與匯編源程序的區(qū)別是什么?匯編源程序是指用匯編語言編寫的程序,而匯編程序特指將匯編源程序匯編成目標(biāo)文件的編譯程序。正確不正確AB提交單選題15分1.2計(jì)算機(jī)中數(shù)據(jù)的表示1.2.1不同進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換1.2.2二進(jìn)制數(shù)和十六進(jìn)制數(shù)的運(yùn)算1.2.3帶符號數(shù)的表示1.2.4補(bǔ)碼的加法和減法1.2.5無符號數(shù)的表示1.2.6字符的表示1.2.7基本邏輯運(yùn)算1.2.1不同進(jìn)位計(jì)數(shù)制及其相互轉(zhuǎn)換1.進(jìn)位計(jì)數(shù)制對于任意一個(gè)進(jìn)位計(jì)數(shù)制,如果用R表示基數(shù),那么任何一個(gè)數(shù)S均可用如下多項(xiàng)式表示:

S=knRn+kn-1Rn-1+…+k0R0+k-1R-1+k-2R-2+…+k-mR-m

十進(jìn)制數(shù):423.5=4×10^2+2×10^1+3×10^0+5×10^-1

各位權(quán)值10^k

二進(jìn)制數(shù):101101(B)=1×2^5+1×2^3+1×2^2+1×2^0=45(D)

各位權(quán)值2^k

十六進(jìn)制數(shù):5F(H)=5×16^1+15×16^0(D)各位權(quán)值16^k

在書寫不同進(jìn)位計(jì)數(shù)制數(shù)時(shí),常常在尾部用一個(gè)字母來表示該數(shù)是什么進(jìn)位計(jì)數(shù)制的數(shù)。結(jié)尾用B(2進(jìn)制數(shù))、O(8進(jìn)制數(shù))、D(10進(jìn)制數(shù))、H(16進(jìn)制數(shù))。缺省為十進(jìn)制數(shù)。例如712O、9198D、10010B、BE49H等等。

2.各種數(shù)制間的相互轉(zhuǎn)換例如:13.8125D=

1101.1101B=D.DH

二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)方法:各位二進(jìn)制數(shù)碼乘以對應(yīng)的權(quán)之和例:1.1N=101101.1B=1×2^5+1×2^3+1×2^2+1×2^0+1×2^-1=45.5D十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)方法:各位十六進(jìn)制數(shù)碼乘以對應(yīng)的權(quán)之和例:1.2

N=5FH=5×16^1+15×16^0=80+15=95D

十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)(1)降冪法:先寫出小于此數(shù)的各位二進(jìn)制權(quán)值,然后再求和。(適用于數(shù)值不大的數(shù))例:1.3

求N=13.5D的二進(jìn)制數(shù)。小于此數(shù)的各位二進(jìn)制權(quán)值為:

84210.5

13.5D=8+4+1+0.5=1101.1B

100001000001+0.11101.1

十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)(2)除法:不斷除以2,計(jì)下余數(shù),直到商為0為止。(僅適用于整數(shù)部分)例:1.4求N=13D的二進(jìn)制數(shù)。13/2=6余1(b0)6/2=3余0(b1)3/2=1余1(b2)1/2=0余1(b3)13D=b3b2b1b0=1101B對于十進(jìn)制數(shù)的小數(shù)部分除了可以使用降冪法也可采用乘法,即不斷乘2,并計(jì)下整數(shù),而小數(shù)部分再乘2,直到結(jié)果為0為止。并非所有的十進(jìn)制小數(shù)都能用二進(jìn)制完全表示,可按需要取一定精度即可。例:1.5求N=0.625D的二進(jìn)制數(shù)。0.625×2=1.25(b-1=1)0.25×2=0.5(b-2=0)0.5×2=1.0(b-3=1)N=0.625D=b-1b-2b-3=0.101B

十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)(1)降冪法:先寫出小于此數(shù)的各位十六進(jìn)制權(quán)值,然后再求和。(適用于數(shù)值不大的數(shù))例:1.6求N=95D的十六進(jìn)制數(shù)。小于此數(shù)的各位十六進(jìn)制權(quán)值為:161顯然應(yīng)選16×5,再選1×F,所以N=95D=80+15=16×5+1×F=5FH

十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)(2)除法:不斷除以16,計(jì)下余數(shù),直到商為0為止。(僅適用于整數(shù)部分)例:1.7求N=95D的十六進(jìn)制數(shù)。95/16=5余15(h0)5/16=0余5(h1)N=95D=h1h0=5FH

對于十進(jìn)制數(shù)的小數(shù)部分除了可以使用降冪法也可采用乘法,即不斷乘16,并計(jì)下整數(shù),而小數(shù)部分再乘16,直到結(jié)果為0為止。并非所有的十進(jìn)制小數(shù)都能用十六進(jìn)制完全表示,可按需要取一定精度即可。

二進(jìn)制數(shù)和十六進(jìn)制數(shù)的相互轉(zhuǎn)換直接轉(zhuǎn)換,每四位一組,整數(shù)從低位開始,小數(shù)從高位開始,不足位補(bǔ)0。例:1.8N=1011111.11(B)=01011111.1100(B)=5F.C(H)

把十進(jìn)制數(shù)67轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù)。1000011,431000101,451000011,411000101,43ABCD提交單選題15分把十進(jìn)制數(shù)123轉(zhuǎn)換為二進(jìn)制數(shù)和十六進(jìn)制數(shù)。1111101,7D1111011,7B1111100,7C1111111,7FABCD提交單選題15分把二進(jìn)制數(shù)01101101轉(zhuǎn)換為十六進(jìn)制數(shù)和十進(jìn)制數(shù)。6D,1076C,1076D,1096B,107ABCD提交單選題15分1.2.2二進(jìn)制數(shù)和十六進(jìn)制數(shù)運(yùn)算二進(jìn)制運(yùn)算加法規(guī)則:0+0=01+0=10+1=11+1=0(進(jìn)位1)乘法規(guī)則:0×0=01×0=00×1=01×1=1

十六進(jìn)制數(shù)運(yùn)算原則:逢十六進(jìn)一

1.2.2二進(jìn)制數(shù)和十六進(jìn)制數(shù)運(yùn)算例1.9 43A5+5A349DD9例1.10 5A34-43A5168F1.2.2二進(jìn)制數(shù)和十六進(jìn)制數(shù)運(yùn)算例1.11 2A34×0025D304

+546861984(H)1.2.3帶符號數(shù)的表示帶符號數(shù)最高位是符號位。正數(shù)的符號位為0,負(fù)數(shù)的符號位為1。表示方法:原碼、補(bǔ)碼、反碼。例1.12用8位二進(jìn)制來表示,求[-3]補(bǔ)。先寫出+3:00000011各位取反為:11111100最低位加1為:11111101[-3]補(bǔ)=11111101,或用十六進(jìn)制表示,[-3]補(bǔ)=FDH數(shù)的補(bǔ)碼表示

定義:

(X>=0時(shí))[X]補(bǔ)=符號+|X|------(1)

(X<0時(shí))[X]補(bǔ)=2^n-|X|=(2^n-1-|X|)+1---(2)即X<0時(shí):

[X]補(bǔ)+|X|=2^n數(shù)的補(bǔ)碼具體操作是:正數(shù)不變,負(fù)數(shù)則用絕對值取反+1例1.13依據(jù)補(bǔ)碼定義寫出以下各數(shù)的補(bǔ)碼,以8位二進(jìn)制表示。[-1]補(bǔ)=256-1=100000000-1=11111111,直接由(2)式得到。[-127]補(bǔ)=2^8-127=(256-1-127)+1=(11111111-01111111)+1=10000000+1=10000001例1.14識別以下各數(shù)的十進(jìn)制值。[a]補(bǔ)=11111111,求補(bǔ)后為00000001=[1]補(bǔ),所以,a=-1[b]補(bǔ)=10000000,求補(bǔ)后為10000000=[128]補(bǔ),所以,b=-128[c]補(bǔ)=10000001,求補(bǔ)后為01111111=[127]補(bǔ),所以,C=-1271.2.4補(bǔ)碼的加減法加法規(guī)則:[X+Y]補(bǔ)=[X]補(bǔ)+[Y]補(bǔ)減法規(guī)則:[X-Y]補(bǔ)=[X]補(bǔ)+[-Y]補(bǔ)例:1.158位補(bǔ)碼的加法運(yùn)算十進(jìn)制 二進(jìn)制

25 00011001+(-32)+11100000

-7111110013200100000+(-25)+11100111700000111 1↙

根據(jù)補(bǔ)碼定義把十進(jìn)制數(shù)-24表示為8位二進(jìn)制補(bǔ)碼。[10011000]

補(bǔ)[11100111]補(bǔ)[11101000]補(bǔ)ABC提交單選題15分此處添加題目描述11111001000010011111011111110110ABCD提交多選題25分1.2.5無符號數(shù)的表示對于正數(shù),不保留符號位,把符號位也作為數(shù)值,這樣的數(shù)叫無符號數(shù)。1.2.6字符的表示ASCII碼擴(kuò)充的ASCII碼表1.2回車:0dh換行:0ah空格:20h0~9:30h~39hA~Z:41h~5aha~z:61h~7ah1.2.7基本邏輯運(yùn)算邏輯運(yùn)算按位操作與運(yùn)算AND或運(yùn)算OR異或運(yùn)算XOR非運(yùn)算NOT第2章計(jì)算機(jī)基本原理2.1計(jì)算機(jī)系統(tǒng)組成2.2存儲器2.3中央處理器(CPU)中的寄存器2.4外部設(shè)備和接口2.532位80x86CPU的工作模式2.1計(jì)算機(jī)系統(tǒng)組成計(jì)算機(jī)的基本工作原理是存儲程序和程序控制。馮諾依曼原理的計(jì)算機(jī)結(jié)構(gòu)2.2存儲器

2.2.116位結(jié)構(gòu)的CPU2.2.2存儲器2.2.3存儲器分段2.2.4邏輯地址2.2.5CPU對內(nèi)存的讀寫操作2-1 8086CPU結(jié)構(gòu)2.2.116位結(jié)構(gòu)的CPU8086是16位結(jié)構(gòu)的CPU。16位結(jié)構(gòu)的CPU具有以下幾方面的結(jié)構(gòu)特征:(1)數(shù)據(jù)總線為16位;(2)運(yùn)算器一次最多可以處理16位的數(shù)據(jù);(3)寄存器的最大寬度為16位;(4)寄存器和運(yùn)算器之間的通路為16位。2.2.2存儲器1.基本存儲單元計(jì)算機(jī)存儲信息的最小單位是一個(gè)二進(jìn)制位(bit)8位二進(jìn)制位組成一個(gè)字節(jié)(Byte)2個(gè)字節(jié)(16位)組成一個(gè)字(Word)2個(gè)字(32位)稱為雙字。80x86微機(jī)的內(nèi)存儲器以字節(jié)為基本存儲單位,或叫基本存儲單元2.2.2存儲器2.內(nèi)存中字的存儲字與字節(jié)的對應(yīng)關(guān)系從31200H單元開始存放的字?jǐn)?shù)據(jù)為A28FH,從31202H單元開始存放的字?jǐn)?shù)據(jù)為1234H,分別記為:(31200H)字=A28FH(31202H)字=1234H2.2.3存儲器分段1.分段的概念內(nèi)存并沒有分段,分段只是CPU管理內(nèi)存的方式。圖2-4分段示意圖2.2.3存儲器分段2.段的類型代碼段—用于存放指令,代碼段段基址存放在段寄存器CS數(shù)據(jù)段—用于存放數(shù)據(jù),數(shù)據(jù)段段基址段地址存放在段寄存器DS附加段—用于輔助存放數(shù)據(jù),附加段段基址存放在段寄存器ES堆棧段—是重要的數(shù)據(jù)結(jié)構(gòu),可用來保存數(shù)據(jù)、地址和系統(tǒng)參數(shù),堆棧段段基址存放在段寄存器SS2.2.4邏輯地址邏輯地址是用戶編程時(shí)使用的地址,分為段地址和偏移地址兩部分。段地址:偏移地址2.2.4邏輯地址

可以寫下3位數(shù)據(jù)的紙條可以寫下4位數(shù)據(jù)的紙條如何描述從宿舍到教室的距離?2.2.4邏輯地址例題2-1段基址為1896H,偏移地址為1655H。其物理地址為多少?18960H+1655H=19FB5H給定段地址為0001H,僅通過變化偏移地址尋址,CPU的尋址范圍從

[填空1]

[填空2]

要求:填空1和填空2需要用完整的五位十六進(jìn)制來表示,末尾還要加上十六進(jìn)制數(shù)的標(biāo)志H.作答填空題50分已知8086系統(tǒng)某存儲單元物理地址為:52506H,段基址的最大值是

[填空1]

,最小值是

[填空2]

。要求:填空1和填空2需要用完整的4位十六進(jìn)制來表示,末尾還要加上十六進(jìn)制數(shù)的標(biāo)志H.作答填空題50分2.2.5CPU對內(nèi)存的讀寫操作

CPU要想進(jìn)行數(shù)據(jù)的讀寫,必須和外部器件(芯片)進(jìn)行下面3類的信息交互。(1)存儲單元的地址(地址信息)(2)器件的選擇,讀或?qū)懨睿刂菩畔ⅲ?)讀或?qū)懙臄?shù)據(jù)(數(shù)據(jù)信息)2.2.5CPU對內(nèi)存的讀寫操作CPU從地址為3的內(nèi)存單元中讀取數(shù)據(jù)的過程(1)CPU通過地址線將要進(jìn)行操作的內(nèi)存單元地址“3”發(fā)出;(2)CPU通過控制線發(fā)出內(nèi)存讀命令,選中存儲器芯片,并通知它,將要從中讀取數(shù)據(jù)(3)存儲器將內(nèi)存單元地址為“3”中的數(shù)據(jù)“32H”通過數(shù)據(jù)線送入CPU

2.2.5CPU對內(nèi)存的讀寫操作寫操作與讀操作的步驟相似,如向地址為“3”的單元寫入數(shù)據(jù)“FFH”。(1)CPU通過地址線將要進(jìn)行操作的內(nèi)存單元地址“3”發(fā)出;(2)CPU通過控制線發(fā)出內(nèi)存寫命令,選中存儲器芯片,并通知它,要向其中寫入數(shù)據(jù)。(3)CPU通過數(shù)據(jù)線將數(shù)據(jù)“FFH”送入內(nèi)存的地址為“3”的單元中。2.2.5CPU對內(nèi)存的讀寫操作要讓一個(gè)計(jì)算機(jī)或微處理器工作,應(yīng)向它輸入能夠驅(qū)動它進(jìn)行工作的電平信息(即機(jī)器碼)。

對于8086CPU,下面的機(jī)器碼,能夠完成從內(nèi)存地址為“3”的單元讀數(shù)據(jù)。機(jī)器碼:101000010000001100000000含義:從內(nèi)存地址為“3”的單元讀取數(shù)據(jù)送入寄存器AX機(jī)器碼是01串,難以記憶和書寫,用匯編指令來表示,情況如下。對應(yīng)的匯編指令:MovAX,[3]含義:從內(nèi)存地址為“3”的單元讀取數(shù)據(jù)送入寄存器AX2.3中央處理器(CPU)中的寄存器2.3.1寄存器介紹2.3.2CS和IP2.3.3堆棧2.3.1寄存器介紹1.通用數(shù)據(jù)寄存器8086CPU的所有寄存器都是16位的,可以存放兩個(gè)字節(jié)。AX、BX、CX、DX這4個(gè)寄存器通常用來存放一般性的數(shù)據(jù),有時(shí)候也可以存放地址,被稱為通用數(shù)據(jù)寄存器。①AX:累加器,運(yùn)算時(shí)較多使用這個(gè)寄存器,有些指令規(guī)定必須使用它。

②BX:基址寄存器,除了存放數(shù)據(jù),它經(jīng)常用來存放一段內(nèi)存的起始偏移地址。

③CX:計(jì)數(shù)寄存器,除了存放數(shù)據(jù),它經(jīng)常用來存放重復(fù)操作的次數(shù)。

④DX:數(shù)據(jù)寄存器,除了存放數(shù)據(jù),它有時(shí)存放32位數(shù)據(jù)的高16位。2.3.1寄存器介紹2.地址寄存器16位的8086處理器有4個(gè)16位的通用地址寄存器。它們的主要作用是存放數(shù)據(jù)的所在偏移地址,也可以存放數(shù)據(jù)。這4個(gè)寄存器不能再拆分使用。

①SP:堆棧指針,這是一個(gè)專用的寄存器,存放堆棧棧頂?shù)钠频刂贰?/p>

②BP:基址指針,可以用來存放內(nèi)存中數(shù)據(jù)的偏移地址。

③SI:源變址寄存器,它經(jīng)常用來存放內(nèi)存中源數(shù)據(jù)區(qū)的偏移地址,所謂變址寄存器,是指在某些指令作用下它可以自動地遞增或遞減其中的值。

④DI:目的變址寄存器,它經(jīng)常用來存放內(nèi)存中目的數(shù)據(jù)區(qū)的偏移地址,并在某些指令作用下可以自動地遞增或遞減其中的值。2.3.1寄存器介紹3.段寄存器16位80x86處理器有4個(gè)16位的段寄存器,分別命名為CS,SS,DS,ES。它們用來存放4個(gè)段的段基址。

①CS:代碼段寄存器,用來存放當(dāng)前正在執(zhí)行的程序段的段基址。

②SS:堆棧段寄存器,用來存放堆棧段的段基址。

③DS:數(shù)據(jù)段寄存器,用來存放數(shù)據(jù)段段基址。

④ES:附加段寄存器,用來存放另一個(gè)數(shù)據(jù)段的段基址。

2.3.1寄存器介紹4.指令指針寄存器IP:指令指針寄存器,存放即將執(zhí)行指令的偏移地址。5.指令指針寄存器FLAGS:存放CPU的兩類標(biāo)志。

狀態(tài)標(biāo)志:反映處理器當(dāng)前的狀態(tài),如有無溢出,有無進(jìn)位等。

狀態(tài)標(biāo)志有6個(gè):CF、PF、AF、ZF、SF和OF

控制標(biāo)志:用來控制處理器的工作方式,如是否響應(yīng)可屏蔽中斷等

控制標(biāo)志有3個(gè):TF、IF和DF二、寄存器結(jié)構(gòu)16位標(biāo)志寄存器PSW只用了其中的9位作標(biāo)志位,即6個(gè)狀態(tài)標(biāo)志位,3個(gè)控制標(biāo)志位。2.3.2CS和IP8086CPU的工作過程可以簡要描述如下。(1)從CS:IP指向的內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖器;(2)IP=IP+所讀取指令的長度,從而指向下一條指令;(3)執(zhí)行指令,轉(zhuǎn)到步驟(1),重復(fù)這個(gè)過程。CS和IP的內(nèi)容提供了CPU要執(zhí)行指令的地址。IA-3232位通用寄存器IA-32為IntelArchitecture32-bit簡稱,即英特爾32位體系架構(gòu),從1985年面世的80386直到Pentium4,都是使用IA-32體系結(jié)構(gòu)的處理器。2.3.3堆棧堆棧區(qū)就是這樣一個(gè)特殊的存儲區(qū),它的末單元稱為棧底,數(shù)據(jù)先從棧底開始存放,最后存入的數(shù)據(jù)所在單元稱為棧頂。當(dāng)堆棧區(qū)為空時(shí),棧頂和棧底是重合的。數(shù)據(jù)在堆棧區(qū)存放時(shí),必須以字存入,每次存入一個(gè)字,后存入的數(shù)據(jù)依次放入棧的低地址單元中。棧指針SP每次減2,由棧指針SP指出當(dāng)前棧頂?shù)奈恢?,?shù)據(jù)存取時(shí)采用后進(jìn)先出的方式棧底進(jìn)棧地址A遞減B遞增?2.4外部設(shè)備和接口外部設(shè)備是計(jì)算機(jī)系統(tǒng)的不可缺少的重要組成部分。通過輸入設(shè)備把程序和數(shù)據(jù)輸入計(jì)算機(jī)主機(jī)(CPU和內(nèi)存),通過輸出設(shè)備把結(jié)果輸出給用戶或保存起來。根據(jù)不同用途,接口中的寄存器(端口)分為以下3類。(1)數(shù)據(jù)端口(2)控制端口(3)狀態(tài)端口CPU與I/O接口中端口的信息傳輸也都是通過數(shù)據(jù)總線進(jìn)行的。2.532位80X86CPU的工作模式實(shí)模式保護(hù)模式虛擬8086模式第3章匯編語言程序?qū)嵗吧蠙C(jī)操作

<<匯編語言程序設(shè)計(jì)>>實(shí)踐性很強(qiáng),結(jié)合上機(jī)是最好的學(xué)習(xí)方法。3.1匯編語言的工作環(huán)境3.1.1匯編語言的系統(tǒng)工作文件

3.1.2進(jìn)入DOS命令行的方式3.1.3常用的DOS命令3.1.1匯編語言的系統(tǒng)工作文件

使用編輯程序編輯源程序文件(.asm)使用匯編程序(MASM)將源程序文件(.asm)匯編成目標(biāo)文件(.obj)使用連接程序(LINK),將目標(biāo)文件(.obj)連接成可執(zhí)行文件(.EXE)使用調(diào)試程序(DEBUG),調(diào)試可執(zhí)行文件運(yùn)行匯編語言程序需要以下文件編輯程序EDIT.COM匯編程序MASM.EXE連接程序LINK.EXE調(diào)試程序DEBUG.EXE注意幾點(diǎn)本書使用MicrosoftMasm6.15,MicrosoftLINK5.13版本。EDIT.COM和DEBUG.EXE為系統(tǒng)自帶。為方便操作,系統(tǒng)文件和用戶文件盡可能放在同一文件目錄下。3.1.2進(jìn)入DOS命令行方式程序---附件---命令提示符運(yùn)行---CMD退出用EXIT3.1.3常用的DOS命令1.盤:;選擇盤符如果屏幕顯示為C:\>,表示你當(dāng)前在C盤,你希望到E盤,則可鍵入:C:\>E:↙(↙表示Enter鍵)3.1.3常用的DOS命令2.CD;選擇目錄例如:E:\>CD;顯示當(dāng)前目錄,當(dāng)前目錄是根目錄E:\>CDMASM;進(jìn)到MASM子目錄,E:\>MASM>CDMY;從當(dāng)前目錄MASM進(jìn)到下一級MY子目錄E:\>MASM\MY>CD‥;從當(dāng)前目錄MY退到上一級目錄MASME:\>MASM>CD\

;從當(dāng)前目錄MASM退到根目錄E:\>3.1.3常用的DOS命令3.DIR;顯示目錄和文件例如:E:\>MASM>DIR;列出當(dāng)前目錄下的子目錄和文件E:\>MASM\>DIR*.ASM;列出所有擴(kuò)展名為ASM的文件,*為通配符E:\>MASM>DIRHELLO.*;列出所有名為HELLO而擴(kuò)展名不限的文件E:\>MASM>DIRHE*.???;列出所有文件名前2個(gè)字符為’HE’而擴(kuò)展名有3個(gè)字符的文件3.1.3常用的DOS命令4.REN;改變文件名例如:E:\>RENH1.TXTH2.ASM;把文件H1.TXT改名為H1.ASM3.1.3常用的DOS命令5.CLS;清除屏幕6.DEL;刪除文件例如:E:\>DELC.TXT;刪除文件C.TXT7.MD;建立目錄例如:E:\>MDMASM;建立MASM目錄3.1.3常用的DOS命令8.RD;刪除目錄例如:E:\>MASM\>RDASM;刪除下級子目錄ASM3.1.3常用的DOS命令9.COPY;復(fù)制文件例如:E:\>COPYH1.TXTH2.TXT;復(fù)制文件H1.TXT到文件H2.TXTE:\>COPYA+BC.TXT;把文件A和B連接后得到文件C.TXT3.1.3常用的DOS命令10.TYPE顯示文本文件的內(nèi)容例如:E:\>TYPEC.TXT;顯示文件C.TXT的內(nèi)容11.>;輸出的重定向操作符例如:E:\>DIR>THIS.TXT;把DIR顯示結(jié)果輸出到文件THIS.TXT3.1.3常用的DOS命令12.HELP顯示命令格式和用法E:\>HELP;顯示所有命令的格式E:\>HELPDIR;顯示DIR命令的用法3.2匯編語言程序?qū)嵗?.2.1實(shí)例13.2.2實(shí)例2例3.1單個(gè)字符的鍵盤輸入與顯示輸出程序

codesegmentassumecs:codestart:movah,1int21hmovdl,aladddl,1movah,2int21hmovah,4chint21hcodeendsendstart運(yùn)行結(jié)果:鍵入A接著顯示B,鍵入K接著顯示L例3.2編寫顯示“HELLO,WORLD!”程序。

datasegmentStringdb‘HELLO,WORLD!$’dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetstringmovah,9int21hmovah,4chint21hcodeendsendstart

3.3程序?qū)嵗纳蠙C(jī)步驟3.3.1編輯--建立ASM源程序文件3.3.2匯編--產(chǎn)生OBJ二進(jìn)制目標(biāo)文件3.3.3連接--產(chǎn)生EXE可執(zhí)行文件3.3.4關(guān)于LST列表文件3.3.5程序的運(yùn)行和調(diào)試3.3.1編輯建立ASM源程序文件1.進(jìn)入DOS命令行方式。2.假定匯編語言的系統(tǒng)工作文件目錄為D:\MASM6.15\,其中D:\表示D盤的根目錄。可以通過以下命令指向D盤:D:↙3.如果屏幕顯示不在此目錄,可以通過以下命令進(jìn)入該目錄:D:\>CD\MASM6.15↙注意,加黑字體是鍵入的命令。當(dāng)屏幕顯示進(jìn)入該目錄后,用如下命令編輯源程序文件:D:\>MASM6.15\>EDITHELLO.ASM↙3.3.2匯編--產(chǎn)生OBJ二進(jìn)制目標(biāo)文件假定匯編語言源程序文件HELLO.ASM已經(jīng)在當(dāng)前目錄D:\MASM6.15\下,用如下命令進(jìn)行匯編:D:\>MASM6.15\>MASMHELLO↙注意,加黑字體是鍵入的命令。該命令執(zhí)行后,將產(chǎn)生一個(gè)同名的二進(jìn)制目標(biāo)文件HELLO.OBJ。下一步就是對這個(gè)HELLO.OBJ文件進(jìn)行連接以產(chǎn)生最后的可執(zhí)行文件。如果源程序有語法錯(cuò)誤,則不會產(chǎn)生目標(biāo)文件。同時(shí)報(bào)錯(cuò),提示源程序的出錯(cuò)位置和錯(cuò)誤原因。3.3.3連接產(chǎn)生EXE可執(zhí)行文件使用連接程序LINK把目標(biāo)文件(OBJ)轉(zhuǎn)換為可執(zhí)行的EXE文件。鍵入以下命令:D:\>MASM6.15\>LINKHELLO↙因?yàn)樵闯绦蛑袥]有定義堆棧段,所以連接程序給出無堆棧段的警告,其實(shí)并不是錯(cuò)誤,并不影響程序的運(yùn)行。到此為止,連接過程已經(jīng)結(jié)束。3.3.4關(guān)于LST列表文件D:\>MASM6.15\>MASMHELLOHELLOHELLO↙列表文件報(bào)告了匯編過程中產(chǎn)生的很多有價(jià)值的參考信息。主要包括源程序和機(jī)器語言清單、指令和變量的偏移地址等等。3.3.5程序的運(yùn)行建立了EXE文件后,就可以直接在DOS的提示符下,輸入EXE文件的文件名,如:

D>Hello↓

直接運(yùn)行程序。對EXE文件無需擴(kuò)展名就可執(zhí)行。真正的可執(zhí)行文件是生成的,不是用改名操作得到的。3.3.6程序的調(diào)試調(diào)試程序DEBUG.EXE是WINDOWS系統(tǒng)自帶的。DEBUGHello.EXE“-”DEBUG命令提示符1.反匯編命令U格式1:U地址地址用偏移地址或者段地址:偏移地址表示。該命令從指定的地址開始,把機(jī)器語言反匯編為匯編語言。若省去指定地址,則以上一個(gè)U命令反匯編的最后一條指令地址的下一個(gè)單元作為起始地址。2.運(yùn)行程序命令G格式:G[=起始地址][中止地址]起始地址規(guī)定了執(zhí)行的起始地址。中止地址是斷點(diǎn)地址,讓程序暫停在某個(gè)位置=不能省掉。若省掉起始地址,則以當(dāng)前CS:IP作為起始地址。默認(rèn)段地址在段寄存器CS中。3.跟蹤程序命令T格式1:T[=起始地址]單步執(zhí)行程序,在指令執(zhí)行中逐條進(jìn)行跟蹤,若省去地址,則從CS:IP現(xiàn)行值執(zhí)行。格式2:T[=起始地址][指令條數(shù)]

可對多條指令進(jìn)行跟蹤。注意:對于INT指令不能使用T命令跟蹤。4.單步執(zhí)行程序指令PP命令,用以執(zhí)行循環(huán)、重復(fù)的字符串指令、軟件中斷或子例程。例如T命令無法一次執(zhí)行的INT指令,P命令就可以一次執(zhí)行完這個(gè)系統(tǒng)例行程序,回到用戶程序中。5.退出命令Q用Q命令退出DEBUG。/learn/UESTC-1002047009?tid=%201002147007#/learn/content?type=detail&id=1003315756&sm=15.退出命令Q用Q命令退出DEBUG。3.4在Win7系統(tǒng)中執(zhí)行匯編對于初學(xué)者,使用DosBox是一個(gè)較好的64位環(huán)境下編譯匯編程序的解決方案。下載安裝DosBox,安裝目錄缺省為C:\ProgramFiles(x86)\DOSBox-0.74。3.4在Win7系統(tǒng)中執(zhí)行匯編DosBox為Windows環(huán)境下Dos模擬器,可以將Dos程序放置在該環(huán)境中運(yùn)行。其過程即為掛載。掛載命令為mount。這里需要掛載的Dos程序?yàn)閰R編編譯程序MASM6.15,如圖3-19所示。在DosBox環(huán)境下Z:>提示符下鍵入命令mountC:D:\MASM6.15如果掛載成功,會在該命令的下面自動出現(xiàn)提示語句:DriveCismountedaslocaldirectoryD:\MASM6.15\3.4在Win7系統(tǒng)中執(zhí)行匯編在DosBox環(huán)境下,查看C:目錄下的文件,可以看出和Windows下D:\MASM6.15的文件完全一樣。即mount命令將原本存放在Windows環(huán)境下的文件映射到了DosBox中。3.4在Win7系統(tǒng)中執(zhí)行匯編需要提醒的是,如果在實(shí)際存放目錄(本例中為D:\MASE6.15)中新存放一個(gè)事先寫好的匯編程序,在DosBox中需要重新啟動并進(jìn)行掛載,才能對該匯編程序進(jìn)行debug等相關(guān)操作。3.5幾個(gè)常用的DOS系統(tǒng)功能調(diào)用21H號中斷是DOS提供給用戶的用于調(diào)用系統(tǒng)功能的中斷,它有近百個(gè)功能供用戶選擇使用,主要包括設(shè)備管理、目錄管理和文件管理三個(gè)方面的功能。匯編語言程序設(shè)計(jì)需要采用系統(tǒng)的各種功能程序。功能調(diào)用的格式通常按照如下4個(gè)步驟進(jìn)行:⑴在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號⑵在指定寄存器中設(shè)置入口參數(shù)⑶執(zhí)行指令I(lǐng)NT21H,實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用⑷根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況1.鍵盤輸入一個(gè)字符并回顯DOS功能調(diào)用INT21H功能號:AH=01H出口參數(shù):AL=輸入字符的ASCII碼功能:等待從鍵盤輸入一個(gè)字符,該字符的ASCII碼送AL,并送屏幕顯示。調(diào)用此功能時(shí),若無輸入,則會一直等待,直到輸入后才繼續(xù)。movah,01h ;功能號:ah←01h int21h ;功能調(diào)用

cmpal,’Y’ ;處理出口參數(shù)al jeyeskey ;是“Y” cmpal,’N’ jenokey ;是“N” yeskey: ...nokey: ...2.顯示一個(gè)字符DOS功能調(diào)用INT21H功能號:AH=02H入口參數(shù):DL=輸出字符功能:在顯示器當(dāng)前光標(biāo)位置顯示給定的字符,光標(biāo)右移一個(gè)字符位置。在當(dāng)前顯示器光標(biāo)位置顯示一個(gè)問號movah,02h ;設(shè)置功能號:ah←02hmovdl,'?' ;提供入口參數(shù):dl←'?'int21h ;DOS功能調(diào)用:顯示問號3.顯示字符串DOS功能調(diào)用INT21H功能號:AH=09H入口參數(shù):DS:DX=欲顯示字符串在主存中的首地址;字符串應(yīng)以$(24H)結(jié)束功能:顯示由DS:DX指定的字符串

stringdb'Hello,Everybody!$‘;在數(shù)據(jù)段定義要顯示的字符串

...movah,09h;設(shè)置功能號ah←09hmovdx,offsetstring;提供入口參數(shù) dx←字符串的偏移地址int21h ;DOS功能調(diào)用字符串顯示第五周匯編語言程序設(shè)計(jì)2024-3-264.鍵盤輸入到緩沖區(qū)DOS功能調(diào)用INT21H功能號:AH=0AH入口參數(shù):DS:DX=緩沖區(qū)首地址(DS:DX)=緩沖區(qū)字節(jié)數(shù)功能:輸入到緩沖區(qū)

緩沖區(qū)的定義第1字節(jié)事先填入最多欲接收的字符個(gè)數(shù)(包括回車字符,可以是1~255)第2字節(jié)將存放實(shí)際輸入的字符個(gè)數(shù)(不包括回車符)第3字節(jié)開始將存放輸入的字符串實(shí)際輸入的字符數(shù)多于定義數(shù)時(shí),多出的字符丟掉,且響鈴

buffer db81;定義緩沖區(qū);第1個(gè)字節(jié)填入可能輸入的 最大字符數(shù)

db?;存放實(shí)際輸入的字符數(shù)

db81dup(?);存放輸入的字符串

... movdx,segbuffer ;偽指令seg取得buffer的段 地址

movds,dx ;設(shè)置數(shù)據(jù)段DS movdx,offsetbuffer movah,0ah int21h5.結(jié)束程序返回DOSDOS功能調(diào)用INT21H功能號:AH=4CH入口參數(shù):AL=返回碼功能:結(jié)束程序返回DOS

MOVAH,4CHINT21H第4章操作數(shù)的尋址方式4.1立即尋址方式4.2寄存器尋址方式4.3直接尋址方式4.4寄存器間接尋址方式4.5寄存器相對尋址方式4.6基址變址尋址方式4.7相對基址變址尋址方式第4章操作數(shù)的尋址方式計(jì)算機(jī)中的指令由操作碼和操作數(shù)組成。操作數(shù)字段可以有一個(gè)、兩個(gè)或三個(gè),通常稱為一地址、二地址或三地址指令。二地址指令中兩個(gè)操作數(shù)分別稱為源操作數(shù)和目的操作數(shù)。所謂尋址方式就是指令中尋找操作數(shù)的方式。80x86匯編語言指令的一般格式位:[標(biāo)號:]指令助記符[操作數(shù)][;注釋][]中的內(nèi)容位可選項(xiàng)。標(biāo)號:符號地址,表示指令在內(nèi)存中的位置。標(biāo)號后應(yīng)加冒號:。指令助記符:指令名稱,是指令功能的英文縮寫。操作數(shù):指令要操作的數(shù)據(jù)或數(shù)據(jù)所在的地址。寄存器,常量,變量,表達(dá)式。注釋:每行以分號“;”開頭,匯編程序不處理。4.1立即尋址方式立即尋址方式操作數(shù)就在指令中,緊跟在操作碼之后,操作數(shù)作為指令的一部分存放在代碼段。例4.1MOVAL,6H執(zhí)行完此條指令后(AL)=06H例4.2MOVAX,12AFHAX=12AFH,即AH=12H,AL=AFH

注意:執(zhí)行時(shí)無需去內(nèi)存取數(shù),因此稱為立即數(shù)。主要用于寄存器賦初值。立即數(shù)只能作為源操作數(shù),并且長度與目的操作數(shù)一致。4.2寄存器尋址方式操作數(shù)就是寄存器中的值。指令中給出寄存器名。例3.3MOVAX,BX指令執(zhí)行后,AX=BX,BX保持不變。例MOVAL,BLMOVAX,BXMOVAL,BX錯(cuò)

MOVAX,BL錯(cuò)

注意:以上兩種尋址方式都與存儲器無關(guān)。以下各種尋址方式的操作數(shù)都在存儲器中。偏移地址也稱為有效地址(EA)。4.3直接尋址方式操作數(shù)的有效地址EA就在指令中。機(jī)器默認(rèn)段地址在DS中。4.3直接尋址方式(1)存儲器讀操作例4-4MOVAX,DS:[2000H]該指令表示從數(shù)據(jù)段的2000H單元讀出一個(gè)字送入AX。其中(DS)=1500H,(17000H)=31H,(17001H)=65H,(AX)=1020H。則有效地址EA=2000H物理地址=(DS)*10H+EA=15000H+2000H=17000H執(zhí)行指令后:(AX)=6531H4.3直接尋址方式(2)存儲器寫操作如果要實(shí)現(xiàn)CPU寫內(nèi)存操作,只要把MOV指令的目的操作數(shù)變?yōu)榇鎯卧床僮鲾?shù)為CPU的寄存器即可。例4-5MOVDS:[4000H],AX將AX的值寫入數(shù)據(jù)段的4000H單元。已知(DS)=1500H,(AX)=3946H。則有效地址EA=4000H物理地址=(DS)*10H+EA=15000H+4000H=19000H執(zhí)行指令后:(19000H)=46H(19001H)=39H4.3直接尋址方式(3)符號地址直接尋址方式除了用數(shù)值作為有效地址之外,還可以用符號地址的形式。為存儲單元定義一個(gè)名字,該名字就是符號地址。如果把存儲單元看成變量,該名字也是變量名。4.3直接尋址方式(4)段前綴在與內(nèi)存有關(guān)的尋址方式中,操作數(shù)的段地址默認(rèn)為數(shù)據(jù)段,80X86規(guī)定除了數(shù)據(jù)段之外,數(shù)據(jù)還可以存放在其他三種段中。如果操作數(shù)在其他段中存放,稱為段超越,需要在指令中用段超越前綴指出,即用操作數(shù)前加上段寄存器名和冒號表示。4.3直接尋址方式例4-7VALUEEQU1000HMOVAX,DS:[VALUE]MOVAX,ES:[VALUE]若已知(ES)=3600H,EA=VALUE=1000H,則有段超越前綴ES的指令源操作數(shù)的物理地址計(jì)算為:物理地址=(ES)*10H+EA=36000H+1000H=37000H若字單元(37000H)=9091H執(zhí)行完MOVAX,ES:[VALUE]后:(AX)=9091H4.4寄存器間接尋址方式操作數(shù)的有效地址在寄存器中,只允許使用BX、BP、SI和DI寄存器。物理地址=10Hx(DS)+(BX)

物理地址=10Hx(DS)+(SI)物理地址=10Hx(DS)+(DI)

物理地址=10Hx(SS)+(BP)

4.4寄存器間接尋址方式4.4寄存器間接尋址方式例4-8MOVAX,[BX]已知(DS)=1500H,(BX)=4580H,則EA=(BX)=4580H物理地址=(DS)*10H+EA=15000H+4580H=19580H若(19580H)=2364H執(zhí)行指令后:(AX)=2364H4.4寄存器間接尋址方式例4-9MOVES:[DI],AX已知(ES)=2500H,(DI)=5318H,則EA=(DI)=5318H物理地址=(ES)*10H+EA=25000H+5318H=2A318H若(AX)=2468H執(zhí)行指令后:(2A318H)=68H(2A319H)=24H4.4寄存器間接尋址方式例4-10MOVAX,[BX];默認(rèn)DS寄存器作段地址MOVDX,[BP];默認(rèn)SS寄存器作段地址MOVES:[DI],AX;指定ES寄存器作段地址4.5寄存器相對尋址方式操作數(shù)的有效地址是一個(gè)寄存器和位移量之和。

物理地址=10Hx(DS)+(BX)+8(16)位位移量物理地址=10Hx(DS)+(SI)+8(16)位位移量物理地址=10Hx(DS)+(DI)+8(16)位位移量

物理地址=10Hx(SS)+(BP)+8(16)位位移量

4.5寄存器相對尋址方式例4-11MOVAX,TOP[SI]以上指令TOP為符號地址,即位移量。已知(DS)=1500H,(SI)=7310H,TOP=25H,則有效地址EA=(SI)+TOP=7310H+25H=7335H物理地址=(DS)*10H+EA=15000H+7335H=1C335H若(1C335H)=2428H,執(zhí)行指令后,(AX)=2428H4.5寄存器相對尋址方式例4-12MOVAX,[BX+2623H]或?qū)懗蒑OVAX,[BX].2623H已知(DS)=1500H,(BX)=6854H,則有效地址EA=(BX)+2623H=8E77H物理地址=(DS)*10H+EA=15000H+8E77H=1DE77H若(1DE77H)=3567H,執(zhí)行指令后:(AX)=3567H4.5寄存器相對尋址方式例4-13MOVAX,ARRY[BX]MOVAX,[ARRY][BX]MOVAX,[ARRY+BX]MOVAL,BUF[BX]MOVAL,[BX+8H]MOVAL,[BX].8H4.6基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和?;芳拇嫫鰾X和BP,變址寄存器SI和DI。默認(rèn)段寄存器搭配和寄存器間接尋址方式一樣。4.6基址變址尋址方式例4-14MOVAX,[BX+DI]執(zhí)行前:已知(DS)=2100H,(BX)=0158H,(DI)=10A5H,(221FD)=34H,(221FE)=95H,(AX)=0FFFFH。則有效地址EA=(BX)+(DI)=0158H+10A5H=11FDH物理地址=(DS)*10H+EA=21000H+11FDH=221FDH執(zhí)行后,(AX)=9534H4.6基址變址尋址方式例4-15MOVAX,[BX][SI];默認(rèn)DS寄存器作段地址MOVAX,[BP][DI];默認(rèn)SS寄存器作段地址MOVAX,ES:[BX][DI];指定ES寄存器作段地址MOVDX,[BP][SI] ;默認(rèn)SS寄存器作段地址MOV[BX+DI],CX ;默認(rèn)DS寄存器作段地址MOV[BP+SI],AL ;默認(rèn)SS寄存器作段地址4.7相對基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器以及一個(gè)位移量之和?;芳拇嫫鰾X和BP,變址寄存器SI和DI。默認(rèn)段寄存器搭配和寄存器間接尋址方式一樣。4.7相對基址變址尋址方式4.7相對基址變址尋址方式例4-16MOVAX,MASK[BX][SI];默認(rèn)DS寄存器作段地址MOVAX,[MASK+BX+SI] ;默認(rèn)DS寄存器作段地址MOVAX,[BX+SI].MASK ;默認(rèn)DS寄存器作段地址以上三種表示形式實(shí)現(xiàn)的功能是一樣的。其有效地址EA=MASK+(BX)+(SI);物理地址=(DS)*10H+EA。選擇題(1)movax,9(源操作數(shù))

(2)movbyteptr[bx],9(目的操作數(shù))

(3)movbx,[di](源操作數(shù))

(4)movax,bx(源操作數(shù))

1.寄存器尋址2.立即數(shù)尋址3.寄存器間接尋址

此處添加題目描述2,1,1,32,3,1,32,3,3,13,1,1,2ABCD提交單選題50分選擇題(1)mov[si+bx],9(目的操作數(shù))

(2)movarray[bx],cx(目的操作數(shù))

(3)movax,array+9(源操作數(shù))

(4)movax,array[bx+di](源操作數(shù))

1寄存器相對尋址2直接尋址3相對基址變址尋址4基址變址尋址此處添加題目描述1,4,3,24,1,1,34,4,2,34,1,2,3ABCD提交單選題50分本章小結(jié)各種尋址方式總結(jié)注意:(1)

雙操作數(shù)指令的兩個(gè)操作數(shù),長度須匹配。(2)

雙操作數(shù)指令的兩個(gè)操作數(shù)中,不能兩個(gè)操作數(shù)同為內(nèi)存單元。本章小結(jié)操作數(shù)的有效地址前可以加段跨越前綴,但在以下三種情況下不允許:串處理指令的目的串必須用ES段PUSH指令的目的和POP指令的源必須用SS段指令必須存放在CS段第5章常用指令系統(tǒng)80x86匯編語言指令的一般格式為:[標(biāo)號:]指令助記符[操作數(shù)][;注釋][]中的內(nèi)容為可選項(xiàng)。例如:START:MOVAX,DATA;DATA送AX標(biāo)號:符號地址,表示指令在內(nèi)存中的位置。標(biāo)號后應(yīng)加冒號:。指令助記符:指令名稱,是指令功能的英文縮寫。操作數(shù):指令要操作的數(shù)據(jù)或數(shù)據(jù)所在的地址。寄存器,常量,變量,表達(dá)式。注釋:每行以分號“;”開頭,匯編程序不處理。8086指令系統(tǒng)可以分為5組:

(1)數(shù)據(jù)傳送指令(2)算術(shù)運(yùn)算指令(3)邏輯指令與移位指令(4)串操作指令(5)程序轉(zhuǎn)移指令5.1數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令累加器專用傳送指令地址傳送指令標(biāo)志寄存器傳送5.1.1通用數(shù)據(jù)傳送指令MOV傳送PUSH進(jìn)棧POP出棧XCHG交換(1)MOV傳送指令格式:MOVDST,SRC操作:(DST)←(SRC)DST表示目的操作數(shù),SRC表示源操作數(shù)。功能:將源操作數(shù)傳送到目的操作數(shù)。

雙操作數(shù)指令的規(guī)定源操作數(shù)與目的操作數(shù)的長度必須一致。源操作數(shù)與目的操作數(shù)不能同時(shí)為存儲器。目的操作數(shù)不能為CS和IP,因?yàn)镃S:IP是程序當(dāng)前地址。目的操作數(shù)不可以是立即數(shù)。例5.1立即數(shù)與寄存器的傳送MOVAH,89 ;十進(jìn)制數(shù)MOVAX,2016H;十六進(jìn)制數(shù),后面加HMOVAX,0ABCDH ;十六進(jìn)制數(shù),因非數(shù)字(0~9)開頭,前面加0MOVAL,10001011B ;二進(jìn)制數(shù),后面加BMOVAL,‘A’

;字符‘A’的ASCII碼是41H,相當(dāng)于立即數(shù)以下指令是錯(cuò)誤的: MOVAH,258 ;258超出8位(二進(jìn)制) MOVAX,DH;兩個(gè)操作數(shù)長度不一致例5.2在指令中說明內(nèi)存單元的類型,以便操作數(shù)長度匹配。 MOV[BX],AX以下指令是錯(cuò)誤的: MOV[BX],0指令改寫為: MOVBYTEPTR[BX],0 MOVWORDPTR[BX],0例5.3段地址寄存器的傳送 MOVAX,DATA_SEGMOVDS,AX段地址寄存器須通過寄存器得到段地址,不能直接由符號地址、段寄存器、立即數(shù)得到。以下指令是錯(cuò)誤的: MOVDS,DATA_SEG;段寄存器不接受符號地址 MOVDS,ES;段寄存器之間不能直接傳送 MOVDS,1234;段寄存器不接受立即數(shù) MOVCS,AX;指令合法,但代碼段寄存器不能賦值例5.4傳送變量 MOVBX,TABLE;假定TABLE是16位的變量把變量TABLE的值送給BX。以下指令是錯(cuò)誤的: MOVBL,TABLE;TABLE是16位的變量,操作數(shù)長度不一致 MOV[BX],TABLE;兩個(gè)操作數(shù)不能同為內(nèi)存單元例5.5傳送地址 MOVBX,OFFSETTABLE OFFSET為偏移地址屬性操作符,通常是把變量TABLE的偏移地址送給BX。以下指令是錯(cuò)誤的: MOVBL,OFFSETTABLE

不管變量類型如何,其有效地址總是16位。(2)PUSH進(jìn)棧指令格式:PUSHSRC操作:(SP)←(SP)-2((SP)+1,(SP))←(SRC)堆棧:后進(jìn)先出內(nèi)存區(qū),以字為單位傳送,SS:SP總是指向棧頂。(3)POP出棧指令格式:POPDST操作:(DST)←((SP)+1,(SP))

(SP)←(SP)+2

例5.6進(jìn)棧和出棧 MOVBX,1234H PUSHBX POPAX例5.7在DEBUG下如下指令也是合法的: PUSH[2016];把地址為DS:[2016]的字送往棧頂(SS:SP所指內(nèi)存) POP[2016];把棧頂(SS:SP所指內(nèi)存)的字送往DS:[2016]的內(nèi)存(4)XCHG交換指令格式:XCHGOPR1,OPR2操作:(OPR1)(OPR2)功能:把兩個(gè)操作數(shù)互換位置。遵循雙操作數(shù)指令的規(guī)定,但操作數(shù)不能為立即數(shù)。例5.8 XCHGAX,BX;兩個(gè)寄存器長度相等 XCHGAX,[BX];AX要求[BX]也取字單元 XCHGAX,VAR;VAR必須是字變量以下指令是錯(cuò)誤的: XCHGAX,5;顯然操作數(shù)不能為立即數(shù) XCHG[BX],VAR;操作數(shù)不能同為內(nèi)存單元 XCHGAX,BH;操作數(shù)長度要一致5.1.2累加器專用傳送指令I(lǐng)N;從I/O端口輸入OUT;向I/O端口輸出XLAT;換碼其中I/O端口是CPU與外設(shè)傳送數(shù)據(jù)的接口,單獨(dú)編址,不屬于內(nèi)存,端口地址范圍0000~FFFFH.這組指令只限于AX,AL累加器。(1)IN輸入指令長格式:INAL,PORT(字節(jié));00~FFHINAX,PORT(字)操作:AL←(PORT)AX←(PORT)功能:把端口PORT的數(shù)據(jù)輸入到累加器。

短格式:INAL,DX(字節(jié));PORT放入DXINAX,DX(字)操作:AL←((DX))AX←((DX))功能:把DX指向的端口的數(shù)據(jù)輸入到累加器。例5.9讀端口 INAX,61H MOVBX,AX 把端口61H的16位數(shù)據(jù)輸入到累加器AX,再轉(zhuǎn)送BX。例5.10 MOVDX,2F8H INAL,DX 把端口2F8H的8位數(shù)據(jù)輸入到累加器AL。INAX,2F8H;錯(cuò),端口號超出8位,不能用長格式INAX,[DX];錯(cuò),端口地址不能用[](2)OUT輸出指令長格式:OUTPORT,AL(字節(jié));00-FFHOUTPORT,AX(字)操作:PORT←ALPORT←AX功能:把累加器的數(shù)據(jù)輸出到端口PORT。短格式:OUTDX,AL(字節(jié));0000-FFFFHOUTDX,AX(字)

操作:(DX)←AL

(DX)

←AX功能:把累加器的數(shù)據(jù)輸出到DX指向的端口。例5.11寫端口 OUT61H,AL OUTDX,AL(3)XLAT換碼指令格式:XLAT操作:AL←(BX+AL)功能:把BX+AL的值作為有效地址,取出其中的一個(gè)字節(jié)送AL。

例5.12換碼

mov

ax,data

mov

ds,ax

movbx,100H

moval,4

xlat

int21hXLAT執(zhí)行前XLAT執(zhí)行后5.1.3地址傳送指令LEA有效地址送寄存器LDS指針?biāo)图拇嫫骱虳SLES指針?biāo)图拇嫫骱虴S(1)LEA有效地址送寄存器指令格式:LEAREG,SRC 操作:REG←SRC功能:把源操作數(shù)的有效地址EA送到指定的寄存器。例5.13取變量的有效地址 LEABX,TABLE MOVBX,OFFSETTABLE 上面2條指令等效。TABLE無論是何類型的變量,其有效地址總是16位。例5.14 LEABX,[2016H]MOVBX,OFFSET

[2016H] 指令執(zhí)行后,BX=2016H。(2)LDS指針?biāo)图拇嫫骱虳S指令格式:LDSREG,SRC操作:REG←(SRC)

DS←(SRC+2)功能:把源操作數(shù)SRC所指向的內(nèi)存單元中的兩個(gè)字送到指定的寄存器REG和DS。例5.15 LDSSI,[BX] 指令執(zhí)行前,如DS=2000H,BX=0400H,(2000:0400)=1234H,(2000:0402)=5678H, 指令執(zhí)行后,SI=1234H,DS=5678H。(3)LES指針?biāo)图拇嫫骱虴S指令格式:LESREG,SRC操作:REG←(SRC)

ES←(SRC+2)功能:把源操作數(shù)SRC所指向的內(nèi)存單元中的兩個(gè)字送到指定的寄存器REG和ES。例如LESDI,[10H]DS=C000H,(C0010H)=0180H,(C0012H)=2000H結(jié)果DI=0180H,ES=2000H

5.1.4標(biāo)志寄存器傳送指令LAHF標(biāo)志寄存器FLAGS的低字節(jié)送AHSAHFAH送FLAGS的低字節(jié)PUSHF標(biāo)志進(jìn)棧POPF標(biāo)志出棧以上傳送類指令均不影響標(biāo)志位,除SAHF,POPF外.例5.16 LAHF;標(biāo)志寄存器低字節(jié)送AH寄存器 SAHF;AH送標(biāo)志寄存器 PUSHF;標(biāo)志入棧 POPF;標(biāo)志出棧5.2算術(shù)運(yùn)算指令

加減乘除四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的基本操作。算術(shù)運(yùn)算指令主要實(shí)現(xiàn)二進(jìn)制(和十進(jìn)制)數(shù)據(jù)的四則運(yùn)算。5.2.1類型擴(kuò)展指令CBW:AL擴(kuò)展為AXCWD:AX擴(kuò)展為DX,AX擴(kuò)展方法為符號擴(kuò)展。例5.17正數(shù)的擴(kuò)展

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論