第四章 1指令系統(tǒng)和匯編語言程序設(shè)計(jì)(上)_第1頁
第四章 1指令系統(tǒng)和匯編語言程序設(shè)計(jì)(上)_第2頁
第四章 1指令系統(tǒng)和匯編語言程序設(shè)計(jì)(上)_第3頁
第四章 1指令系統(tǒng)和匯編語言程序設(shè)計(jì)(上)_第4頁
第四章 1指令系統(tǒng)和匯編語言程序設(shè)計(jì)(上)_第5頁
已閱讀5頁,還剩132頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 第四章第四章 指令系統(tǒng)和指令系統(tǒng)和 匯編語言程序設(shè)計(jì)(上)匯編語言程序設(shè)計(jì)(上) 2 8086 8086指令系統(tǒng)是所有指令系統(tǒng)是所有x86x86系列系列CPUCPU指令系統(tǒng)的基礎(chǔ),本章重指令系統(tǒng)的基礎(chǔ),本章重點(diǎn)介紹點(diǎn)介紹8086 CPU8086 CPU指令的格式、尋址方式、各類指令功能和用法指令的格式、尋址方式、各類指令功能和用法等基本知識(shí),介紹匯編語言程序的基本結(jié)構(gòu)與組成,通過具體等基本知識(shí),介紹匯編語言程序的基本結(jié)構(gòu)與組成,通過具體實(shí)例來了解匯編語言程序設(shè)計(jì)的基本技術(shù)和設(shè)計(jì)思想。實(shí)例來了解匯編語言程序設(shè)計(jì)的基本技術(shù)和設(shè)計(jì)思想。 將有將有1212學(xué)時(shí)的匯編語言實(shí)驗(yàn),每次實(shí)驗(yàn)后提交電子文檔

2、實(shí)學(xué)時(shí)的匯編語言實(shí)驗(yàn),每次實(shí)驗(yàn)后提交電子文檔實(shí)驗(yàn)報(bào)告。最后一學(xué)時(shí)為測(cè)驗(yàn)驗(yàn)報(bào)告。最后一學(xué)時(shí)為測(cè)驗(yàn)-完成指定編程后提交電子文檔完成指定編程后提交電子文檔報(bào)告。報(bào)告。 實(shí)驗(yàn)采用實(shí)驗(yàn)采用MASM20125MASM20125:Masm for WindowsMasm for Windows集成匯編環(huán)境及集成匯編環(huán)境及講義附錄的實(shí)驗(yàn)應(yīng)用。講義附錄的實(shí)驗(yàn)應(yīng)用。3 匯編語言(匯編語言(Assembly Language)是面向機(jī)器的程序設(shè))是面向機(jī)器的程序設(shè)計(jì)語言。在匯編語言中,用助記符(計(jì)語言。在匯編語言中,用助記符(Mnemonic)代替機(jī)器指)代替機(jī)器指令的操作碼,用地址符號(hào)(令的操作碼,用地址符號(hào)(S

3、ymbol)或標(biāo)號(hào)()或標(biāo)號(hào)(Label)代替指)代替指令或操作數(shù)的地址,如此就增強(qiáng)了程序的可讀性,像這樣符號(hào)令或操作數(shù)的地址,如此就增強(qiáng)了程序的可讀性,像這樣符號(hào)化的程序設(shè)計(jì)語言就是匯編語言,因此亦稱為符號(hào)語言。使用化的程序設(shè)計(jì)語言就是匯編語言,因此亦稱為符號(hào)語言。使用匯編語言編寫的程序,機(jī)器不能直接識(shí)別,還要由匯編程序或匯編語言編寫的程序,機(jī)器不能直接識(shí)別,還要由匯編程序或者叫匯編語言編譯器轉(zhuǎn)換成機(jī)器指令。匯編程序?qū)⒎?hào)化的操者叫匯編語言編譯器轉(zhuǎn)換成機(jī)器指令。匯編程序?qū)⒎?hào)化的操作代碼組裝成處理器可以識(shí)別的機(jī)器指令,這個(gè)過程稱為匯編。作代碼組裝成處理器可以識(shí)別的機(jī)器指令,這個(gè)過程稱為匯編。

4、 匯編語言是面向機(jī)器的語言,是較低級(jí)的語言,它和機(jī)匯編語言是面向機(jī)器的語言,是較低級(jí)的語言,它和機(jī)器的硬件密切相關(guān)的,不同器的硬件密切相關(guān)的,不同CPU的機(jī)器有不同的匯編語言。的機(jī)器有不同的匯編語言。 4l匯編語言是計(jì)算機(jī)系統(tǒng)提供給用戶的最快、最有效的語言,也是能對(duì)硬件直接編程的語言。l對(duì)空間和時(shí)間要求很高的程序,或需要直接控制硬件的程序,必須使用匯編語言進(jìn)行程序設(shè)計(jì)。#include stdafx.h #include stdio.h int main(int argc, char* argv ) int a,b,c; a=1; b=2; c=a+b; printf(“c=%dn,c); r

5、eturn 0; 編譯后的目標(biāo)文件編譯后的目標(biāo)文件(objobj)達(dá)到)達(dá)到3.59KB3.59KB5data segmentdata segmenta db ?a db ?b db ?b db ?sum db ?sum db ?string db c=$string db c=$data endsdata endscode segmentcode segmentmain proc farmain proc far assume cs:code, assume cs:code, ds:data, es:datads:data, es:datastart:start: push dspush d

6、s sub ax,ax sub ax,ax push ax push ax mov ax,datamov ax,data mov ds,ax mov ds,ax mov es,ax mov es,axmov a,1mov a,1 mov b,2 mov b,2 mov al,a mov al,a add al,b add al,b mov sum,al mov sum,al lea dx,string lea dx,string mov ah,09 mov ah,09 int 21h int 21h add sum,30hadd sum,30h mov dl,sum mov dl,sum mo

7、v ah,2 mov ah,2 int 21h int 21h mov dl,0ah mov dl,0ah int 21h int 21h mov dl,0dh mov dl,0dh int 21h int 21h ret retmain endpmain endpcode endscode ends end start end start匯編后的目標(biāo)文匯編后的目標(biāo)文件(件(objobj)只有)只有200200字節(jié)字節(jié)例例 2. C = a + b2. C = a + b64.1 指令格式指令格式 微機(jī)中的控制信息就是使計(jì)算機(jī)進(jìn)行某種操作微機(jī)中的控制信息就是使計(jì)算機(jī)進(jìn)行某種操作的命令,這些命令

