微機接口第5章 匯編語言程序設(shè)計ppt課件_第1頁
微機接口第5章 匯編語言程序設(shè)計ppt課件_第2頁
微機接口第5章 匯編語言程序設(shè)計ppt課件_第3頁
微機接口第5章 匯編語言程序設(shè)計ppt課件_第4頁
微機接口第5章 匯編語言程序設(shè)計ppt課件_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微機原理與接口技術(shù)微機原理與接口技術(shù)徐建平徐建平 成貴學(xué)成貴學(xué) 第第5 5章章 匯編語言程序設(shè)計匯編語言程序設(shè)計 【本章內(nèi)容提要】【本章內(nèi)容提要】 n掌握匯編語言程序的編輯、匯編、連接和調(diào)試掌握匯編語言程序的編輯、匯編、連接和調(diào)試n掌握匯編語言的概念、助記符和語句格式,以掌握匯編語言的概念、助記符和語句格式,以及常數(shù)、表達(dá)式、標(biāo)號、變量和運算符的定義及常數(shù)、表達(dá)式、標(biāo)號、變量和運算符的定義和用法和用法n掌握匯編語言的常用偽指令的格式和用法,以掌握匯編語言的常用偽指令的格式和用法,以及源程序的結(jié)構(gòu)及源程序的結(jié)構(gòu)n掌握匯編程序設(shè)計的基本方法掌握匯編程序設(shè)計的基本方法n掌握高級匯編程序設(shè)計方法掌握高

2、級匯編程序設(shè)計方法5.1 匯編語言程序的編輯、匯編語言程序的編輯、匯編、連接和調(diào)試匯編、連接和調(diào)試n5.1.1 源程序編輯器源程序編輯器EDITn5.1.2 匯編程序匯編程序MASM n5.1.3 連接程序連接程序LINK n5.1.4 程序的運行和調(diào)試程序的運行和調(diào)試5.2 5.2 匯編語言入門匯編語言入門 5.2.1 5.2.1 匯編語言概述匯編語言概述 n由于計算機只能識別和執(zhí)行由二進(jìn)制代碼由于計算機只能識別和執(zhí)行由二進(jìn)制代碼組成的機器指令,而這種二進(jìn)制機器語言組成的機器指令,而這種二進(jìn)制機器語言人很難理解人很難理解n于是人們采用字母、符號等來表示機器指于是人們采用字母、符號等來表示機器

3、指令的二進(jìn)制代碼,這就是匯編語言。令的二進(jìn)制代碼,這就是匯編語言。n匯編語言又稱為符號語言。匯編語言又稱為符號語言。5.2.2 5.2.2 匯編語言中的助記符匯編語言中的助記符 三種助記符三種助記符1 1指令助記符指令助記符2 2偽指令助記符偽指令助記符3 3其他助記符其他助記符1指令助記符指令助記符n指令助記符是匯編語言的基本助記符,它指令助記符是匯編語言的基本助記符,它在匯編時被轉(zhuǎn)換成二進(jìn)制的指令代碼在匯編時被轉(zhuǎn)換成二進(jìn)制的指令代碼n每一條指令代碼都對應(yīng)著每一條指令代碼都對應(yīng)著CPUCPU的一種操作。的一種操作。n由指令助記符構(gòu)成的可執(zhí)行語句稱為指令由指令助記符構(gòu)成的可執(zhí)行語句稱為指令語句

4、。語句。n指令系統(tǒng)中的每條指令都是指令語句。指令系統(tǒng)中的每條指令都是指令語句。2 2偽指令助記符偽指令助記符n偽指令助記符是在匯編過程中用來控制匯編偽指令助記符是在匯編過程中用來控制匯編程序的一些特定的助記符程序的一些特定的助記符n它在匯編時不產(chǎn)生機器碼,也不產(chǎn)生任何操它在匯編時不產(chǎn)生機器碼,也不產(chǎn)生任何操作,它在匯編語言源程序中可以構(gòu)成獨立的作,它在匯編語言源程序中可以構(gòu)成獨立的語句。語句。n由偽指令助記符構(gòu)成的語句稱為偽指令語句,由偽指令助記符構(gòu)成的語句稱為偽指令語句,又稱指示性語句。又稱指示性語句。3 3其他助記符其他助記符n在匯編語言中,還有另一些常見的助記符,在匯編語言中,還有另一些

