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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

8、。(4 4注釋注釋n以分號(hào)開(kāi)頭,直到行尾結(jié)束,用來(lái)對(duì)語(yǔ)句或以分號(hào)開(kāi)頭,直到行尾結(jié)束,用來(lái)對(duì)語(yǔ)句或程序的功能加以說(shuō)明,增加程序的可讀性。程序的功能加以說(shuō)明,增加程序的可讀性。n它不是程序的可執(zhí)行部分,在匯編時(shí)不產(chǎn)生它不是程序的可執(zhí)行部分,在匯編時(shí)不產(chǎn)生任何代碼。任何代碼。5.2.4 5.2.4 匯編語(yǔ)言的常數(shù)和表達(dá)式匯編語(yǔ)言的常數(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ù):由單引號(hào)括起來(lái)的字符串常數(shù):由單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符,例如,一個(gè)或多個(gè)字符,例如,I AM I AM A STUDENTA STUDENT。2 2表達(dá)式表達(dá)式n匯編語(yǔ)言中的表達(dá)式分為數(shù)字表達(dá)式和地匯編語(yǔ)言中的表達(dá)式分為數(shù)字表達(dá)式和地址表達(dá)式兩種。址表達(dá)式兩種。n匯編時(shí)對(duì)表達(dá)式進(jìn)行計(jì)算,如果表達(dá)式的匯編時(shí)對(duì)表達(dá)式進(jìn)行計(jì)算,如果表達(dá)式的結(jié)果是一個(gè)數(shù)值,則稱(chēng)為數(shù)字表達(dá)式;結(jié)果是一個(gè)數(shù)值,則稱(chēng)為數(shù)字表達(dá)式;n如果表達(dá)式的結(jié)果是一個(gè)存儲(chǔ)單元的地址,如果表達(dá)式的結(jié)果是一個(gè)存儲(chǔ)單元的地址,則稱(chēng)為地址表達(dá)式。則稱(chēng)為地址表達(dá)式。n表達(dá)式是由操作數(shù)和運(yùn)算符組成的。表達(dá)式是由操作數(shù)和運(yùn)

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

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

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 匯編語(yǔ)言的標(biāo)號(hào)和變量匯編語(yǔ)言的標(biāo)號(hào)和變量1 1標(biāo)號(hào)標(biāo)號(hào)n標(biāo)號(hào)是指令語(yǔ)句的標(biāo)識(shí)符,用來(lái)表示該指令標(biāo)號(hào)是指令語(yǔ)句的標(biāo)識(shí)符,用來(lái)表示該指令所在內(nèi)存單元的地址。所在內(nèi)存單元的地址。n在匯編語(yǔ)言程序中,標(biāo)

13、號(hào)常用在第一條指令、在匯編語(yǔ)言程序中,標(biāo)號(hà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)號(hào)有標(biāo)號(hào)有3 3個(gè)屬性:個(gè)屬性:n段地址段地址SEGSEG):定義標(biāo)號(hào)所在段的起始地址):定義標(biāo)號(hào)所在段的起始地址n偏移地址偏移地址OFFSETOFFSET):定義標(biāo)號(hào)所在位置與段):定義標(biāo)號(hào)所在位置與段的起始地址之間的偏移量;的起始地址之間的偏移量;n類(lèi)型類(lèi)型TYPETYP