8、就稱為指令。從形式上看,各種的命令,這些命令就稱為指令。從形式上看,各種指令都是一組二進(jìn)制編碼。計(jì)算機(jī)根據(jù)二進(jìn)制代碼指令都是一組二進(jìn)制編碼。計(jì)算機(jī)根據(jù)二進(jìn)制代碼去完成所需的操作。去完成所需的操作。 用助記符及符號(hào)表示的指令稱為匯編語言指令或用助記符及符號(hào)表示的指令稱為匯編語言指令或符號(hào)指令。符號(hào)指令。 匯編語言指令有序的組合稱為匯編語言源程序。匯編語言指令有序的組合稱為匯編語言源程序。匯編語言:使用助記符及符號(hào)地址、標(biāo)號(hào)等符號(hào)書寫匯編語言:使用助記符及符號(hào)地址、標(biāo)號(hào)等符號(hào)書寫程序的語言程序的語言7l程序是指令的有序集合l指令是計(jì)算機(jī)控制各個(gè)部件進(jìn)行操作的命令l計(jì)算機(jī)的指令由操作碼字段和操作數(shù)字

9、段兩部分組成。l操作碼說明計(jì)算機(jī)要執(zhí)行哪種操作,如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作,它是指令中不可缺少的組成部分l操作數(shù)是指令執(zhí)行的參與者,即各種操作的對(duì)象l有些指令不需要操作數(shù),通常的指令都有一個(gè)或兩個(gè)操作數(shù)。8 4.1.1指令格式指令格式 操作碼與地址碼操作碼與地址碼 所有的指令代碼,經(jīng)過分析都可以由兩部分組成,一部分為所有的指令代碼,經(jīng)過分析都可以由兩部分組成,一部分為操作碼操作碼,一部分為地址碼,一部分為地址碼D 9l每種指令的操作碼:用一個(gè)唯一的助記符表示(指令功能的英文縮寫)對(duì)應(yīng)著機(jī)器指令的一個(gè)二進(jìn)制編碼l指令中的操作數(shù)(源操作數(shù)、目的操作數(shù)):可以是一個(gè)具體的數(shù)值可以是存放數(shù)據(jù)的寄存

10、器名或指明數(shù)據(jù)在主存位置的存儲(chǔ)器地址10無地址指令無地址指令 單地址指令單地址指令 D1 雙地址指令:雙地址指令: D1,D2 操作數(shù)的存放:操作數(shù)的存放: 兩類區(qū)域:寄存器、存儲(chǔ)器兩類區(qū)域:寄存器、存儲(chǔ)器 三個(gè)地方:寄存器;存儲(chǔ)器的代碼區(qū)三個(gè)地方:寄存器;存儲(chǔ)器的代碼區(qū)CS;存儲(chǔ)器;存儲(chǔ)器的的DS、SS、ES區(qū)。區(qū)。寄存器操作數(shù)寄存器操作數(shù) AXDX,SP,DI,SI,BP,DS等等存儲(chǔ)器操作數(shù)存儲(chǔ)器操作數(shù) ,存儲(chǔ)器變量名等,存儲(chǔ)器變量名等代碼區(qū)操作數(shù)代碼區(qū)操作數(shù) 立即數(shù)(指令區(qū)操作數(shù))立即數(shù)(指令區(qū)操作數(shù))11例:例:MOV AX,BX ;將BX寄存器的內(nèi)容送AX寄存器中。編譯后的二進(jìn)制代

11、碼為: 1000101111000011B 8BC3H助記符操作數(shù)地址碼操作數(shù)地址碼為注釋,不參與匯編機(jī)器碼源操作數(shù)源操作數(shù)目的操作數(shù)目的操作數(shù)12匯編語言使用助記符及符號(hào)地址、標(biāo)號(hào)等符號(hào)書寫程序的語言匯編語言源程序用匯編語言編寫的程序匯編程序把匯編語言程序翻譯成機(jī)器語言程序的系統(tǒng)程序宏匯編(宏匯編程序)包含宏指令的匯編程序,或在源程序中把一組匯編語言語句序列定義為一條宏指令的匯編程序。機(jī)器指令是機(jī)器指令是CPU能直接識(shí)別并執(zhí)行的指令,它的表現(xiàn)形式能直接識(shí)別并執(zhí)行的指令,它的表現(xiàn)形式是二進(jìn)制編碼。是二進(jìn)制編碼。 13匯編程序一般具有如下功能:匯編程序一般具有如下功能:檢查和編排源程序;檢查和編

12、排源程序;產(chǎn)生宏匯編指令;產(chǎn)生宏匯編指令;將目標(biāo)程序從原來指定的地址重新定位到另一個(gè)地址;將目標(biāo)程序從原來指定的地址重新定位到另一個(gè)地址;檢查源程序中的錯(cuò)誤;檢查源程序中的錯(cuò)誤;產(chǎn)生源程序語句的列表,并對(duì)每個(gè)要匯編的源程序產(chǎn)生產(chǎn)生源程序語句的列表,并對(duì)每個(gè)要匯編的源程序產(chǎn)生一個(gè)目標(biāo)程序。一個(gè)目標(biāo)程序。14 4.1.2 字符集字符集 書寫匯編語言所允許使用的字符書寫匯編語言所允許使用的字符 大小寫英文字母大小寫英文字母 52個(gè)個(gè) 數(shù)字?jǐn)?shù)字 10個(gè)個(gè) 運(yùn)算符運(yùn)算符 * / = 分隔符分隔符 , ;();() 空格空格 TAB制表符制表符 控制符控制符 回車回車 換行換行 換頁換頁 其他字符其他字符

13、 $ & _ ? . % !匯編語言中的各種名字和符號(hào)的組成規(guī)定匯編語言中的各種名字和符號(hào)的組成規(guī)定 其第一個(gè)字符必須是其第一個(gè)字符必須是 字母字母 - ? 四種四種 從從第二個(gè)字符起可以是以上字符或數(shù)字第二個(gè)字符起可以是以上字符或數(shù)字 其字符長度為其字符長度為3115指令語句由四部分組成指令語句由四部分組成 (1) 第一部分是標(biāo)號(hào)、符號(hào)名(名字)第一部分是標(biāo)號(hào)、符號(hào)名(名字)(2) 第二部分是助記符、定義符第二部分是助記符、定義符(3) 第三部分是參數(shù)第三部分是參數(shù)(4) 第四部分是注釋第四部分是注釋16BUFFERBUFFER DB 1,2,3,4,5,6,7DB 1,2,3,4,

14、5,6,7; ;數(shù)據(jù)定義偽指令,在主存中開辟數(shù)據(jù)定義偽指令,在主存中開辟7 7個(gè)連續(xù)的字節(jié)單個(gè)連續(xù)的字節(jié)單元,初值依次為元,初值依次為1 17 7,變量名,變量名BUFFERBUFFER表示首地址表示首地址MOV CX,10MOV CX,10; ;傳送指令,具有傳送指令,具有2 2個(gè)操作數(shù)個(gè)操作數(shù)DELAY:DELAY: NOPNOP; ;空操作指令,沒有操作數(shù),帶有標(biāo)號(hào)空操作指令,沒有操作數(shù),帶有標(biāo)號(hào)LOOP DELAYLOOP DELAY; ;循環(huán)指令,標(biāo)號(hào)循環(huán)指令,標(biāo)號(hào)DELAYDELAY說明轉(zhuǎn)移位置說明轉(zhuǎn)移位置匯編語言語句舉例符號(hào)名定義符參數(shù)178086系統(tǒng)中的操作數(shù)主要分為三類:立即