5、常見的助記符,如標(biāo)號、常量、變量和表達(dá)式等,這些助記如標(biāo)號、常量、變量和表達(dá)式等,這些助記符是可以由用戶自己定義的。符是可以由用戶自己定義的。n關(guān)于這些助記符的相關(guān)概念我們將在后面的關(guān)于這些助記符的相關(guān)概念我們將在后面的內(nèi)容中作詳細(xì)介紹。內(nèi)容中作詳細(xì)介紹。5.2.3 5.2.3 匯編語言的語句格式匯編語言的語句格式n匯編語言的語句有指令語句和偽指令語句兩種。匯編語言的語句有指令語句和偽指令語句兩種。n指令語句的格式為:指令語句的格式為:n 標(biāo)號標(biāo)號:指令助記符指令助記符 操作數(shù)操作數(shù), ,操作數(shù)操作數(shù);注釋注釋 n偽指令語句的格式為:偽指令語句的格式為:n 名字名字 偽指令助記符偽指令助記符

6、操作數(shù)操作數(shù),操作數(shù)操作數(shù);注釋注釋 (1 1標(biāo)號和名字標(biāo)號和名字n標(biāo)號可作為指令語句的符號地址,用來代表標(biāo)號可作為指令語句的符號地址,用來代表該指令語句在存儲器中的地址。該指令語句在存儲器中的地址。n偽指令語句中的名字可以是變量名、段名、偽指令語句中的名字可以是變量名、段名、過程名、符號名等,用來代表它們在存儲器過程名、符號名等,用來代表它們在存儲器中的地址。中的地址。n指令語句中的標(biāo)號后面有冒號,而偽指令語指令語句中的標(biāo)號后面有冒號,而偽指令語句中的名字后面是空格。句中的名字后面是空格。 (2 2助記符助記符n助記符是匯編語句中必不可少的部分。助記符是匯編語句中必不可少的部分。n指令助記符

7、規(guī)定了指令語句的操作類型,指令助記符規(guī)定了指令語句的操作類型,n偽指令助記符規(guī)定了偽指令語句的偽操作功偽指令助記符規(guī)定了偽指令語句的偽操作功能。能。(3 3操作數(shù)操作數(shù)n操作數(shù)可以是寄存器、存儲器、常數(shù)、變量、操作數(shù)可以是寄存器、存儲器、常數(shù)、變量、標(biāo)號和表達(dá)式。標(biāo)號和表達(dá)式。n指令語句的操作數(shù)可能是一個、兩個或沒有,指令語句的操作數(shù)可能是一個、兩個或沒有,它們之間用逗號分隔。它們之間用逗號分隔。n偽指令語句的操作數(shù)根據(jù)偽操作命令的不同偽指令語句的操作數(shù)根據(jù)偽操作命令的不同而不同,有的偽指令不允許有操作數(shù),有的而不同,有的偽指令不允許有操作數(shù),有的偽指令允許帶多個操作數(shù)。偽指令允許帶多個操作數(shù)

8、。(4 4注釋注釋n以分號開頭,直到行尾結(jié)束,用來對語句或以分號開頭,直到行尾結(jié)束,用來對語句或程序的功能加以說明,增加程序的可讀性。程序的功能加以說明,增加程序的可讀性。n它不是程序的可執(zhí)行部分,在匯編時不產(chǎn)生它不是程序的可執(zhí)行部分,在匯編時不產(chǎn)生任何代碼。任何代碼。5.2.4 5.2.4 匯編語言的常數(shù)和表達(dá)式匯編語言的常數(shù)和表達(dá)式 1 1常數(shù)常數(shù)數(shù)值常數(shù):可以是二進(jìn)制常數(shù)、數(shù)值常數(shù):可以是二進(jìn)制常數(shù)、八進(jìn)制常數(shù)、十進(jìn)制常和十六八進(jìn)制常數(shù)、十進(jìn)制常和十六進(jìn)制常數(shù)。其中,不同的數(shù)制進(jìn)制常數(shù)。其中,不同的數(shù)制要用后綴表明。例如,要用后綴表明。例如,6BH6BH,10110111B1011011

9、1B等。等。字符串常數(shù):由單引號括起來的字符串常數(shù):由單引號括起來的一個或多個字符,例如,一個或多個字符,例如,I AM I AM A STUDENTA STUDENT。2 2表達(dá)式表達(dá)式n匯編語言中的表達(dá)式分為數(shù)字表達(dá)式和地匯編語言中的表達(dá)式分為數(shù)字表達(dá)式和地址表達(dá)式兩種。址表達(dá)式兩種。n匯編時對表達(dá)式進(jìn)行計算,如果表達(dá)式的匯編時對表達(dá)式進(jìn)行計算,如果表達(dá)式的結(jié)果是一個數(shù)值,則稱為數(shù)字表達(dá)式;結(jié)果是一個數(shù)值,則稱為數(shù)字表達(dá)式;n如果表達(dá)式的結(jié)果是一個存儲單元的地址,如果表達(dá)式的結(jié)果是一個存儲單元的地址,則稱為地址表達(dá)式。則稱為地址表達(dá)式。n表達(dá)式是由操作數(shù)和運算符組成的。表達(dá)式是由操作數(shù)和運

10、算符組成的。n操作數(shù)可以是常數(shù)、標(biāo)號、變量、寄存器操作數(shù)可以是常數(shù)、標(biāo)號、變量、寄存器或表達(dá)式;或表達(dá)式;n運算符有運算符有3 3類,分別是算術(shù)運算符、邏輯運類,分別是算術(shù)運算符、邏輯運算符和關(guān)系運算符,如表算符和關(guān)系運算符,如表5-15-1所示。所示。(1 1算術(shù)運算符算術(shù)運算符n算術(shù)運算符常用于數(shù)字表達(dá)式或地址表達(dá)式算術(shù)運算符常用于數(shù)字表達(dá)式或地址表達(dá)式中,將其用于地址表達(dá)式中時,必須保證運中,將其用于地址表達(dá)式中時,必須保證運算有意義。算有意義。n例如,若例如,若COUNT的偏移地址為的偏移地址為1000H,那,那么么n LEA SI,COUNT+5n等效于:等效于:LEA SI,100

11、5H。(2 2邏輯運算符邏輯運算符n邏輯運算符只能用于數(shù)字表達(dá)式中,不能用于邏輯運算符只能用于數(shù)字表達(dá)式中,不能用于地址表達(dá)式中。地址表達(dá)式中。n運算時是將兩個數(shù)字操作數(shù)分別按位進(jìn)行運算。運算時是將兩個數(shù)字操作數(shù)分別按位進(jìn)行運算。n例如:例如:n MOV AL, 0ABH AND 0FH MOV AL, 0ABH AND 0FHn等效于:等效于:MOV ALMOV AL,0BH0BH。 (3 3關(guān)系運算符關(guān)系運算符n關(guān)系運算符連接的兩個操作數(shù)必須都是數(shù)字關(guān)系運算符連接的兩個操作數(shù)必須都是數(shù)字操作數(shù)或者都是地址操作數(shù)操作數(shù)或者都是地址操作數(shù)n運算結(jié)果是一個邏輯值:如果關(guān)系為真,則運算結(jié)果是一個邏

12、輯值:如果關(guān)系為真,則結(jié)果為結(jié)果為0FFFFH0FFFFH;如果關(guān)系為假,則結(jié)果為;如果關(guān)系為假,則結(jié)果為0 0。n例如:例如:n MOV AX MOV AX,NUM GT 100NUM GT 100,n如果如果NUMNUM大于大于100100,則等效于,則等效于 MOV AX MOV AX,0FFFFH0FFFFHn否則,將等效于否則,將等效于MOV AXMOV AX,0 0。5.2.5 5.2.5 匯編語言的標(biāo)號和變量匯編語言的標(biāo)號和變量1 1標(biāo)號標(biāo)號n標(biāo)號是指令語句的標(biāo)識符,用來表示該指令標(biāo)號是指令語句的標(biāo)識符,用來表示該指令所在內(nèi)存單元的地址。所在內(nèi)存單元的地址。n在匯編語言程序中,標(biāo)

13、號常用在第一條指令、在匯編語言程序中,標(biāo)號常用在第一條指令、轉(zhuǎn)移和循環(huán)的目標(biāo)指令,轉(zhuǎn)移和循環(huán)的目標(biāo)指令,n以及子程序的第一條指令之前,以及子程序的第一條指令之前,n并作為轉(zhuǎn)移指令、循環(huán)指令或子程序調(diào)用指并作為轉(zhuǎn)移指令、循環(huán)指令或子程序調(diào)用指令的操作數(shù),從而確定程序轉(zhuǎn)移的目標(biāo)地址。令的操作數(shù),從而確定程序轉(zhuǎn)移的目標(biāo)地址。 標(biāo)號有標(biāo)號有3 3個屬性:個屬性:n段地址段地址SEGSEG):定義標(biāo)號所在段的起始地址):定義標(biāo)號所在段的起始地址n偏移地址偏移地址OFFSETOFFSET):定義標(biāo)號所在位置與段):定義標(biāo)號所在位置與段的起始地址之間的偏移量;的起始地址之間的偏移量;n類型類型TYPETYP

14、E):可以是):可以是NEARNEAR段內(nèi)轉(zhuǎn)移或段內(nèi)轉(zhuǎn)移或FARFAR段間轉(zhuǎn)移),一般默認(rèn)為段間轉(zhuǎn)移),一般默認(rèn)為NEARNEAR。2變量n變量主要用來定義存放在存儲單元中的數(shù)變量主要用來定義存放在存儲單元中的數(shù)據(jù),一般都在數(shù)據(jù)段或附加段中定義,并據(jù),一般都在數(shù)據(jù)段或附加段中定義,并且在程序中可以隨時修改其值。且在程序中可以隨時修改其值。n每個變量都有一個變量名,作為存儲單元每個變量都有一個變量名,作為存儲單元的名字或符號地址,的名字或符號地址,n我們通過變量名對存儲單元中的數(shù)據(jù)進(jìn)行我們通過變量名對存儲單元中的數(shù)據(jù)進(jìn)行訪問。訪問。變量的定義格式為:變量的定義格式為:變量名變量名 DB DB 表

