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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

12、輯值:如果關系為真,則結果為結果為0FFFFH0FFFFH;如果關系為假,則結果為;如果關系為假,則結果為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 匯編語言的標號和變量匯編語言的標號和變量1 1標號標號n標號是指令語句的標識符,用來表示該指令標號是指令語句的標識符,用來表示該指令所在內存單元的地址。所在內存單元的地址。n在匯編語言程序中,標

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

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

15、達式表達式;定義字節(jié)變量;定義字節(jié)變量變量名變量名 DW DW 表達式表達式;定義字變量;定義字變量變量名變量名 DD DD 表達式表達式;定義雙字變量;定義雙字變量變量名變量名 DQ DQ 表達式表達式;定義;定義8 8字節(jié)變量字節(jié)變量變量名變量名 DT DT 表達式表達式;定義;定義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 匯編語言的屬性運算符匯編語言的屬性運算符和表達式和表達式n用來獲取或重新定義變量或標號屬性的運算用來獲取或重新定義變量或標號屬性的運算符稱為屬性運算符。符稱為屬性運算符。(1取地址運

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

18、入SISI。(3 3取類型運算符取類型運算符TYPETYPEn格式:格式:TYPE TYPE 變量或標號變量或標號n功能:返回變量或標號的類型值。如表功能:返回變量或標號的類型值。如表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 變量、標號或表達式變量、標號或表達式n功能:對已定義的變量、標號或表達式,臨功能:對已定義的變量、標號或表達式,臨時轉換其類型,類型可以是時轉換其類型,類型可以是BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR或或FARFAR。n例如,指令:例如,指令:n MOV AX MOV AX,WORD PTR COUNTWORD PTR COUNTn指的是將變量指的是將變量

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

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

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

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

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

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

27、(3 3標號定義偽指令標號定義偽指令n格式:變量或標號格式:變量或標號 LABEL LABEL 類型類型n功能:定義或修改變量或標號的類型。功能:定義或修改變量或標號的類型。n例如,例如,COUNT LABEL BYTECOUNT LABEL BYTEn DB 10 DB 10n功能是定義變量功能是定義變量COUNTCOUNT為字節(jié)型變量,值為為字節(jié)型變量,值為1010。實訓實訓5-2 統(tǒng)計一組數(shù)據(jù)中正數(shù)、統(tǒng)計一組數(shù)據(jù)中正數(shù)、零和負數(shù)的個數(shù)零和負數(shù)的個數(shù) DSEG SEGMENTDSEG SEGMENT; ;數(shù)據(jù)段,給變量指定數(shù)據(jù),分數(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ù)、零和負數(shù)的個數(shù)零和負數(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; ;調用調用COUNTCOUNT子程序子程序 ADD NUM2, 30H ADD NUM2, 30H; ;將負數(shù)的個數(shù)轉換為將負數(shù)的個數(shù)轉換為ASCIIASCII碼碼 MOV DL, NUM2 MOV DL, NUM2;DOS;DOS功

30、能調用,顯示負數(shù)的個數(shù)功能調用,顯示負數(shù)的個數(shù) MOV AH, 02H MOV AH, 02H INT 21H INT 21H MOV AH, 4CH MOV AH, 4CH; ;系統(tǒng)功能調用,結束程序返回系統(tǒng)功能調用,結束程序返回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 ; ;結果為結果為0 0時轉移到時轉移到ZEROZERO處處 JNS ZHENG JNS ZHENG ; ;結果為正時轉移到結果為正時轉移到ZHENGZHENG處處 ADD NUM2, 1 ADD NUM2, 1; ;統(tǒng)計負數(shù)的個數(shù)統(tǒng)計負數(shù)的個數(shù) JMP NEXT JMP NEXT ; ;轉移到轉移到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的內容加的內容加1 1 LOOP LOP LOOP LOP ; ;執(zhí)行循環(huán)執(zhí)行循環(huán)RETRET ; ;返回子程序調用處返回子程序調用處COUNT ENDPCOUNT ENDPCSEG ENDSCSEG ENDS END START END START5.3 匯編程序設計的基本方法 n5.3.1 匯編程序設計的一般步驟 n5.3.2 順序結構程序設計n5.3.3 分支結構程序設計n5.3.4 循環(huá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,則程序轉移至F1n MOV AL, Y;如果XY,將Y送入ALnF1: CMP AL, Z;比較AL中的內容和Z大小n JG F3 ;假設AL)Z,則程序轉移至F3nF2: MOV AL, Z;將AL)Z,將Z送入ALnF3: MOV MAX, AL;將最大值AL送入MAXnMOV AH, 4CH;系統(tǒng)功能調用,結束程序返回DOSn INT 21H實訓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 ;內層循環(huán)內層循環(huán) n CMP AX, SI+2;比較相鄰兩個數(shù)的大小比較相鄰兩個數(shù)的大小n JGE NEXT;若前面的數(shù)大于或相等后面的數(shù),轉若前面的數(shù)大于或相等后面的數(shù),轉移至移至NEXTn XCHG AX, SI+2 ;如前面的數(shù)小于后面的數(shù),如前面的數(shù)小于后面的數(shù),則兩數(shù)交換則兩數(shù)交換n MOV SI, AXnNEXT: ADD

35、 SI, 2;SI增加增加2n DEC CX;修改內層循環(huán)參數(shù)修改內層循環(huán)參數(shù)n JNE LOP2 ;判斷循環(huán)控制條件,是否繼續(xù)執(zhí)行判斷循環(huán)控制條件,是否繼續(xù)執(zhí)行內層循環(huán)內層循環(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 高級匯編程序設計 n5.4.1 使用子程序使用子程序BTH PROC FAR PUSHF;將標志寄存器的內容壓入堆棧 PUSH AX;將寄存器的內容壓入堆棧 PUSH CX MOV CH, 4;將十六進制數(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之間,則程序轉移至ASC ADD AL, 37H;AL在AF時,二進制數(shù)與ASCII碼相差37H JMP EXITASC: ADD AL, 30H ;

溫馨提示

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

評論

0/150

提交評論