15、數(shù)操作數(shù)、寄存系統(tǒng)中的操作數(shù)主要分為三類:立即數(shù)操作數(shù)、寄存器操作數(shù)和存儲(chǔ)器操作數(shù)。器操作數(shù)和存儲(chǔ)器操作數(shù)。(1)立即數(shù)操作數(shù))立即數(shù)操作數(shù)立即數(shù)是指具有固定數(shù)值的操作數(shù),即常數(shù)。它可以是字節(jié)立即數(shù)是指具有固定數(shù)值的操作數(shù),即常數(shù)。它可以是字節(jié)或字(或字(8位或位或16位)。存放時(shí),該操作數(shù)跟隨指令操作碼一起位)。存放時(shí),該操作數(shù)跟隨指令操作碼一起存放在指令區(qū),故又稱為代碼區(qū)操作數(shù)。一般作為源操作數(shù)存放在指令區(qū),故又稱為代碼區(qū)操作數(shù)。一般作為源操作數(shù)使用。使用。 (2)寄存器操作數(shù))寄存器操作數(shù)操作數(shù)事先存放在某寄存器中(操作數(shù)事先存放在某寄存器中(CPU的通用寄存器、專用寄的通用寄存器、專用

16、寄存器或段寄存器),只要知道寄存器的名稱(編號(hào))就可以尋存器或段寄存器),只要知道寄存器的名稱(編號(hào))就可以尋找到操作數(shù)。寄存器操作數(shù)既可作為源操作數(shù),又可作為目標(biāo)找到操作數(shù)。寄存器操作數(shù)既可作為源操作數(shù),又可作為目標(biāo)操作數(shù)。操作數(shù)。(3)存儲(chǔ)器操作數(shù))存儲(chǔ)器操作數(shù)約定操作數(shù)事先存放在存儲(chǔ)器中存放數(shù)據(jù)的某個(gè)單元,只要知約定操作數(shù)事先存放在存儲(chǔ)器中存放數(shù)據(jù)的某個(gè)單元,只要知道存儲(chǔ)器的地址即可尋到操作數(shù)。當(dāng)然,操作數(shù)也可以存放在道存儲(chǔ)器的地址即可尋到操作數(shù)。當(dāng)然,操作數(shù)也可以存放在堆棧中(堆棧是存儲(chǔ)器的一個(gè)特殊區(qū)域),只要知道堆棧指針,堆棧中(堆棧是存儲(chǔ)器的一個(gè)特殊區(qū)域),只要知道堆棧指針,就可以

17、用棧操作指令尋找操作數(shù)。既可作為源操作數(shù),又可作就可以用棧操作指令尋找操作數(shù)。既可作為源操作數(shù),又可作為目標(biāo)操作數(shù)。為目標(biāo)操作數(shù)。18 計(jì)算機(jī)的指令有微指令、機(jī)器指令和宏指令之計(jì)算機(jī)的指令有微指令、機(jī)器指令和宏指令之分。微指令是微程序級(jí)的命令,屬于硬件;宏指分。微指令是微程序級(jí)的命令,屬于硬件;宏指令是由若干匯編語言指令組成,屬于軟件;機(jī)器令是由若干匯編語言指令組成,屬于軟件;機(jī)器指令則是由宏匯編程序?qū)⒑曛噶罹幾g為代碼,亦指令則是由宏匯編程序?qū)⒑曛噶罹幾g為代碼,亦屬于軟件。屬于軟件。194.2 8086 CPU尋址方式尋址方式 所謂尋址方式就是操作數(shù)地址的形成方式(或稱編所謂尋址方式就是操作數(shù)

18、地址的形成方式(或稱編址方式、選址方式),形成操作數(shù)地址的過程稱為尋址址方式、選址方式),形成操作數(shù)地址的過程稱為尋址過程,可分為多種方式。過程,可分為多種方式。 201 1、 立即尋址立即尋址示意圖例:mov ax,1234h ;ax1234h212、 直接尋址示意圖 AHAL操作碼M代碼段AX12HEFH數(shù)據(jù)段21000H21001H2 1 0 0 02 0 0 0 01 0 0 0DS10H00H地址低位地址高位例:MOV AX,1000H;(DS)2000H圖3.5223 3、 寄存器尋址寄存器尋址CXAX示意圖例:mov cx,ax ;若(ax)=aabbh,運(yùn)行后(cx)=aabb

19、h (ax)中原數(shù)據(jù)不變234 4、寄存器間接尋址、寄存器間接尋址AHAL操作碼M代碼段AX25HABH數(shù)據(jù)段22200H22201H2 2 2 0 02 1 0 0 01 2 0 0DSSI示意圖例:MOV AX,SI;(SI)1200H,(DS)2100H默認(rèn)關(guān)系:IP CSBX、SI、DI或或16位數(shù)位數(shù)DSBP、SPSSDI(串指令)ES24寄存器間接尋址的功能AXAX25寄存器間接尋址的執(zhí)行265 5、寄存器相對(duì)尋址示意圖、寄存器相對(duì)尋址示意圖 AHAL操作碼M代碼段AX12H34H數(shù)據(jù)段17200H17201H1 7 2 0 01 5 0 0 01 2 0 0DS16位位移量10H

20、00H位移量L位移量H1 0 0 0SI例:MOV AX,1000HSI ;(DS)1500H,(SI)1200H2727寄存器相對(duì)尋址的執(zhí)行286、基址變址尋址方式、基址變址尋址方式 操作數(shù)在存儲(chǔ)器中,其有效地址是一個(gè)基址寄存器操作數(shù)在存儲(chǔ)器中,其有效地址是一個(gè)基址寄存器(BX、BP)和一個(gè)變址寄和一個(gè)變址寄存器存器(SI、DI)的內(nèi)容之和。其有效地址的計(jì)算公式如式所示。的內(nèi)容之和。其有效地址的計(jì)算公式如式所示。在不使用段超越前綴的情況下,規(guī)定:如果有效地址中含有在不使用段超越前綴的情況下,規(guī)定:如果有效地址中含有BP,則缺省,則缺省的段寄存器為的段寄存器為SS;否則,缺省的段寄存器為;否則

21、,缺省的段寄存器為DS。例例 假設(shè)指令:假設(shè)指令:MOV BX, BX+SI,在執(zhí)行時(shí),在執(zhí)行時(shí),(DS)=1000H,(BX)=2100H,(SI)=0011H,內(nèi)存單元,內(nèi)存單元12111H的內(nèi)容為的內(nèi)容為1234H。問該指令。問該指令執(zhí)行后,執(zhí)行后,BX的值是什么?的值是什么?解:源操作數(shù)的有效地址解:源操作數(shù)的有效地址EA為:為:EA=(BX)+(SI)=2100H+0011H=2111H該操作數(shù)的物理地址應(yīng)由該操作數(shù)的物理地址應(yīng)由DS和和EA的值形成,即:的值形成,即:PA=(DS)*16+EA=1000H*16+2111H=12111H所以,該指令的執(zhí)行效果是:把從物理地址為所以,