15、達(dá)式表達(dá)式;定義字節(jié)變量;定義字節(jié)變量變量名變量名 DW DW 表達(dá)式表達(dá)式;定義字變量;定義字變量變量名變量名 DD DD 表達(dá)式表達(dá)式;定義雙字變量;定義雙字變量變量名變量名 DQ DQ 表達(dá)式表達(dá)式;定義;定義8 8字節(jié)變量字節(jié)變量變量名變量名 DT DT 表達(dá)式表達(dá)式;定義;定義1010字節(jié)變量字節(jié)變量變量具有變量具有5 5種屬性:種屬性:n段地址段地址SEGSEG):定義變量所在段的起始地址;):定義變量所在段的起始地址;n偏移地址偏移地址OFFSETOFFSET):定義變量的位置與段的起始):定義變量的位置與段的起始地址之間的偏移量;地址之間的偏移量;n類型類型TYPETYPE):

16、定義變量所占存儲單元的字節(jié)數(shù),):定義變量所占存儲單元的字節(jié)數(shù),用用DBDB、DWDW和和DDDD偽指令定義的變量類型分別是字節(jié)偽指令定義的變量類型分別是字節(jié)BYTEBYTE)、字)、字WORDWORD和雙字和雙字DWORDDWORD)。)。n長度長度LENGTHLENGTH):定義變量的個數(shù)。):定義變量的個數(shù)。n大小大小SIZESIZE):分配給變量的總字節(jié)數(shù)。):分配給變量的總字節(jié)數(shù)。5.2.6 5.2.6 匯編語言的屬性運算符匯編語言的屬性運算符和表達(dá)式和表達(dá)式n用來獲取或重新定義變量或標(biāo)號屬性的運算用來獲取或重新定義變量或標(biāo)號屬性的運算符稱為屬性運算符。符稱為屬性運算符。(1取地址運

17、算符取地址運算符SEGn格式:格式:SEG 變量或標(biāo)號變量或標(biāo)號n功能:返回變量或標(biāo)號的段地址。功能:返回變量或標(biāo)號的段地址。n例如,例如,n MOV AX,SEG COUNTn指的是將變量指的是將變量COUNT的段地址送入的段地址送入AX。(2 2取偏移地址運算符取偏移地址運算符OFFSETOFFSETn格式:格式:OFFSET OFFSET 變量或標(biāo)號變量或標(biāo)號n功能:返回變量或標(biāo)號的偏移地址。功能:返回變量或標(biāo)號的偏移地址。n例如,例如,n MOV SI MOV SI,OFFSET COUNTOFFSET COUNTn指的是將變量指的是將變量COUNTCOUNT的偏移地址送入的偏移地址送

18、入SISI。(3 3取類型運算符取類型運算符TYPETYPEn格式:格式:TYPE TYPE 變量或標(biāo)號變量或標(biāo)號n功能:返回變量或標(biāo)號的類型值。如表功能:返回變量或標(biāo)號的類型值。如表5-25-2所示。所示。n例如,指令:例如,指令:n MOV AX MOV AX,TYPE COUNTTYPE COUNTn指的是將變量指的是將變量COUNTCOUNT的類型值送入的類型值送入AXAX。(4 4取變量長度運算符取變量長度運算符LENGTHLENGTHn格式:格式:LENGTH LENGTH 變量變量n功能:返回變量的長度即變量中元素的功能:返回變量的長度即變量中元素的個數(shù)),可以是以字節(jié)、字或雙字

19、為單位。個數(shù)),可以是以字節(jié)、字或雙字為單位。n例如,定義例如,定義n COUNT DW 100 DUP(1) COUNT DW 100 DUP(1),n則則LENGTH COUNTLENGTH COUNT的值為的值為100100。n再如,定義再如,定義n BUFF DD 1 BUFF DD 1,2 2,3 3n則則LENGTH BUFFLENGTH BUFF的值為的值為1 1。(5 5取變量總字節(jié)數(shù)運算符取變量總字節(jié)數(shù)運算符SIZESIZEn格式:格式:SIZE SIZE 變量變量n功能:返回變量所包含的總字節(jié)數(shù)。功能:返回變量所包含的總字節(jié)數(shù)。n例如,定義例如,定義n COUNT DW 1

20、00 DUP(1) COUNT DW 100 DUP(1)nSIZE COUNTSIZE COUNT的值為的值為200200。(6 6類型運算符類型運算符PTRPTRn格式:類型格式:類型 PTR PTR 變量、標(biāo)號或表達(dá)式變量、標(biāo)號或表達(dá)式n功能:對已定義的變量、標(biāo)號或表達(dá)式,臨功能:對已定義的變量、標(biāo)號或表達(dá)式,臨時轉(zhuǎn)換其類型,類型可以是時轉(zhuǎn)換其類型,類型可以是BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR或或FARFAR。n例如,指令:例如,指令:n MOV AX MOV AX,WORD PTR COUNTWORD PTR COUNTn指的是將變量指的是將變量

21、COUNTCOUNT臨時轉(zhuǎn)換成字類型。臨時轉(zhuǎn)換成字類型。(7 7類型定義運算符類型定義運算符THISTHISn格式:變量或標(biāo)號格式:變量或標(biāo)號 EQU THIS EQU THIS 類型類型n功能:指定變量或標(biāo)號的類型,但不為其功能:指定變量或標(biāo)號的類型,但不為其分配存儲單元,所定義變量的段地址和偏分配存儲單元,所定義變量的段地址和偏移地址與下一個存儲單元地址相同。移地址與下一個存儲單元地址相同。n例如,例如,nCOUNT EQU THIS BYTEnRESULT DW 100 DUP (?)n該語句定義該語句定義COUNT為字節(jié)類型,其地址為字節(jié)類型,其地址與與RESULT完全相同。留意,這里

22、完全相同。留意,這里RESULT是字型類型。是字型類型。 (8 8段超越前綴:段超越前綴:n格式:段寄存器名格式:段寄存器名: :變量、標(biāo)號或地址表達(dá)式變量、標(biāo)號或地址表達(dá)式n功能:給變量、標(biāo)號或地址表達(dá)式臨時指定功能:給變量、標(biāo)號或地址表達(dá)式臨時指定一個段屬性。一個段屬性。n例如,指令:例如,指令:n MOV AX MOV AX,ES:1000HES:1000Hn指的是將附加段中偏移地址為指的是將附加段中偏移地址為1000H1000H的內(nèi)存單的內(nèi)存單元的內(nèi)容送入元的內(nèi)容送入AXAX。(9 9取高字節(jié)運算符取高字節(jié)運算符HIGHHIGHn格式:格式:HIGH HIGH 變量或標(biāo)號變量或標(biāo)號n功

23、能:分離出變量或標(biāo)號對應(yīng)的運算對象功能:分離出變量或標(biāo)號對應(yīng)的運算對象的高字節(jié)。的高字節(jié)。n例如,指令:例如,指令:n DATA EQU 1234H DATA EQU 1234Hn那么那么 MOV AL,HIGH DATA MOV AL,HIGH DATA n結(jié)果結(jié)果: :(ALAL)=12H=12H。(1010取低字節(jié)運算符取低字節(jié)運算符LOWLOWn格式:格式:LOW LOW 變量或標(biāo)號變量或標(biāo)號n功能:分離出變量或標(biāo)號對應(yīng)的運算對功能:分離出變量或標(biāo)號對應(yīng)的運算對象的低字節(jié)。象的低字節(jié)。n例如,指令:例如,指令:n DATA EQU 1234H DATA EQU 1234Hn那么那么 M

24、OV AL,LOW DATA MOV AL,LOW DATAn的結(jié)果為的結(jié)果為ALAL)=34H=34H。 (1111短轉(zhuǎn)移運算符短轉(zhuǎn)移運算符SHORTSHORTn格式:格式:SHORT SHORT 標(biāo)號標(biāo)號n功能:說明轉(zhuǎn)移指令中的轉(zhuǎn)移為短轉(zhuǎn)移,即功能:說明轉(zhuǎn)移指令中的轉(zhuǎn)移為短轉(zhuǎn)移,即目標(biāo)地址與本指令之間的距離在目標(biāo)地址與本指令之間的距離在-128127-128127字字節(jié)范圍內(nèi)。節(jié)范圍內(nèi)。n例如,指令:例如,指令:n JMP SHORT NEXT JMP SHORT NEXT,n限制轉(zhuǎn)移范圍小于限制轉(zhuǎn)移范圍小于128128個字節(jié)。個字節(jié)。5.2.7 常用偽指令常用偽指令1 1數(shù)據(jù)定義偽指令數(shù)

25、據(jù)定義偽指令n格式:變量格式:變量 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 表達(dá)式表達(dá)式n功能:為數(shù)據(jù)分配存儲單元,其類型由使功能:為數(shù)據(jù)分配存儲單元,其類型由使用的數(shù)據(jù)定義偽指令決定,如表用的數(shù)據(jù)定義偽指令決定,如表5-35-3所示。所示。2 2符號定義偽指令符號定義偽指令(1 1賦值偽指令賦值偽指令格式:標(biāo)識符格式:標(biāo)識符 EQU EQU 表達(dá)式表達(dá)式功能:用一個標(biāo)識符來表示表達(dá)功能:用一個標(biāo)識符來表示表達(dá)式的值,但并不為其分配內(nèi)存單式的值,但并不為其分配內(nèi)存單元。元。EQUEQU偽指令不能對標(biāo)識符進(jìn)偽指令不能對標(biāo)識符進(jìn)行再定義。行再定義。n例如,例如,n COUNT EQU 10 COUNT EQ

26、U 10n表示給表示給COUNTCOUNT賦值為賦值為1010;n NUM EQU TABBX NUM EQU TABBX33n表示將表達(dá)式表示將表達(dá)式TABBXTABBX33的值賦值給的值賦值給NUMNUM。(2 2等號偽指令等號偽指令n格式:標(biāo)識符表達(dá)式格式:標(biāo)識符表達(dá)式n功能:與功能:與EQUEQU的功能相同,且也不分配內(nèi)的功能相同,且也不分配內(nèi)存單元,但存單元,但“=”“=”可以對同一標(biāo)識符進(jìn)行可以對同一標(biāo)識符進(jìn)行重新定義。重新定義。n例如,可以這樣定義變量例如,可以這樣定義變量COUNTCOUNT:n COUNT COUNT1010n COUNT COUNTCOUNTCOUNT1 1

27、(3 3標(biāo)號定義偽指令標(biāo)號定義偽指令n格式:變量或標(biāo)號格式:變量或標(biāo)號 LABEL LABEL 類型類型n功能:定義或修改變量或標(biāo)號的類型。功能:定義或修改變量或標(biāo)號的類型。n例如,例如,COUNT LABEL BYTECOUNT LABEL BYTEn DB 10 DB 10n功能是定義變量功能是定義變量COUNTCOUNT為字節(jié)型變量,值為為字節(jié)型變量,值為1010。實訓(xùn)實訓(xùn)5-2 統(tǒng)計一組數(shù)據(jù)中正數(shù)、統(tǒng)計一組數(shù)據(jù)中正數(shù)、零和負(fù)數(shù)的個數(shù)零和負(fù)數(shù)的個數(shù) DSEG SEGMENTDSEG SEGMENT; ;數(shù)據(jù)段,給變量指定數(shù)據(jù),分?jǐn)?shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲空間配存儲空間 ARRAY

28、DB 5,3,-4,0,-5,-3 ARRAY DB 5,3,-4,0,-5,-3 ; ;定義一個數(shù)定義一個數(shù)組組 NUM DB 0,0,0 NUM DB 0,0,0; NUM; NUM中用于存放正數(shù)、中用于存放正數(shù)、零和負(fù)數(shù)的個數(shù)零和負(fù)數(shù)的個數(shù)DSEG ENDSDSEG ENDSSSEG SEGMENTSSEG SEGMENT; ;堆棧段堆棧段 DB 100 DUP(0) DB 100 DUP(0)SSEG ENDSSSEG ENDSCSEG SEGMENTCSEG SEGMENT; ;代碼段代碼段 ASSUME CS: CSEG, DS: DSEG, SS: SSEG ASSUME CS:

29、 CSEG, DS: DSEG, SS: SSEGSTART: MOV AX, DSEGSTART: MOV AX, DSEG ; ;將數(shù)據(jù)段基址裝入數(shù)據(jù)段寄存器將數(shù)據(jù)段基址裝入數(shù)據(jù)段寄存器 MOV DS, AX MOV DS, AX MOV SI, 0 MOV SI, 0; ;將將SISI的初值置為的初值置為0 0 CALL COUNT CALL COUNT; ;調(diào)用調(diào)用COUNTCOUNT子程序子程序 ADD NUM2, 30H ADD NUM2, 30H; ;將負(fù)數(shù)的個數(shù)轉(zhuǎn)換為將負(fù)數(shù)的個數(shù)轉(zhuǎn)換為ASCIIASCII碼碼 MOV DL, NUM2 MOV DL, NUM2;DOS;DOS功

30、能調(diào)用,顯示負(fù)數(shù)的個數(shù)功能調(diào)用,顯示負(fù)數(shù)的個數(shù) MOV AH, 02H MOV AH, 02H INT 21H INT 21H MOV AH, 4CH MOV AH, 4CH; ;系統(tǒng)功能調(diào)用,結(jié)束程序返回系統(tǒng)功能調(diào)用,結(jié)束程序返回DOSDOS INT 21H INT 21HCOUNT PROC NEARCOUNT PROC NEAR ;COUNT ;COUNT過程過程 MOV CX, 6 MOV CX, 6 ; ;將循環(huán)的次數(shù)送入將循環(huán)的次數(shù)送入CXCX LOP: CMP ARRAYSI, 0 LOP: CMP ARRAYSI, 0; ;將數(shù)組中的各元素與將數(shù)組中的各元素與0 0比較比較 J

31、Z ZERO JZ ZERO ; ;結(jié)果為結(jié)果為0 0時轉(zhuǎn)移到時轉(zhuǎn)移到ZEROZERO處處 JNS ZHENG JNS ZHENG ; ;結(jié)果為正時轉(zhuǎn)移到結(jié)果為正時轉(zhuǎn)移到ZHENGZHENG處處 ADD NUM2, 1 ADD NUM2, 1; ;統(tǒng)計負(fù)數(shù)的個數(shù)統(tǒng)計負(fù)數(shù)的個數(shù) JMP NEXT JMP NEXT ; ;轉(zhuǎn)移到轉(zhuǎn)移到NEXTNEXT處處ZERO: ADD NUM1, 1ZERO: ADD NUM1, 1; ;統(tǒng)計統(tǒng)計0 0的個數(shù)的個數(shù) JMP NEXT JMP NEXTZHENG: ADD NUM, 1ZHENG: ADD NUM, 1; ;統(tǒng)計正數(shù)的個數(shù)統(tǒng)計正數(shù)的個數(shù)NEXT:

32、 INC SINEXT: INC SI ;SI ;SI的內(nèi)容加的內(nèi)容加1 1 LOOP LOP LOOP LOP ; ;執(zhí)行循環(huán)執(zhí)行循環(huán)RETRET ; ;返回子程序調(diào)用處返回子程序調(diào)用處COUNT ENDPCOUNT ENDPCSEG ENDSCSEG ENDS END START END START5.3 匯編程序設(shè)計的基本方法 n5.3.1 匯編程序設(shè)計的一般步驟 n5.3.2 順序結(jié)構(gòu)程序設(shè)計n5.3.3 分支結(jié)構(gòu)程序設(shè)計n5.3.4 循環(huán)結(jié)構(gòu)程序設(shè)計實訓(xùn)5-3 求三個有符號數(shù)中的最大數(shù) nSTART: MOV AX, DSEG;將數(shù)據(jù)段基址裝入數(shù)據(jù)段寄存器n MOV DS, AXn

33、MOV AL, X;將X送入ALn CMP AL, Y;比較X和Y大小n JG F1 ;如果XY,則程序轉(zhuǎn)移至F1n MOV AL, Y;如果XY,將Y送入ALnF1: CMP AL, Z;比較AL中的內(nèi)容和Z大小n JG F3 ;假設(shè)AL)Z,則程序轉(zhuǎn)移至F3nF2: MOV AL, Z;將AL)Z,將Z送入ALnF3: MOV MAX, AL;將最大值A(chǔ)L送入MAXnMOV AH, 4CH;系統(tǒng)功能調(diào)用,結(jié)束程序返回DOSn INT 21H實訓(xùn)5-4 冒泡排序法nDSEG SEGMENT ;數(shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲空間n DATA DW 1, -8, -6, 8, 0n N ($D

34、ATA)/2nDSEG ENDSn MOV CX, N;將外層循環(huán)的次數(shù)送入將外層循環(huán)的次數(shù)送入CXn DEC CXn LOP1: LEA SI, DATA ;外層循環(huán)外層循環(huán)n MOV DX, CX;保存保存CX中的值中的值nLOP2: MOV AX, SI ;內(nèi)層循環(huán)內(nèi)層循環(huán) n CMP AX, SI+2;比較相鄰兩個數(shù)的大小比較相鄰兩個數(shù)的大小n JGE NEXT;若前面的數(shù)大于或相等后面的數(shù),轉(zhuǎn)若前面的數(shù)大于或相等后面的數(shù),轉(zhuǎn)移至移至NEXTn XCHG AX, SI+2 ;如前面的數(shù)小于后面的數(shù),如前面的數(shù)小于后面的數(shù),則兩數(shù)交換則兩數(shù)交換n MOV SI, AXnNEXT: ADD

35、 SI, 2;SI增加增加2n DEC CX;修改內(nèi)層循環(huán)參數(shù)修改內(nèi)層循環(huán)參數(shù)n JNE LOP2 ;判斷循環(huán)控制條件,是否繼續(xù)執(zhí)行判斷循環(huán)控制條件,是否繼續(xù)執(zhí)行內(nèi)層循環(huán)內(nèi)層循環(huán)n MOV CX, DX;將外層循環(huán)次數(shù)重新送入循將外層循環(huán)次數(shù)重新送入循環(huán)計數(shù)器環(huán)計數(shù)器CXn LOOP LOP1;執(zhí)行外層循環(huán)執(zhí)行外層循環(huán)5.4 高級匯編程序設(shè)計 n5.4.1 使用子程序使用子程序BTH PROC FAR PUSHF;將標(biāo)志寄存器的內(nèi)容壓入堆棧 PUSH AX;將寄存器的內(nèi)容壓入堆棧 PUSH CX MOV CH, 4;將十六進(jìn)制數(shù)位數(shù)存入CHCONV:MOV CL, 4;將移位次數(shù)存入CL ROL BX, CL;將BX中的數(shù)循環(huán)左移4位,將最高4位移至最低4位 MOV AL, BL;將BX的低8位存入AL AND AL, 0FH;使AL中保存BX的最低4位 CMP AL, 09H;判斷AL是否在09之間 JLE ASC;是在09之間,則程序轉(zhuǎn)移至ASC ADD AL, 37H;AL在AF時,二進(jìn)制數(shù)與ASCII碼相差37H JMP EXITASC: ADD AL, 30H ;

溫馨提示

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

評論

0/150

提交評論