14、E):可以是):可以是NEARNEAR段內(nèi)轉(zhuǎn)移或段內(nèi)轉(zhuǎn)移或FARFAR段間轉(zhuǎn)移),一般默認(rèn)為段間轉(zhuǎn)移),一般默認(rèn)為NEARNEAR。2變量n變量主要用來(lái)定義存放在存儲(chǔ)單元中的數(shù)變量主要用來(lái)定義存放在存儲(chǔ)單元中的數(shù)據(jù),一般都在數(shù)據(jù)段或附加段中定義,并據(jù),一般都在數(shù)據(jù)段或附加段中定義,并且在程序中可以隨時(shí)修改其值。且在程序中可以隨時(shí)修改其值。n每個(gè)變量都有一個(gè)變量名,作為存儲(chǔ)單元每個(gè)變量都有一個(gè)變量名,作為存儲(chǔ)單元的名字或符號(hào)地址,的名字或符號(hào)地址,n我們通過(guò)變量名對(duì)存儲(chǔ)單元中的數(shù)據(jù)進(jìn)行我們通過(guò)變量名對(duì)存儲(chǔ)單元中的數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)。訪(fǎng)問(wè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類(lèi)型類(lèi)型TYPETYPE):

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

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

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

19、為單位。個(gè)數(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ù)運(yùn)算符取變量總字節(jié)數(shù)運(yùn)算符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類(lèi)型運(yùn)算符類(lèi)型運(yùn)算符PTRPTRn格式:類(lèi)型格式:類(lèi)型 PTR PTR 變量、標(biāo)號(hào)或表達(dá)式變量、標(biāo)號(hào)或表達(dá)式n功能:對(duì)已定義的變量、標(biāo)號(hào)或表達(dá)式,臨功能:對(duì)已定義的變量、標(biāo)號(hào)或表達(dá)式,臨時(shí)轉(zhuǎn)換其類(lèi)型,類(lèi)型可以是時(shí)轉(zhuǎn)換其類(lèi)型,類(lèi)型可以是BYTEBYTE、WORDWORD、DWORDDWORD、NEARNEAR或或FARFAR。n例如,指令:例如,指令:n MOV AX MOV AX,WORD PTR COUNTWORD PTR COUNTn指的是將變量指的是將變量

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

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