22、該指令的執(zhí)行效果是:把從物理地址為12111H開始的一個(gè)字的值開始的一個(gè)字的值傳送給傳送給BX。29注意數(shù)據(jù)段中高字節(jié)與低字節(jié)在存儲(chǔ)器中存放的順序注意數(shù)據(jù)段中高字節(jié)與低字節(jié)在存儲(chǔ)器中存放的順序存儲(chǔ)器地址:低存儲(chǔ)器地址:低存儲(chǔ)器地址:高存儲(chǔ)器地址:高307 7、相對(duì)基址加變址尋址示意圖、相對(duì)基址加變址尋址示意圖圖3.7例:MOV AX,1000HBXSI;(DS)=3000H,(BX)=0700H,(SI)=0300H3131相對(duì)基址加變址尋址的功能32相對(duì)基址加變址尋址的執(zhí)行相對(duì)基址加變址尋址的執(zhí)行33例例1 、設(shè)、設(shè)BX=0124H DI=2H DS=3200H,默認(rèn),默認(rèn)DS作為操作數(shù)對(duì)應(yīng)

23、的段寄存器作為操作數(shù)對(duì)應(yīng)的段寄存器(假假定沒使用段前綴定沒使用段前綴),試指出下列指令的尋址方式,并寫出其操作數(shù)的有效地址和物理地,試指出下列指令的尋址方式,并寫出其操作數(shù)的有效地址和物理地址。存儲(chǔ)器存儲(chǔ)數(shù)據(jù)如圖。址。存儲(chǔ)器存儲(chǔ)數(shù)據(jù)如圖。(1)MOV AX,1A38H(2)MOV AX,123H(3)MOV AX,BX(4)MOV AX,BX(5)MOV AX,BX+1(6)MOV AX,BX+DI(7)MOV AX,BX+DI+1解答:解答:(1)立即(數(shù))尋址立即(數(shù))尋址 AX=1A38HH(2)直接尋址直接尋址 有效地址有效地址=0123H,物理地址,物理地址=32000H+0123H

24、=32123H AX=CDABH(3)寄存器尋址寄存器尋址 AX=124H(4)寄存器間接尋址寄存器間接尋址有效地址有效地址=0124H,物理地址,物理地址=32000H+0124H=32124H AX=EFCDH(5)寄存器相對(duì)尋址寄存器相對(duì)尋址 有效地址有效地址=124H+1H=125H,物理地址,物理地址=32000H+125H=32125H AX=12EFH(6)基址變址尋址基址變址尋址 有效地址有效地址=0124H+2H=126H,物理地址,物理地址=32000H+126H=32126H AX=3412H(7)相對(duì)基址變址尋址相對(duì)基址變址尋址有效地址有效地址=0124H+2H+1H=

25、127H,物理地址物理地址=32000H+127H=32127H AX=5634H344.3 8086 CPU指令系統(tǒng)指令系統(tǒng) 按功能分類:數(shù)據(jù)傳送類指令按功能分類:數(shù)據(jù)傳送類指令 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 邏輯運(yùn)算與移位類指令邏輯運(yùn)算與移位類指令 串操作類指令串操作類指令 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 處理器控制指令等六大類。處理器控制指令等六大類。 354.3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令是指令系統(tǒng)中用得最多的一類指令,也是條數(shù)最多的一類指令,常用于將原始數(shù)據(jù)、中間運(yùn)算結(jié)果、最終結(jié)果及其他信息在CPU的寄存器和存儲(chǔ)器之間進(jìn)行傳送。根據(jù)功能的不同,數(shù)據(jù)傳送類指令可分為

26、: 通用數(shù)據(jù)傳送指令:通用數(shù)據(jù)傳送指令:MOV 交換指令:交換指令:XCHG 堆棧操作指令:堆棧操作指令:PUSH ,POP 地址傳送操作指令:地址傳送操作指令:LEA,LDS,LES 標(biāo)志寄存器傳送指令:標(biāo)志寄存器傳送指令:LAHF,SAHF,PUSHF,POPF 累加器專用傳送指令:累加器專用傳送指令:IN,OUT,XLAT361. 通用數(shù)據(jù)傳送指令通用數(shù)據(jù)傳送指令MOV通用數(shù)據(jù)傳送指令的一般形式為:MOV DST,SRC ;)()(SRCDST 它表示把源操作數(shù)(它表示把源操作數(shù)(SRC),傳送給目的操作數(shù)(),傳送給目的操作數(shù)(DST),源操作數(shù)不變,),源操作數(shù)不變,目的操作數(shù)被源操

27、作數(shù)所替換。傳送指令每次可以傳送一個(gè)字節(jié)或一個(gè)字,它目的操作數(shù)被源操作數(shù)所替換。傳送指令每次可以傳送一個(gè)字節(jié)或一個(gè)字,它可以實(shí)現(xiàn)可以實(shí)現(xiàn)CPU的內(nèi)部寄存器之間的數(shù)據(jù)傳送、寄存器和內(nèi)存之間的數(shù)據(jù)傳送,的內(nèi)部寄存器之間的數(shù)據(jù)傳送、寄存器和內(nèi)存之間的數(shù)據(jù)傳送,還可以將立即數(shù)送給內(nèi)存單元或者還可以將立即數(shù)送給內(nèi)存單元或者CPU內(nèi)部的寄存器。例如:內(nèi)部的寄存器。例如:MOV AL ,28H; 立即數(shù)立即數(shù)28H送送ALMOV BX,2004H; 立即數(shù)立即數(shù)2004H送送BX和和BX+1所指向的兩內(nèi)存單元所指向的兩內(nèi)存單元MOV AX,BX; BX中的中的16位數(shù)據(jù)送位數(shù)據(jù)送AXMOV DX,5024;

28、 立即數(shù)立即數(shù)5024送送DXMOV AX,BX; BX和和BX+1所指的兩個(gè)內(nèi)存單元的內(nèi)容送所指的兩個(gè)內(nèi)存單元的內(nèi)容送AXMOV DS,SI+BX; SI+BX和和SI+BX+1所指向的兩內(nèi)存單元的內(nèi)容送所指向的兩內(nèi)存單元的內(nèi)容送DSMOV SI,3510H; 立即數(shù)立即數(shù)3510H送到送到SI和和SI+1所指的兩個(gè)內(nèi)存單元所指的兩個(gè)內(nèi)存單元37使用使用MOV指令要注意以下幾點(diǎn):指令要注意以下幾點(diǎn):(1)立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。)立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。(2)立即數(shù)不能直接傳送到段寄存器,但可通過其他寄存器或堆棧傳送。)立即數(shù)不能直接傳送到段寄存器,但

