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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

1101.1101B=D.DH

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

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

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

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

84210.5

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

100001000001+0.11101.1

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

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

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

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

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

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

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

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

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

定義:

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

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

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

25 00011001+(-32)+11100000

-7111110013200100000+(-25)+11100111700000111 1↙

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

補[11100111]補[11101000]補ABC提交單選題15分此處添加題目描述11111001000010011111011111110110ABCD提交多選題25分1.2.5無符號數(shù)的表示對于正數(shù),不保留符號位,把符號位也作為數(shù)值,這樣的數(shù)叫無符號數(shù)。1.2.6字符的表示ASCII碼擴充的ASCII碼表1.2回車:0dh換行:0ah空格:20h0~9:30h~39hA~Z:41h~5aha~z:61h~7ah1.2.7基本邏輯運算邏輯運算按位操作與運算AND或運算OR異或運算XOR非運算NOT第2章計算機基本原理2.1計算機系統(tǒng)組成2.2存儲器2.3中央處理器(CPU)中的寄存器2.4外部設備和接口2.532位80x86CPU的工作模式2.1計算機系統(tǒng)組成計算機的基本工作原理是存儲程序和程序控制。馮諾依曼原理的計算機結(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)運算器一次最多可以處理16位的數(shù)據(jù);(3)寄存器的最大寬度為16位;(4)寄存器和運算器之間的通路為16位。2.2.2存儲器1.基本存儲單元計算機存儲信息的最小單位是一個二進制位(bit)8位二進制位組成一個字節(jié)(Byte)2個字節(jié)(16位)組成一個字(Word)2個字(32位)稱為雙字。80x86微機的內(nèi)存儲器以字節(jié)為基本存儲單位,或叫基本存儲單元2.2.2存儲器2.內(nèi)存中字的存儲字與字節(jié)的對應關(guān)系從31200H單元開始存放的字數(shù)據(jù)為A28FH,從31202H單元開始存放的字數(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邏輯地址邏輯地址是用戶編程時使用的地址,分為段地址和偏移地址兩部分。段地址:偏移地址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需要用完整的五位十六進制來表示,末尾還要加上十六進制數(shù)的標志H.作答填空題50分已知8086系統(tǒng)某存儲單元物理地址為:52506H,段基址的最大值是

[填空1]

,最小值是

[填空2]

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

CPU要想進行數(shù)據(jù)的讀寫,必須和外部器件(芯片)進行下面3類的信息交互。(1)存儲單元的地址(地址信息)(2)器件的選擇,讀或?qū)懨睿刂菩畔ⅲ?)讀或?qū)懙臄?shù)據(jù)(數(shù)據(jù)信息)2.2.5CPU對內(nèi)存的讀寫操作CPU從地址為3的內(nèi)存單元中讀取數(shù)據(jù)的過程(1)CPU通過地址線將要進行操作的內(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通過地址線將要進行操作的內(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)存的讀寫操作要讓一個計算機或微處理器工作,應向它輸入能夠驅(qū)動它進行工作的電平信息(即機器碼)。

對于8086CPU,下面的機器碼,能夠完成從內(nèi)存地址為“3”的單元讀數(shù)據(jù)。機器碼:101000010000001100000000含義:從內(nèi)存地址為“3”的單元讀取數(shù)據(jù)送入寄存器AX機器碼是01串,難以記憶和書寫,用匯編指令來表示,情況如下。對應的匯編指令: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位的,可以存放兩個字節(jié)。AX、BX、CX、DX這4個寄存器通常用來存放一般性的數(shù)據(jù),有時候也可以存放地址,被稱為通用數(shù)據(jù)寄存器。①AX:累加器,運算時較多使用這個寄存器,有些指令規(guī)定必須使用它。

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

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

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

①SP:堆棧指針,這是一個專用的寄存器,存放堆棧棧頂?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個16位的段寄存器,分別命名為CS,SS,DS,ES。它們用來存放4個段的段基址。

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

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

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

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

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

狀態(tài)標志:反映處理器當前的狀態(tài),如有無溢出,有無進位等。

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

控制標志:用來控制處理器的工作方式,如是否響應可屏蔽中斷等

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

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

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

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

;從當前目錄MASM退到根目錄E:\>3.1.3常用的DOS命令3.DIR;顯示目錄和文件例如:E:\>MASM>DIR;列出當前目錄下的子目錄和文件E:\>MASM\>DIR*.ASM;列出所有擴展名為ASM的文件,*為通配符E:\>MASM>DIRHELLO.*;列出所有名為HELLO而擴展名不限的文件E:\>MASM>DIRHE*.???;列出所有文件名前2個字符為’HE’而擴展名有3個字符的文件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;復制文件例如:E:\>COPYH1.TXTH2.TXT;復制文件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實例13.2.2實例2例3.1單個字符的鍵盤輸入與顯示輸出程序

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

D>Hello↓

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

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

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

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

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

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

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

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

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

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

movds,dx ;設置數(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ù)的尋址方式計算機中的指令由操作碼和操作數(shù)組成。操作數(shù)字段可以有一個、兩個或三個,通常稱為一地址、二地址或三地址指令。二地址指令中兩個操作數(shù)分別稱為源操作數(shù)和目的操作數(shù)。所謂尋址方式就是指令中尋找操作數(shù)的方式。80x86匯編語言指令的一般格式位:[標號:]指令助記符[操作數(shù)][;注釋][]中的內(nèi)容位可選項。標號:符號地址,表示指令在內(nèi)存中的位置。標號后應加冒號:。指令助記符:指令名稱,是指令功能的英文縮寫。操作數(shù):指令要操作的數(shù)據(jù)或數(shù)據(jù)所在的地址。寄存器,常量,變量,表達式。注釋:每行以分號“;”開頭,匯編程序不處理。4.1立即尋址方式立即尋址方式操作數(shù)就在指令中,緊跟在操作碼之后,操作數(shù)作為指令的一部分存放在代碼段。例4.1MOVAL,6H執(zhí)行完此條指令后(AL)=06H例4.2MOVAX,12AFHAX=12AFH,即AH=12H,AL=AFH

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

MOVAX,BL錯

注意:以上兩種尋址方式都與存儲器無關(guān)。以下各種尋址方式的操作數(shù)都在存儲器中。偏移地址也稱為有效地址(EA)。4.3直接尋址方式操作數(shù)的有效地址EA就在指令中。機器默認段地址在DS中。4.3直接尋址方式(1)存儲器讀操作例4-4MOVAX,DS:[2000H]該指令表示從數(shù)據(jù)段的2000H單元讀出一個字送入AX。其中(DS)=1500H,(17000H)=31H,(17001H)=65H,(AX)=1020H。則有效地址EA=2000H物理地址=(DS)*10H+EA=15000H+2000H=17000H執(zhí)行指令后:(AX)=6531H4.3直接尋址方式(2)存儲器寫操作如果要實現(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ù)值作為有效地址之外,還可以用符號地址的形式。為存儲單元定義一個名字,該名字就是符號地址。如果把存儲單元看成變量,該名字也是變量名。4.3直接尋址方式(4)段前綴在與內(nèi)存有關(guān)的尋址方式中,操作數(shù)的段地址默認為數(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ù)的物理地址計算為:物理地址=(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];默認DS寄存器作段地址MOVDX,[BP];默認SS寄存器作段地址MOVES:[DI],AX;指定ES寄存器作段地址4.5寄存器相對尋址方式操作數(shù)的有效地址是一個寄存器和位移量之和。

物理地址=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ù)的有效地址是一個基址寄存器和一個變址寄存器的內(nèi)容之和。基址寄存器BX和BP,變址寄存器SI和DI。默認段寄存器搭配和寄存器間接尋址方式一樣。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];默認DS寄存器作段地址MOVAX,[BP][DI];默認SS寄存器作段地址MOVAX,ES:[BX][DI];指定ES寄存器作段地址MOVDX,[BP][SI] ;默認SS寄存器作段地址MOV[BX+DI],CX ;默認DS寄存器作段地址MOV[BP+SI],AL ;默認SS寄存器作段地址4.7相對基址變址尋址方式操作數(shù)的有效地址是一個基址寄存器和一個變址寄存器以及一個位移量之和?;芳拇嫫鰾X和BP,變址寄存器SI和DI。默認段寄存器搭配和寄存器間接尋址方式一樣。4.7相對基址變址尋址方式4.7相對基址變址尋址方式例4-16MOVAX,MASK[BX][SI];默認DS寄存器作段地址MOVAX,[MASK+BX+SI] ;默認DS寄存器作段地址MOVAX,[BX+SI].MASK ;默認DS寄存器作段地址以上三種表示形式實現(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ù)指令的兩個操作數(shù),長度須匹配。(2)

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

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

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

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

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