23、能:分離出變量或標(biāo)號(hào)對(duì)應(yīng)的運(yùn)算對(duì)象功能:分離出變量或標(biāo)號(hào)對(duì)應(yīng)的運(yùn)算對(duì)象的高字節(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é)運(yùn)算符取低字節(jié)運(yùn)算符LOWLOWn格式:格式:LOW LOW 變量或標(biāo)號(hào)變量或標(biāo)號(hào)n功能:分離出變量或標(biāo)號(hào)對(duì)應(yīng)的運(yùn)算對(duì)功能:分離出變量或標(biāo)號(hào)對(duì)應(yīng)的運(yùn)算對(duì)象的低字節(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)移運(yùn)算符短轉(zhuǎn)移運(yùn)算符SHORTSHORTn格式:格式:SHORT SHORT 標(biāo)號(hào)標(biāo)號(hào)n功能:說(shuō)明轉(zhuǎn)移指令中的轉(zhuǎn)移為短轉(zhuǎn)移,即功能:說(shuō)明轉(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個(gè)字節(jié)。個(gè)字節(jié)。5.2.7 常用偽指令常用偽指令1 1數(shù)據(jù)定義偽指令數(shù)

25、據(jù)定義偽指令n格式:變量格式:變量 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 表達(dá)式表達(dá)式n功能:為數(shù)據(jù)分配存儲(chǔ)單元,其類(lèi)型由使功能:為數(shù)據(jù)分配存儲(chǔ)單元,其類(lèi)型由使用的數(shù)據(jù)定義偽指令決定,如表用的數(shù)據(jù)定義偽指令決定,如表5-35-3所示。所示。2 2符號(hào)定義偽指令符號(hào)定義偽指令(1 1賦值偽指令賦值偽指令格式:標(biāo)識(shí)符格式:標(biāo)識(shí)符 EQU EQU 表達(dá)式表達(dá)式功能:用一個(gè)標(biāo)識(shí)符來(lái)表示表達(dá)功能:用一個(gè)標(biāo)識(shí)符來(lái)表示表達(dá)式的值,但并不為其分配內(nèi)存單式的值,但并不為其分配內(nèi)存單元。元。EQUEQU偽指令不能對(duì)標(biāo)識(shí)符進(jìn)偽指令不能對(duì)標(biāo)識(shí)符進(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等號(hào)偽指令等號(hào)偽指令n格式:標(biāo)識(shí)符表達(dá)式格式:標(biāo)識(shí)符表達(dá)式n功能:與功能:與EQUEQU的功能相同,且也不分配內(nèi)的功能相同,且也不分配內(nèi)存單元,但存單元,但“=”“=”可以對(duì)同一標(biāo)識(shí)符進(jìn)行可以對(duì)同一標(biāo)識(shí)符進(jìn)行重新定義。重新定義。n例如,可以這樣定義變量例如,可以這樣定義變量COUNTCOUNT:n COUNT COUNT1010n COUNT COUNTCOUNTCOUNT1 1

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

28、DB 5,3,-4,0,-5,-3 ARRAY DB 5,3,-4,0,-5,-3 ; ;定義一個(gè)數(shù)定義一個(gè)數(shù)組組 NUM DB 0,0,0 NUM DB 0,0,0; NUM; NUM中用于存放正數(shù)、中用于存放正數(shù)、零和負(fù)數(shù)的個(gè)數(shù)零和負(fù)數(shù)的個(gè)數(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ù)的個(gè)數(shù)轉(zhuǎn)換為將負(fù)數(shù)的個(gè)數(shù)轉(zhuǎn)換為ASCIIASCII碼碼 MOV DL, NUM2 MOV DL, NUM2;DOS;DOS功

30、能調(diào)用,顯示負(fù)數(shù)的個(gè)數(shù)功能調(diào)用,顯示負(fù)數(shù)的個(gè)數(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過(guò)程過(guò)程 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時(shí)轉(zhuǎn)移到時(shí)轉(zhuǎn)移到ZEROZERO處處 JNS ZHENG JNS ZHENG ; ;結(jié)果為正時(shí)轉(zhuǎn)移到結(jié)果為正時(shí)轉(zhuǎn)移到ZHENGZHENG處處 ADD NUM2, 1 ADD NUM2, 1; ;統(tǒng)計(jì)負(fù)數(shù)的個(gè)數(shù)統(tǒng)計(jì)負(fù)數(shù)的個(gè)數(shù) JMP NEXT JMP NEXT ; ;轉(zhuǎn)移到轉(zhuǎn)移到NEXTNEXT處處ZERO: ADD NUM1, 1ZERO: ADD NUM1, 1; ;統(tǒng)計(jì)統(tǒng)計(jì)0 0的個(gè)數(shù)的個(gè)數(shù) JMP NEXT JMP NEXTZHENG: ADD NUM, 1ZHENG: ADD NUM, 1; ;統(tǒng)計(jì)正數(shù)的個(gè)數(shù)統(tǒng)計(jì)正數(shù)的個(gè)數(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è)計(jì)的基本方法 n5.3.1 匯編程序設(shè)計(jì)的一般步驟 n5.3.2 順序結(jié)構(gòu)程序設(shè)計(jì)n5.3.3 分支結(jié)構(gòu)程序設(shè)計(jì)n5.3.4 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)實(shí)訓(xùn)5-3 求三個(gè)有符號(hào)數(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實(shí)訓(xùn)5-4 冒泡排序法nDSEG SEGMENT ;數(shù)據(jù)段,給變量指定數(shù)據(jù),分配存儲(chǔ)空間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;比較相鄰兩個(gè)數(shù)的大小比較相鄰兩個(gè)數(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)計(jì)數(shù)器環(huán)計(jì)數(shù)器CXn LOOP LOP1;執(zhí)行外層循環(huán)執(zhí)行外層循環(huán)5.4 高級(jí)匯編程序設(shè)計(jì) 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時(shí),二進(jìn)制數(shù)與ASCII碼相差37H JMP EXITASC: ADD AL, 30H ;

溫馨提示

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

評(píng)論

0/150

提交評(píng)論