29、可通過其他寄存器或堆棧傳送。(3)MOV指令的兩個(gè)操作數(shù)類型(數(shù)據(jù)位數(shù))必須相同。指令的兩個(gè)操作數(shù)類型(數(shù)據(jù)位數(shù))必須相同。 例如:例如:MOV AL,BX 是錯(cuò)誤的指令。是錯(cuò)誤的指令。(4)CPU中的寄存器除中的寄存器除IP外都可通過外都可通過MOV指令訪問。指令訪問。(5)CS只能作為源操作數(shù),不能作為目的操作數(shù)。只能作為源操作數(shù),不能作為目的操作數(shù)。(6)段寄存器之間不能直接傳送,兩個(gè)內(nèi)存單元之間不能直接傳送。)段寄存器之間不能直接傳送,兩個(gè)內(nèi)存單元之間不能直接傳送。 例如:例如:MOV BX,SI 是錯(cuò)誤的指令。是錯(cuò)誤的指令。段寄存器CS(源) DS ES SS通用寄存器AX BX C

30、X DX BP SP SI DIAL AH BL BH CL CH DL DH內(nèi)存單元立即數(shù)通用數(shù)據(jù)傳送指令傳送方向示意圖通用數(shù)據(jù)傳送指令傳送方向示意圖 38非法傳送舉例非法傳送舉例l兩個(gè)操作數(shù)的類型不一致例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反l兩個(gè)操作數(shù)不能都是存儲(chǔ)器傳送指令很靈活,但主存之間的直接傳送卻不允許l段寄存器的操作有一些限制段寄存器屬專用寄存器,對(duì)他們的操作能力有限39兩個(gè)操作數(shù)的類型要一致兩個(gè)操作數(shù)的類型要一致l絕大多數(shù)雙操作數(shù)指令,除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,否則為非法指令MOV AL,050AH;非法指令:050Ah為字,而AL為字節(jié)l寄存器有明確

31、的字節(jié)或字類型,有寄存器參與的指令其操作數(shù)類型就是寄存器的類型l對(duì)于存儲(chǔ)器單元與立即數(shù)同時(shí)作為操作數(shù)的情況,必須顯式指明;byte ptr指示字節(jié)類型,word ptr指示字類型40兩個(gè)操作數(shù)不能都是存儲(chǔ)器兩個(gè)操作數(shù)不能都是存儲(chǔ)器l8086指令系統(tǒng)不允許兩個(gè)操作數(shù)都是存儲(chǔ)單元(除串操作指令),要實(shí)現(xiàn)這種傳送,可通過寄存器間接實(shí)現(xiàn)mov ax,buffer1;axbuffer1(將buffer1內(nèi)容送ax)mov buffer2,ax;buffer2ax;這里buffer1和buffer2是兩個(gè)字變量mov buffer2, buffer1;非法指令41要小心段寄存器的操作要小心段寄存器的操作l

32、不允許立即數(shù)傳送給段寄存器MOV DS,100H;非法指令:立即數(shù)不能傳送段寄存器l不允許直接改變CS值MOV CS,SI;不允許使用的指令l不允許段寄存器之間的直接數(shù)據(jù)傳送MOV DS,ES;非法指令:不允許段寄存器間傳送422 2. 交換指令交換指令 寄存器和寄存器或存儲(chǔ)器單元的數(shù)據(jù)進(jìn)行交換寄存器和寄存器或存儲(chǔ)器單元的數(shù)據(jù)進(jìn)行交換(eXCHanGe):):XCHG reg, memreg注意:段寄存器(注意:段寄存器(Segreg)的內(nèi)容不能交換,目)的內(nèi)容不能交換,目的操作數(shù)只能為寄存器。的操作數(shù)只能為寄存器。43l功能:把兩個(gè)數(shù)據(jù)進(jìn)行互換(目的操作數(shù)必須是寄存器)(目的操作數(shù)必須是寄存

33、器)l寄存器與寄存器之間對(duì)換數(shù)據(jù)寄存器與寄存器之間對(duì)換數(shù)據(jù)l寄存器寄存器與存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)之間對(duì)換數(shù)據(jù)l不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)不能在存儲(chǔ)器與存儲(chǔ)器之間對(duì)換數(shù)據(jù)例題例題例題例題masm舉例44例:寄存器間交換mov ax,1234h;ax=1234hmov bx,5678h;bx=5678hxchg ax,bx ;ax=5678h,bx=1234hxchg ah,al;ax=7856h45例:寄存器與存儲(chǔ)器交換xchg ax,2000h;字交換;等同于 xchg 2000h,ax;但xchg 2000h,ax指令錯(cuò)誤xchg al,2000h ;字節(jié)交換;等同于 xchg 2

34、000h,al;但xchg 2000h,al指令錯(cuò)誤 注意數(shù)據(jù)類型匹配注意數(shù)據(jù)類型匹配463. 堆棧操作指令堆棧操作指令 PUSH,POP 堆棧是按堆棧是按“先進(jìn)后出先進(jìn)后出”原則工作的一段存儲(chǔ)器區(qū)域。原則工作的一段存儲(chǔ)器區(qū)域。8086/80888086/8088系統(tǒng)中,堆棧區(qū)域位于堆棧段,其段地系統(tǒng)中,堆棧區(qū)域位于堆棧段,其段地址由址由SSSS寄存器指示。堆棧操作還與堆棧指針寄存器寄存器指示。堆棧操作還與堆棧指針寄存器SPSP有關(guān),有關(guān),SPSP的內(nèi)容始終為當(dāng)前棧頂所在的存儲(chǔ)單元的內(nèi)容始終為當(dāng)前棧頂所在的存儲(chǔ)單元地址,棧頂將隨進(jìn)?;虺鰲2僮鞫兓?。地址,棧頂將隨進(jìn)棧或出棧操作而變化。堆棧有兩

35、個(gè)基本操作:堆棧有兩個(gè)基本操作:PUSHPUSH(進(jìn)棧)和(進(jìn)棧)和POPPOP(出(出棧)。棧)。PUSHPUSH操作使棧頂向低地址方向移動(dòng),而操作使棧頂向低地址方向移動(dòng),而POPPOP操作則剛好相反;操作則剛好相反;堆棧操作只能作字操作;堆棧操作只能作字操作;SSSS:SPSP在任何時(shí)候都指向當(dāng)前的棧頂。其段地址由在任何時(shí)候都指向當(dāng)前的棧頂。其段地址由SSSS指示,指示,SPSP寄存器作為指針,寄存器作為指針,SPSP內(nèi)容始終指向棧頂內(nèi)容始終指向棧頂所在存儲(chǔ)單元。所在存儲(chǔ)單元。作用:在調(diào)用一個(gè)過程時(shí),保存返回地址;暫時(shí)存作用:在調(diào)用一個(gè)過程時(shí),保存返回地址;暫時(shí)存放寄存器或存儲(chǔ)器單元操作數(shù)