(SP)←(SP)+2

例5.6進棧和出棧 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)功能:把兩個操作數(shù)互換位置。遵循雙操作數(shù)指令的規(guī)定,但操作數(shù)不能為立即數(shù)。例5.8 XCHGAX,BX;兩個寄存器長度相等 XCHGAX,[BX];AX要求[BX]也取字單元 XCHGAX,VAR;VAR必須是字變量以下指令是錯誤的: XCHGAX,5;顯然操作數(shù)不能為立即數(shù) XCHG[BX],VAR;操作數(shù)不能同為內(nèi)存單元 XCHGAX,BH;操作數(shù)長度要一致5.1.2累加器專用傳送指令IN;從I/O端口輸入OUT;向I/O端口輸出XLAT;換碼其中I/O端口是CPU與外設傳送數(shù)據(jù)的接口,單獨編址,不屬于內(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;錯,端口號超出8位,不能用長格式INAX,[DX];錯,端口地址不能用[](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的值作為有效地址,取出其中的一個字節(jié)送AL。

例5.12換碼

mov

ax,data

mov

ds,ax

movbx,100H

moval,4

xlat

int21hXLAT執(zhí)行前XLAT執(zhí)行后5.1.3地址傳送指令LEA有效地址送寄存器LDS指針送寄存器和DSLES指針送寄存器和ES(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指針送寄存器和DS指令格式:LDSREG,SRC操作:REG←(SRC)

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

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

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

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

溫馨提示

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

最新文檔

評論

0/150

提交評論