36、的內(nèi)容。放寄存器或存儲(chǔ)器單元操作數(shù)的內(nèi)容。471 1壓入堆棧指令壓入堆棧指令(1)PUPH memreg(2)PUSH Segreg(3)PUSHF2 2彈出堆棧指令彈出堆棧指令(1)POP memreg(2)POP Segreg ;不允許Segreg為CS寄存器(3)POPF48(1)壓入堆棧指令)壓入堆棧指令l語句格式: PUSH OPS(源操作數(shù)) 功能:將寄存器、段寄存器或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧,堆棧指針減2。即:(SP)SP (OPS)158SP (SP)SP (OPS)7 0SPl語句格式: PUSHF 功 能 : 將 標(biāo) 志 寄 存 器 的 內(nèi) 容 壓 入 堆 棧 。 即(

37、FLAGS)(SP)。例題例題49例例已知:已知: (AX)=1122H, (BX)=3344H, (SP)=1010H執(zhí)行指令:執(zhí)行指令:PUSHAXPUSHBX注意SS段中SP及數(shù)據(jù)的變化50(2)彈出堆棧指令)彈出堆棧指令l語句格式: POP OPD(目的操作數(shù)) 功能: 將棧頂元素彈出送至某一寄存器、段寄存器(除CS外)或存儲(chǔ)器,堆棧指針加2。 從POP指令功能可看出,該指令為PUSH指令的逆過程。即:(SP)(OPD)70(SP)+SP (SP)(OPD)158(SP)+SPl語句格式: POPF 功能: 將棧頂內(nèi)容彈出送入標(biāo)志寄存器中, 即(SP)FLAGS。例題例題51例例已知:

38、已知: (AX)=1122H, (BX)=3344H, (SP)=1010H執(zhí)行指令:執(zhí)行指令:PUSHAXPUSHBXPOPAX; (AX)=3344HPOPBX; (BX)=1122H52【例例】將標(biāo)志寄存器的單步標(biāo)志將標(biāo)志寄存器的單步標(biāo)志TF置位。置位。PUSHF;(;(FLSGS)存入當(dāng)前)存入當(dāng)前SP指向的堆棧單元后指向的堆棧單元后SP-2POP AX;將當(dāng)前;將當(dāng)前SP指向的堆棧單元數(shù)據(jù)存入指向的堆棧單元數(shù)據(jù)存入AX后后SP+2OR AX, 0100H;設(shè)置;設(shè)置D8=TF=1,PUSH AX;(;(AX)SP指向的堆棧單元后指向的堆棧單元后SP-2POPF;當(dāng)前;當(dāng)前SP指向的堆

39、棧單元指向的堆棧單元FLAGS后后SP+2 53堆棧堆棧SS:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行PUSH AX之前)之前)堆棧堆棧SS:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行PUSH AX之后)之后)1101H1101H AX堆棧堆棧SS:01F8SS:01FASS:01FCSS:01FESPAA BB(執(zhí)行(執(zhí)行POP AX之后)之后)1101H AX123注意:以字方式寫入注意:以字方式寫入【例例】 PUSH AX POP AXSS段中段中SP及數(shù)據(jù)的變化:及數(shù)據(jù)的變化:544. 地址傳送指令地址傳送指令808

40、88086中有三種地址傳送指令:(1)LEA reg,mem ;將偏址(有效地址)送寄存器(16位地址)(2)LDS reg, mem;regmem(低字),DS mem(高字)(3)LES reg, mem;regmem(低字),ES mem(高字)3232位位地址地址55有效地址傳送指令有效地址傳送指令LEA(load EA)l將存儲(chǔ)器操作數(shù)的有效地址傳送至指定的16位寄存器中例題例題LEA r16,memLEA r16,mem;r16memr16mem的有效地址的有效地址EAEA56例:獲取有效地址mov bx,0400hmov si,3chlea bx,bx+si+0f62h;BX04

41、00h003ch0f62h139EH 獲得主存單元的獲得主存單元的有效地址有效地址EA;不;不是物理地址,也不是該單元的內(nèi)容是物理地址,也不是該單元的內(nèi)容 可以實(shí)現(xiàn)計(jì)算功能可以實(shí)現(xiàn)計(jì)算功能5732位地址傳送指令位地址傳送指令LDS r16,mem;r16mem,;DSmem+2lLDS指令將主存中mem指定的字送至r16,并將mem的下一字送DS寄存器LES r16,mem;r16mem,;ESmem+2lLES指令將主存中mem指定的字送至r16,并將mem的下一字送ES寄存器例題例題58例:地址指針傳送mov word ptr 3060h,0100hmov word ptr 3062h,1

42、450hles di,3060h;es=1450h,di=0100hlds si,3060h;ds=1450h,si=0100h memmem指定主存的連續(xù)指定主存的連續(xù)4 4個(gè)字節(jié)作個(gè)字節(jié)作為邏輯地址(為邏輯地址(3232位的地址),送位的地址),送入入DS:r16DS:r16或或ES:r16ES:r16595. 標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令lLAHF:把標(biāo)志寄存器Flag的低8位傳送到AH寄存器的指定位: D7SF, D6ZF, D4AF, D2PF, D0CF.lSAHF:把AH寄存器的指定位傳送到標(biāo)志寄存器中的S,Z,A,P和C標(biāo)志位,對(duì)OF,DF,IF,TF無影響。從該指令功

43、能可看出,SAHF為LAHF的逆過程。 lPUSHF:把整個(gè)標(biāo)志寄存器(包括全部九個(gè)標(biāo)志)壓入堆棧指令(見前舉例)lPOPF:把棧頂內(nèi)容彈出到標(biāo)志寄存器指令例題例題60【例】標(biāo)志寄存器傳送?!纠繕?biāo)志寄存器傳送。執(zhí)行前:(執(zhí)行前:(FLAGS)=0485H,(,(AX)=0FFFFH執(zhí)行指令:執(zhí)行指令:LAHF ; (AH)=85H ,即(,即(AXAX)=85FFH=85FFH 執(zhí)行前:(執(zhí)行前:(FLAGS)=0485H,(,(AX)=1234H執(zhí)行指令:執(zhí)行指令:SAHF ; (FLAGS)=0412H616. 累加器專用傳送指令累加器專用傳送指令1輸入指令輸入指令 IN2輸出指令輸出指

44、令 OUT3通過通過AL和和BX寄存器進(jìn)行表格查找(寄存器進(jìn)行表格查找(XLAT)62l此指令實(shí)現(xiàn)I/O端口與CPU之間的數(shù)據(jù)傳送。輸入/輸出指令按長度分為長格式和短格式。長格式指令代碼為2個(gè)字節(jié),第二字節(jié)用PORT表示端口號(hào),它指定的端口地址范圍是00至FFH。短格式指令代碼為1個(gè)字節(jié),它指定的端口地址范圍是0000至FFFFH。短格式指令必須將端口地址放入寄存器DX中。IN/OUT指令63l用輸入指令完成從輸入端口到用輸入指令完成從輸入端口到CPU的數(shù)據(jù)傳送。的數(shù)據(jù)傳送。 指令格式:指令格式: 長格式長格式 INAL, PORT;(;(AL)(PORT) INAX, PORT;(;(AX)

45、(PORT+1,PORT)短格式短格式 INAL, DX;(;(AL)(DX) INAX, DX;(;(AX)(DX)+1,(,(DX)l用輸出指令完成從用輸出指令完成從CPU到輸出端口的數(shù)據(jù)傳送。到輸出端口的數(shù)據(jù)傳送。指令格式:指令格式: 長格式長格式 OUT PORT, AL;(;(PORT)(AL) OUT PORT, AX;(;(PORT+1,PORT)(AX)短格式短格式 OUT DX, AL;(;(DX)(AL) OUT DX, AX;(;(DX)+1,DX)(AX)例題例題64例例 INAL, 09 ;(;(AL)09號(hào)端口的內(nèi)容號(hào)端口的內(nèi)容OUT 40H , AL ;(;(40

46、H)(AL)MOV DX, 0600H ;(;(DX)0600HOUT DX, AX ;(;(0601H ,0600H)(AX)注意:注意: l以上以上40H、DX中數(shù)據(jù)均為中數(shù)據(jù)均為I/O地址(或稱設(shè)備號(hào))。地址(或稱設(shè)備號(hào))。l輸入輸入/輸出指令只能使用累加器輸出指令只能使用累加器AL或或AX接收或發(fā)送數(shù)據(jù)。接收或發(fā)送數(shù)據(jù)。l使用短格式指令,必須將端口地址放入寄存器使用短格式指令,必須將端口地址放入寄存器DX中。中。l輸入輸入/輸出指令不影響標(biāo)志位。輸出指令不影響標(biāo)志位。65l換碼指令執(zhí)行前:在主存建立一個(gè)字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼表格首地址存放于BX,AL存放相對(duì)表格首地址的位移

47、量l換碼指令執(zhí)行后:將AL寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼換碼指令換碼指令XLAT(translate)l將BX和AL值的和作為有效地址,其存儲(chǔ)單元中的一個(gè)字節(jié)數(shù)據(jù)取出賦給ALXLATXLAT;alds:bx+alalds:bx+al例題例題66例:代碼轉(zhuǎn)換mov bx,100hmov al,03hxlat ;(AL)DS:103H 換碼指令沒有顯式的操作數(shù),但使用換碼指令沒有顯式的操作數(shù),但使用了了BX和和AL;因?yàn)閾Q碼指令使用了隱含;因?yàn)閾Q碼指令使用了隱含尋址方式尋址方式采用默認(rèn)操作數(shù)采用默認(rèn)操作數(shù)674.3.2 算術(shù)運(yùn)算指令算術(shù)運(yùn)算指令8086 CPU指令系統(tǒng)中,具有完備的加、減、乘、除等算術(shù)

48、運(yùn)算指令,有很強(qiáng)的運(yùn)算能力,它們分別是: 加法指令:加法指令:ADD,ADC,INC 減法指令:減法指令:SUB,SBB,DEC,NEG,CMP 乘法指令:乘法指令:MUL,IMUL 除法指令:除法指令:DIV,IDIV,CBW,CWD 十進(jìn)制調(diào)整指令:十進(jìn)制調(diào)整指令:AAA,DAA,AAS,DAS,AAM,AAD68一、一、 加法指令加法指令1不帶進(jìn)位加法不帶進(jìn)位加法 ADD 2帶進(jìn)位加法帶進(jìn)位加法 ADC3加加1指令指令 INC4調(diào)整調(diào)整ASCII碼加法結(jié)果指令碼加法結(jié)果指令 AAA5相加之后對(duì)累加器的內(nèi)容進(jìn)行十進(jìn)制調(diào)整指相加之后對(duì)累加器的內(nèi)容進(jìn)行十進(jìn)制調(diào)整指令令 DAA指令格式指令格式/

49、舉例舉例指令格式指令格式/舉例舉例指令格式指令格式/舉例舉例指令格式指令格式/舉例舉例指令格式指令格式/舉例舉例691不帶進(jìn)位加法指令A(yù)DD語句格式:ADD OPD, OPS功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,源地址的內(nèi)容不改變。 即(OPD)+(OPS)OPD。注意:不能兩個(gè)操作數(shù)都在存儲(chǔ)器單元;立即數(shù)不能作為OPD。l舉例:70例:加法運(yùn)算mov al,0fbh;al=0fbhadd al,07h;al=02hmov word ptr 200h,4652h;200h=4652hmov bx,1feh;bx=1fehadd al,bl;al=00hadd word ptr

50、bx+2,0f0f0h;200h=3742h71語句格式:語句格式:ADC OPD,OPS功能:將目的操作數(shù)加源操作數(shù)再加低位進(jìn)位,結(jié)果送目功能:將目的操作數(shù)加源操作數(shù)再加低位進(jìn)位,結(jié)果送目的地址。的地址。即(即(OPD)+(OPS)+CF OPD?!纠繜o符號(hào)雙字加法運(yùn)算?!纠繜o符號(hào)雙字加法運(yùn)算。MOV AX,4652H ;(;(AX)=4652HADDAX,0F0F0H;(;(AX)=3742H,CF=1MOV DX,0234H ;(;(DX)=0234HADCDX,0F0F0H;(;(DX)=0F325H,CF=02帶進(jìn)位加法ADC72723加1指令 INC語句格式:INC OPD功能

51、:將目的操作數(shù)加1,結(jié)果送目的地址。即(OPD)+1OPD。INC指令是一個(gè)單操作數(shù)指令,操作數(shù)可以是寄存器或存儲(chǔ)器操作數(shù)。如:INC BX,即(BX)+1BX。加1指令可用于對(duì)計(jì)數(shù)器和地址指針進(jìn)行調(diào)整。 734.調(diào)整ASCII碼加法結(jié)果指令 AAA AAA指令將指令將AL的內(nèi)容變換成一位非壓縮的十進(jìn)制數(shù)。的內(nèi)容變換成一位非壓縮的十進(jìn)制數(shù)。AAA檢檢查查AL低四位,如低四位是低四位,如低四位是0-9的數(shù)字,的數(shù)字,AAA就清除就清除AL的高四的高四位,以及位,以及AF和和CF標(biāo)志;如標(biāo)志;如AL低四位表示的數(shù)大于低四位表示的數(shù)大于9或或AF=1,AAA執(zhí)行:執(zhí)行:加加6到到AL寄存器;寄存器;

52、加加1到到AH寄存器;寄存器;置置AF=1,CF=1;清除清除AL高四位為高四位為0。P95之例:設(shè)之例:設(shè)AX=0535H, BL=39H ADD AL,BL ;AL和和BL中的數(shù)相加中的數(shù)相加 AAA ;非壓縮;非壓縮BCD碼調(diào)整碼調(diào)整 ; 有有AL=04H745相加之后對(duì)累加器的內(nèi)容進(jìn)行十進(jìn)制調(diào)整指令 DAA指令格式:DAA ;AL將AL的加和調(diào)整為壓縮BCD碼l使用DAA或DAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令lDAA和DAS指令對(duì)OF標(biāo)志無定義,按結(jié)果影響其他標(biāo)志,例如CF反映壓縮BCD碼相加或減的進(jìn)位或借位狀態(tài) 對(duì)標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)對(duì)

53、標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(cè)(就是誰也不知道是測(cè)(就是誰也不知道是0還是還是1) 對(duì)標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)對(duì)標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)75例:壓縮BCD加法mov al,68h;al=68h,壓縮BCD碼表示真值68mov bl,28h;bl=28h,壓縮BCD碼表示真值28add al,bl;十六進(jìn)制加法:al=68h+28h=90hDaa ;十進(jìn)制調(diào)整:al=96h;實(shí)現(xiàn)壓縮BCD碼加法:68289676二、二、減法指令減法指令l不包括借位減法不包括借位減法 SUBl帶借位減法(帶借位減法(SUBtract with Borrow) SBBl減

54、減l指令(指令(DECrement) DECl對(duì)對(duì)ASCII碼減法的結(jié)果進(jìn)行調(diào)整指令碼減法的結(jié)果進(jìn)行調(diào)整指令A(yù)AS l兩個(gè)兩個(gè)BCD碼相減之后對(duì)累加器內(nèi)容進(jìn)行十進(jìn)碼相減之后對(duì)累加器內(nèi)容進(jìn)行十進(jìn)制調(diào)整指令制調(diào)整指令 DAS l寄存器或存儲(chǔ)器單元的內(nèi)容求補(bǔ)指令寄存器或存儲(chǔ)器單元的內(nèi)容求補(bǔ)指令(NEGage)指令格式指令格式/舉例舉例指令格式指令格式/舉例舉例指令格式指令格式/舉例舉例指令格式指令格式/舉例舉例77不包括借位減法不包括借位減法 SUB格式:SUB mem/reg,dataSUB mem/reg1, mem/reg2;兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)運(yùn)算結(jié)果影響標(biāo)志位的SF、ZF、PF、

55、CF、OF。溢出OF最高進(jìn)位位 異或 次高進(jìn)位位 P9678帶借位減法帶借位減法 SBBSBB格式:SBB mem/reg,dataSBB mem/reg1, mem/reg2;兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)運(yùn)算結(jié)果影響標(biāo)志位的SF、ZF、PF、CF、OF。減減1 1指令指令 DEC mem/regDEC mem/reg運(yùn)算結(jié)果影響標(biāo)志位的SF、ZF、PF、AF、OF,其CF保持不變。79AAS指令檢查指令檢查AL低四位,如低四位表示的數(shù)是低四位,如低四位表示的數(shù)是0-9的數(shù)字,的數(shù)字,ASS清除清除AL高四位及高四位及CF和和AF標(biāo)志;如標(biāo)志;如AL低四位表示的數(shù)低四位表示的數(shù)大于大于9或或

56、AF=1,AAS進(jìn)行如下調(diào)整:進(jìn)行如下調(diào)整:AL減去6;AH減去1;置AF=1,CF=1;清除AL中高四位。P97之例:AX=0434H SUB AL,35 ;執(zhí)行后AX=04FFH AAS ;執(zhí)行后AX=0309H,AF=CF=1,其余不定對(duì)ASCII碼減法的結(jié)果進(jìn)行調(diào)整指令A(yù)AS 80減法十進(jìn)制調(diào)整 DAS;執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行SUB或SBB指令,減法指令必須把兩個(gè)BCD碼相減,并把結(jié)果存放在AL寄存器中。 兩個(gè)BCD碼相減之后對(duì)累加器內(nèi)容進(jìn)行十進(jìn)制調(diào)整指令 DAS81寄存器或存儲(chǔ)器單元的內(nèi)容求補(bǔ)指令(NEGage)指令格式NEG reg/mem ;reg/mem0re

57、g/memlNEG指令對(duì)操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)l求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1lNEG指令對(duì)標(biāo)志的影響與用零作減法的SUB指令一樣82例:求補(bǔ)運(yùn)算mov ax,0ff64hneg al;ax=0ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1sub al,9dh;ax=0ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1neg ax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1dec al;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1neg ax;ax=0000h,OF=0、SF=0

58、、ZF=1、PF=1、CF=083三、三、乘法指令乘法指令 l無符號(hào)數(shù)乘法指令(無符號(hào)數(shù)乘法指令(Multiplication) MULl帶符號(hào)數(shù)乘法指令(帶符號(hào)數(shù)乘法指令(Integer Multiplication)IMULl對(duì)未組合型對(duì)未組合型BCD碼乘法的結(jié)果進(jìn)行調(diào)整碼乘法的結(jié)果進(jìn)行調(diào)整 AAM84乘法指令乘法指令MUL r8/m8;無符號(hào)字節(jié)乘法;AXALr8/m8MUL r16/m16;無符號(hào)字乘法;DX.AXAXr16/m16IMUL r8/m8;有符號(hào)字節(jié)乘法;AXALr8/m8IMUL r16/m16;有符號(hào)字乘法;DX.AXAXr16/m16例題例題85乘法指令的功能乘法指

59、令的功能l乘法指令分無符號(hào)和有符號(hào)乘法指令l乘法指令的源操作數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX字節(jié)量相乘:AL與r8/m8相乘,得到16位的結(jié)果,存入AX字量相乘:AX與r16/m16相乘,得到32位的結(jié)果,其高字存入DX,低字存入AXl乘法指令利用OF和CF判斷乘積的高一半是否具有有效數(shù)值86乘法指令對(duì)標(biāo)志的影響乘法指令對(duì)標(biāo)志的影響l乘法指令如下影響OF和CF標(biāo)志:MUL指令若乘積的高一半(AH或DX)為0,則OF=CF=0;否則OF=CF=1IMUL指令若乘積的高一半是低一半的符號(hào)擴(kuò)展,則OF=CF=0;否則均為1l乘法指令對(duì)其他狀態(tài)標(biāo)志沒有定義 對(duì)標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志

60、是任對(duì)標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(cè)(誰也不知道是意的、不可預(yù)測(cè)(誰也不知道是0還是還是1) 對(duì)標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)對(duì)標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)MASM舉例87符號(hào)擴(kuò)展的概念符號(hào)擴(kuò)展的概念l符號(hào)擴(kuò)展是指用一個(gè)操作數(shù)的符號(hào)位(即最高位)形成另一個(gè)操作數(shù),后一個(gè)操作數(shù)的各位是全0(正數(shù))或全1(負(fù)數(shù))。符號(hào)擴(kuò)展不改變數(shù)據(jù)大小對(duì)于數(shù)據(jù)64H(表示數(shù)據(jù)100),其最高位D7為0,符號(hào)擴(kuò)展后高8位都是0,成為0064H(仍表示數(shù)據(jù)100)對(duì)于數(shù)據(jù)ff00H(表示有符號(hào)數(shù)256),其最高位D15為1,符號(hào)擴(kuò)展后高16位都是1,成為ffffff00H(仍表示有符號(hào)數(shù)25

溫馨提示

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

評(píng)論

0/150

提交評(píng)論