四章匯編語(yǔ)言程序設(shè)計(jì)ppt課件_第1頁(yè)
四章匯編語(yǔ)言程序設(shè)計(jì)ppt課件_第2頁(yè)
四章匯編語(yǔ)言程序設(shè)計(jì)ppt課件_第3頁(yè)
四章匯編語(yǔ)言程序設(shè)計(jì)ppt課件_第4頁(yè)
四章匯編語(yǔ)言程序設(shè)計(jì)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩93頁(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、第四章第四章 匯編言語(yǔ)程序設(shè)計(jì)匯編言語(yǔ)程序設(shè)計(jì) 第四章第四章 匯編言語(yǔ)程序設(shè)計(jì)匯編言語(yǔ)程序設(shè)計(jì) 4.2 4.2 偽指令偽指令4.3 4.3 匯編言語(yǔ)程序的構(gòu)造匯編言語(yǔ)程序的構(gòu)造 4.4 4.4 匯編言語(yǔ)程序的開(kāi)發(fā)過(guò)程匯編言語(yǔ)程序的開(kāi)發(fā)過(guò)程4.5 4.5 匯編言語(yǔ)程序構(gòu)造設(shè)計(jì)匯編言語(yǔ)程序構(gòu)造設(shè)計(jì) 4.6 4.6 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用4.7 4.7 匯編言語(yǔ)設(shè)計(jì)實(shí)例匯編言語(yǔ)設(shè)計(jì)實(shí)例4.1 4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句 在了解和熟習(xí)了86系列指令系統(tǒng)的根底上,本章將引見(jiàn)宏匯編言語(yǔ)程序的構(gòu)造,偽指令,以及程序設(shè)計(jì)的普經(jīng)過(guò)程和各種根本程序構(gòu)造,然后引見(jiàn)了系統(tǒng)功能調(diào)用,最后給出大量

2、的編程實(shí)例。 4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句 語(yǔ)句是匯編言語(yǔ)源程序的根本組成單位。一個(gè)匯編言語(yǔ)源程序中有3種根本語(yǔ)句:指令語(yǔ)句、偽指令語(yǔ)句和宏指令語(yǔ)句。前兩種是最常見(jiàn)、最根本的語(yǔ)句。指令語(yǔ)句和偽指令語(yǔ)句不僅在程序中的功能不同,而且實(shí)現(xiàn)其功能的方法和時(shí)間也是不同的。1、指令語(yǔ)句 指令語(yǔ)句就是計(jì)算機(jī)中指令系統(tǒng)的各條指令,每條指令語(yǔ)句在匯編時(shí)都產(chǎn)生一個(gè)供CPU執(zhí)行的機(jī)器目的代碼。 計(jì)算機(jī)中每條指令語(yǔ)句表示一種根本功能,這些根本功能是在程序運(yùn)轉(zhuǎn)期間由計(jì)算機(jī)硬件來(lái)實(shí)現(xiàn)的。一條指令語(yǔ)句由四個(gè)字段組成,其普通格式如下: 標(biāo)號(hào):指令助記符操作數(shù);注釋一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式2

3、 2、偽指令語(yǔ)句、偽指令語(yǔ)句 偽指令語(yǔ)句指示匯編程序在匯編源程序時(shí)完成某些任偽指令語(yǔ)句指示匯編程序在匯編源程序時(shí)完成某些任務(wù),比如完成數(shù)據(jù)定義、分配存儲(chǔ)區(qū)、指示程序終了等。務(wù),比如完成數(shù)據(jù)定義、分配存儲(chǔ)區(qū)、指示程序終了等。 偽指令屬于匯編控制命令,它所指示的操作是由匯編偽指令屬于匯編控制命令,它所指示的操作是由匯編程序在匯編源程序時(shí)完成的,在匯編時(shí),它不產(chǎn)生目的代程序在匯編源程序時(shí)完成的,在匯編時(shí),它不產(chǎn)生目的代碼,在將源程序匯編成目的程序后,它就不復(fù)存在了。碼,在將源程序匯編成目的程序后,它就不復(fù)存在了。 由上可知,偽指令語(yǔ)句與指令語(yǔ)句的主要區(qū)別是:偽由上可知,偽指令語(yǔ)句與指令語(yǔ)句的主要區(qū)別

4、是:偽指令語(yǔ)句經(jīng)匯編后不產(chǎn)活力器目的代碼,而指令語(yǔ)句經(jīng)匯指令語(yǔ)句經(jīng)匯編后不產(chǎn)活力器目的代碼,而指令語(yǔ)句經(jīng)匯編后將產(chǎn)生相應(yīng)的機(jī)器目的代碼;偽指令語(yǔ)句所指示的操編后將產(chǎn)生相應(yīng)的機(jī)器目的代碼;偽指令語(yǔ)句所指示的操作是在程序匯編時(shí)完成的,而指令語(yǔ)句的操作必需在程序作是在程序匯編時(shí)完成的,而指令語(yǔ)句的操作必需在程序運(yùn)轉(zhuǎn)時(shí)才干完成。一條偽指令語(yǔ)句也由四個(gè)字段組成,其運(yùn)轉(zhuǎn)時(shí)才干完成。一條偽指令語(yǔ)句也由四個(gè)字段組成,其普通格式如下:普通格式如下: 符號(hào)名符號(hào)名 偽指令符操作數(shù)偽指令符操作數(shù) ;注釋?zhuān)蛔⑨?4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式1 1符號(hào)名符號(hào)名

5、 符號(hào)名在偽指令語(yǔ)句中是一個(gè)可選項(xiàng),符號(hào)名后面沒(méi)有符號(hào)名在偽指令語(yǔ)句中是一個(gè)可選項(xiàng),符號(hào)名后面沒(méi)有冒號(hào),符號(hào)名可以是常量名、變量名、過(guò)程名等。冒號(hào),符號(hào)名可以是常量名、變量名、過(guò)程名等。2 2偽指令符偽指令符偽指令符指定匯編程序要完成的詳細(xì)操作,它是偽指令語(yǔ)偽指令符指定匯編程序要完成的詳細(xì)操作,它是偽指令語(yǔ)句的中心部分,如數(shù)據(jù)定義偽指令句的中心部分,如數(shù)據(jù)定義偽指令DBDB、DWDW、DDDD,段定義偽指,段定義偽指令令SEGMENTSEGMENT,定義過(guò)程偽指令,定義過(guò)程偽指令PROCPROC等等。等等。3 3操作數(shù)操作數(shù) 偽指令中的操作數(shù)可以是常數(shù)、字符串、變量、表達(dá)式,偽指令中的操作數(shù)可

6、以是常數(shù)、字符串、變量、表達(dá)式,其個(gè)數(shù)由詳細(xì)的偽指令決議,各個(gè)操作數(shù)之間用其個(gè)數(shù)由詳細(xì)的偽指令決議,各個(gè)操作數(shù)之間用“,分隔。,分隔。4 4注釋注釋 偽指令語(yǔ)句的注釋也是可選項(xiàng),需求時(shí)必需以偽指令語(yǔ)句的注釋也是可選項(xiàng),需求時(shí)必需以“;開(kāi)場(chǎng)。;開(kāi)場(chǎng)。 4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式3 3、標(biāo)識(shí)符、標(biāo)識(shí)符 指令語(yǔ)句中的標(biāo)號(hào)和偽指令語(yǔ)句中的符號(hào)名指令語(yǔ)句中的標(biāo)號(hào)和偽指令語(yǔ)句中的符號(hào)名統(tǒng)稱(chēng)為標(biāo)識(shí)符。它們由假設(shè)干字符組成,標(biāo)識(shí)符統(tǒng)稱(chēng)為標(biāo)識(shí)符。它們由假設(shè)干字符組成,標(biāo)識(shí)符的組成規(guī)那么如下:的組成規(guī)那么如下:1 1一個(gè)標(biāo)識(shí)符由一個(gè)標(biāo)識(shí)符由1-31-3

7、個(gè)字符組成。個(gè)字符組成。2 2組成標(biāo)識(shí)符的字符可以是字母組成標(biāo)識(shí)符的字符可以是字母A-ZA-Z或或a-a-z z、數(shù)字、數(shù)字0-90-9、公用字符、公用字符“?、?、“、“、“$ $、“下劃線(xiàn)下劃線(xiàn)_ _。3 3除數(shù)字外,上述其他字符均可作為標(biāo)識(shí)符的除數(shù)字外,上述其他字符均可作為標(biāo)識(shí)符的首字符,首字符,“只能作為標(biāo)識(shí)符的首字符。只能作為標(biāo)識(shí)符的首字符。4 4不能運(yùn)用屬于系統(tǒng)的公用保管字。不能運(yùn)用屬于系統(tǒng)的公用保管字。4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式一、匯編言語(yǔ)語(yǔ)句種類(lèi)及其格式二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符標(biāo)號(hào)標(biāo)號(hào) 指令指令 存放器存放器 闡明程序或

8、語(yǔ)句闡明程序或語(yǔ)句變量變量 偽指令偽指令 標(biāo)號(hào)標(biāo)號(hào) 的功能的功能 宏指令宏指令 變量變量 常數(shù)常數(shù) 表達(dá)式表達(dá)式源程序的每條語(yǔ)句可表示為:源程序的每條語(yǔ)句可表示為: 名字名字 操作碼操作碼 操作數(shù)操作數(shù) ; ; 注釋注釋 4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句1、常量、常量常量是沒(méi)有任何屬性的純數(shù)值,它的值在匯編期間已能完全常量是沒(méi)有任何屬性的純數(shù)值,它的值在匯編期間已能完全確定,且在程序運(yùn)轉(zhuǎn)中也不會(huì)發(fā)生變化。常量分為數(shù)值常量、字確定,且在程序運(yùn)轉(zhuǎn)中也不會(huì)發(fā)生變化。常量分為數(shù)值常量、字符串常量和符號(hào)常量,它主要用于指令語(yǔ)句中的立刻數(shù)或偽指令符串常量和符號(hào)常量,它主要用于指令語(yǔ)句中的立刻數(shù)或偽指令語(yǔ)句

9、中給變量賦初值等。語(yǔ)句中給變量賦初值等。1數(shù)值常量數(shù)值常量數(shù)值常量分為整數(shù)和實(shí)數(shù)。數(shù)值常量分為整數(shù)和實(shí)數(shù)。例如:例如:11100011B ,45693 ,0FF2AH ,356703Q都是正確都是正確的整數(shù)方式,的整數(shù)方式,又如:又如:543.567,45.23,1.2E2,45.4E9都是正確都是正確的實(shí)數(shù)方式。的實(shí)數(shù)方式。2字符串常量字符串常量字符串常量是用單引號(hào)括起來(lái)的一個(gè)字符或多個(gè)字符。字符字符串常量是用單引號(hào)括起來(lái)的一個(gè)字符或多個(gè)字符。字符串常量以單引號(hào)中各字符的串常量以單引號(hào)中各字符的ASCII碼方式存儲(chǔ)在內(nèi)存中,如碼方式存儲(chǔ)在內(nèi)存中,如H,在內(nèi)存中就是在內(nèi)存中就是41H,12就是

10、就是31H,32H。運(yùn)用時(shí)可在單引號(hào)內(nèi)直。運(yùn)用時(shí)可在單引號(hào)內(nèi)直接寫(xiě)字符序列,如接寫(xiě)字符序列,如12AB,也可寫(xiě)字符的,也可寫(xiě)字符的ASCII碼,碼,ASCII碼之碼之間用逗號(hào)分隔此時(shí)不需求用單引號(hào),如間用逗號(hào)分隔此時(shí)不需求用單引號(hào),如31H,32H,41H,42H表示字符串表示字符串12AB。3符號(hào)常量符號(hào)常量符號(hào)常量是指用符號(hào)常量是指用EQU偽指令或賦值語(yǔ)句偽指令或賦值語(yǔ)句“=定義過(guò)的符號(hào)名,定義過(guò)的符號(hào)名,可作操作數(shù)項(xiàng)或在表達(dá)式中運(yùn)用??勺鞑僮鲾?shù)項(xiàng)或在表達(dá)式中運(yùn)用。4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符2 2、變量、變量 在匯編言語(yǔ)中,變量是一個(gè)數(shù)

11、據(jù)存儲(chǔ)單元的稱(chēng)在匯編言語(yǔ)中,變量是一個(gè)數(shù)據(jù)存儲(chǔ)單元的稱(chēng)號(hào),即數(shù)據(jù)存放地址的符號(hào)表示。它代表存放在某號(hào),即數(shù)據(jù)存放地址的符號(hào)表示。它代表存放在某些存儲(chǔ)單元的數(shù)據(jù),這些數(shù)據(jù)在程序運(yùn)轉(zhuǎn)期間隨時(shí)些存儲(chǔ)單元的數(shù)據(jù),這些數(shù)據(jù)在程序運(yùn)轉(zhuǎn)期間隨時(shí)可以改動(dòng)。為方便訪(fǎng)問(wèn)變量,在程序中經(jīng)過(guò)變量名可以改動(dòng)。為方便訪(fǎng)問(wèn)變量,在程序中經(jīng)過(guò)變量名來(lái)運(yùn)用變量。來(lái)運(yùn)用變量。1 1變量的定義變量的定義 變量通常在數(shù)據(jù)段或附加段中運(yùn)用數(shù)據(jù)定義偽變量通常在數(shù)據(jù)段或附加段中運(yùn)用數(shù)據(jù)定義偽指令來(lái)定義,定義變量就是給數(shù)據(jù)分配存儲(chǔ)單元,指令來(lái)定義,定義變量就是給數(shù)據(jù)分配存儲(chǔ)單元,有時(shí)為存儲(chǔ)單元賦予一個(gè)變量名,并可同時(shí)為這些有時(shí)為存儲(chǔ)單元賦予

12、一個(gè)變量名,并可同時(shí)為這些存儲(chǔ)單元預(yù)置初值。數(shù)據(jù)定義偽指令的格式為:存儲(chǔ)單元預(yù)置初值。數(shù)據(jù)定義偽指令的格式為: 變量名變量名 DB(DW DB(DW、DDDD、DQDQ、DT) DT) 表達(dá)式表達(dá)式1 1,表達(dá),表達(dá)式式2 2,4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符 其中:變量名是可選項(xiàng),它僅代表所定義數(shù)據(jù)存儲(chǔ)區(qū)第一個(gè)單元的地址;DB、DW、DD、DQ和DT是偽指令符,詳細(xì)一條數(shù)據(jù)定義偽指令取5種之一。 表達(dá)式1,表達(dá)式2是給變量或指定的存儲(chǔ)單元賦予初值,它們有以下幾種方式: a數(shù)值表達(dá)式 b字符串表達(dá)式 c?表達(dá)式 d地址表達(dá)式(只適用于DW和DD這

13、兩種數(shù)據(jù)定義偽指令) e帶DUP的表達(dá)式2變量的屬性 由于存儲(chǔ)器是分段運(yùn)用的,因此源程序定義的變量具有3個(gè)屬性:a段屬性SEGb偏移屬性O(shè)FFSETc類(lèi)型屬性TYPE二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句3 3變量的運(yùn)用變量的運(yùn)用 定義后的變量,在程序中的援用有兩種情定義后的變量,在程序中的援用有兩種情況:況:a a在指令語(yǔ)句中,采用存儲(chǔ)器操作數(shù)的幾種在指令語(yǔ)句中,采用存儲(chǔ)器操作數(shù)的幾種尋址方式,除存放器間接尋址方式不運(yùn)用變量名尋址方式,除存放器間接尋址方式不運(yùn)用變量名外,其他各種尋址方式均可運(yùn)用變量名。外,其他各種尋址方式均可運(yùn)用變量名。例如,某數(shù)據(jù)

14、段已定義一變量例如,某數(shù)據(jù)段已定義一變量ARRAYARRAY: ARRAY DW 5000H ARRAY DW 5000H,4000H4000H b b在數(shù)據(jù)定義偽指令在數(shù)據(jù)定義偽指令DWDW和和DDDD中,操作數(shù)字段中,操作數(shù)字段可直接援用已定義過(guò)的變量名。可直接援用已定義過(guò)的變量名。 如:如: A DB 50H A DB 50H,40H40H B DW A B DW A C DD B C DD B4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符3 3、標(biāo)號(hào)、標(biāo)號(hào) 標(biāo)號(hào)是一條指令語(yǔ)句的符號(hào)地址,在匯編源程標(biāo)號(hào)是一條指令語(yǔ)句的符號(hào)地址,在匯編源程序中,只需在需求

15、轉(zhuǎn)向一條指令語(yǔ)句時(shí),才為該指序中,只需在需求轉(zhuǎn)向一條指令語(yǔ)句時(shí),才為該指令語(yǔ)句設(shè)置標(biāo)號(hào),以便在控制轉(zhuǎn)移指令中直接援用令語(yǔ)句設(shè)置標(biāo)號(hào),以便在控制轉(zhuǎn)移指令中直接援用這個(gè)標(biāo)號(hào)。標(biāo)號(hào)普通在代碼段中定義和援用。由于這個(gè)標(biāo)號(hào)。標(biāo)號(hào)普通在代碼段中定義和援用。由于標(biāo)號(hào)代表了指令的符號(hào)地址,所以標(biāo)號(hào)也有標(biāo)號(hào)代表了指令的符號(hào)地址,所以標(biāo)號(hào)也有3 3個(gè)屬個(gè)屬性:性:a a段屬性段屬性SEGSEG。標(biāo)號(hào)的段屬性是目的號(hào)定義。標(biāo)號(hào)的段屬性是目的號(hào)定義所在段的段首地址。所在段的段首地址。b b偏移屬性偏移屬性O(shè)FFSETOFFSET。標(biāo)號(hào)的偏移屬性是目。標(biāo)號(hào)的偏移屬性是目的號(hào)所在段的段首地址到該標(biāo)號(hào)的字節(jié)間隔。的號(hào)所在段

16、的段首地址到該標(biāo)號(hào)的字節(jié)間隔。c c類(lèi)型屬性類(lèi)型屬性TYPETYPE。標(biāo)號(hào)的類(lèi)型屬性表示了。標(biāo)號(hào)的類(lèi)型屬性表示了它的轉(zhuǎn)移特性,即該標(biāo)號(hào)是作為段內(nèi)還是段間轉(zhuǎn)移它的轉(zhuǎn)移特性,即該標(biāo)號(hào)是作為段內(nèi)還是段間轉(zhuǎn)移或調(diào)用指令的目的地址。標(biāo)號(hào)的類(lèi)型屬性有或調(diào)用指令的目的地址。標(biāo)號(hào)的類(lèi)型屬性有2 2種:種:NEARNEAR類(lèi)型和類(lèi)型和FARFAR類(lèi)型。類(lèi)型。4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符4 4、表達(dá)式和運(yùn)算符、表達(dá)式和運(yùn)算符匯編言語(yǔ)的指令語(yǔ)句和偽指令語(yǔ)句中,表達(dá)式是匯編言語(yǔ)的指令語(yǔ)句和偽指令語(yǔ)句中,表達(dá)式是操作數(shù)項(xiàng)的常見(jiàn)方式,表達(dá)式是由常量、變量、標(biāo)操作數(shù)項(xiàng)的常

17、見(jiàn)方式,表達(dá)式是由常量、變量、標(biāo)號(hào)用運(yùn)算符銜接而成有意義的式子。表達(dá)式分為數(shù)號(hào)用運(yùn)算符銜接而成有意義的式子。表達(dá)式分為數(shù)值表達(dá)式和地址表達(dá)式,任一表達(dá)式的值只計(jì)算一值表達(dá)式和地址表達(dá)式,任一表達(dá)式的值只計(jì)算一次,表達(dá)式的計(jì)算是在源程序匯編過(guò)程中進(jìn)展的,次,表達(dá)式的計(jì)算是在源程序匯編過(guò)程中進(jìn)展的,而不是在程序運(yùn)轉(zhuǎn)中進(jìn)展的,匯編程序?qū)⒈磉_(dá)式計(jì)而不是在程序運(yùn)轉(zhuǎn)中進(jìn)展的,匯編程序?qū)⒈磉_(dá)式計(jì)算后得到一個(gè)數(shù)值或一個(gè)地址。算后得到一個(gè)數(shù)值或一個(gè)地址。 在在80868086匯編言語(yǔ)中,運(yùn)算符分為:算術(shù)運(yùn)算符、匯編言語(yǔ)中,運(yùn)算符分為:算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、數(shù)值回送運(yùn)算符、屬性邏輯運(yùn)算符、關(guān)系運(yùn)算符

18、、數(shù)值回送運(yùn)算符、屬性運(yùn)算符和字節(jié)分別運(yùn)算符。運(yùn)算符和字節(jié)分別運(yùn)算符。4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符1 1數(shù)值表達(dá)式數(shù)值表達(dá)式 數(shù)值表達(dá)式是由常量與算術(shù)運(yùn)算符、邏輯運(yùn)算符或關(guān)系運(yùn)數(shù)值表達(dá)式是由常量與算術(shù)運(yùn)算符、邏輯運(yùn)算符或關(guān)系運(yùn)算符構(gòu)成的有意義的式子。數(shù)值表達(dá)式在匯編期間進(jìn)展運(yùn)算,算符構(gòu)成的有意義的式子。數(shù)值表達(dá)式在匯編期間進(jìn)展運(yùn)算,運(yùn)算結(jié)果為一數(shù)值常量,它只需大小而沒(méi)有屬性。運(yùn)算結(jié)果為一數(shù)值常量,它只需大小而沒(méi)有屬性。2 2地址表達(dá)式地址表達(dá)式 地址表達(dá)式是由常量、變量、標(biāo)號(hào)、存放器地址表達(dá)式是由常量、變量、標(biāo)號(hào)、存放器BXBX、BPBP、S

19、ISI、DIDI內(nèi)容用存放器名加方括號(hào)表示和運(yùn)算符組成的有意義內(nèi)容用存放器名加方括號(hào)表示和運(yùn)算符組成的有意義的式子。單個(gè)的變量、標(biāo)號(hào)、存放器的內(nèi)容是地址表達(dá)式的特的式子。單個(gè)的變量、標(biāo)號(hào)、存放器的內(nèi)容是地址表達(dá)式的特例。例。 地址表達(dá)式中可以運(yùn)用算術(shù)運(yùn)算符中的地址表達(dá)式中可以運(yùn)用算術(shù)運(yùn)算符中的“+ +、“- -運(yùn)算符、運(yùn)算符、關(guān)系運(yùn)算符、屬性運(yùn)算符、數(shù)值前往運(yùn)算符和分別運(yùn)算符。關(guān)系運(yùn)算符、屬性運(yùn)算符、數(shù)值前往運(yùn)算符和分別運(yùn)算符。 在地址表達(dá)式中,常用的方式是:變量在地址表達(dá)式中,常用的方式是:變量常量。常量。 4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符a

20、a算術(shù)運(yùn)算符:算術(shù)運(yùn)算符:+ +,- -,* *,/ /,MOD,SHL,SHRMOD,SHL,SHR。b b邏輯運(yùn)算符:邏輯運(yùn)算符:AND,OR,XOR,NOTAND,OR,XOR,NOT。c c關(guān)系運(yùn)算符:關(guān)系運(yùn)算符:EQ,NE,LT,LE,GT,GEEQ,NE,LT,LE,GT,GE。當(dāng)關(guān)系成立時(shí),結(jié)果為。當(dāng)關(guān)系成立時(shí),結(jié)果為0FFFFH,0FFFFH,當(dāng)關(guān)系不成立時(shí),結(jié)果為當(dāng)關(guān)系不成立時(shí),結(jié)果為0 0。d d數(shù)值回送運(yùn)算符:數(shù)值回送運(yùn)算符:SEG,OFFSET,TYPE,SIZE,LENGTHSEG,OFFSET,TYPE,SIZE,LENGTH。4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯

21、編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符OFFSET /SEG OFFSET /SEG 變量變量 / / 標(biāo)號(hào)標(biāo)號(hào)功能:回送變量或標(biāo)號(hào)的偏址功能:回送變量或標(biāo)號(hào)的偏址 / / 段址段址TYPE TYPE 變量變量 / / 標(biāo)號(hào)標(biāo)號(hào) / / 常數(shù)常數(shù) DB DW DD DF DQ DT NEAR FAR DB DW DD DF DQ DT NEAR FAR 常數(shù)常數(shù) 1 2 4 6 8 10 -1 -2 0 1 2 4 6 8 10 -1 -2 0LENGTH LENGTH 變量變量功能:回送由功能:回送由DUPDUP定義的變量的單元數(shù),其它情況回送定義的變量的單元數(shù),其它情況回送1 1SIZ

22、E SIZE 變量變量功能:功能:LENGTH LENGTH * * TYPE TYPE3表達(dá)式運(yùn)算符表達(dá)式運(yùn)算符5 5屬性運(yùn)算符:屬性運(yùn)算符:PTR,PTR,段操作符,段操作符,THISTHIS,SHORT SHORT 。類(lèi)型類(lèi)型 PTR PTR 表達(dá)式表達(dá)式 MOV WORD PTR BX, 5 MOV WORD PTR BX, 5段操作符段操作符 MOV ES: BX, AL MOV ES: BX, ALSHORT SHORT 標(biāo)號(hào)標(biāo)號(hào) JMP SHORT NEXT JMP SHORT NEXTTHIS THIS 類(lèi)型類(lèi)型 TA EQU THIS BYTE TA EQU THIS BYT

23、E TD DW 1234H TD DW 1234H NEXT EQU THIS FAR NEXT EQU THIS FAR MOV AX,2 MOV AX,26 6分別運(yùn)算符:分別運(yùn)算符:LOW,HIGHLOW,HIGH。HIGHHIGH和和LOW CONS EQU 1234HLOW CONS EQU 1234H MOV AH, HIGH CONS MOV AH, HIGH CONS MOV AL, LOW CONS MOV AL, LOW CONS 4.1 匯編言語(yǔ)語(yǔ)句匯編言語(yǔ)語(yǔ)句二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符二、匯編言語(yǔ)數(shù)據(jù)與運(yùn)算符4.2 偽指令偽指令v1 1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令v2

24、2 符號(hào)定義偽指令符號(hào)定義偽指令v3 3 段定義偽指令段定義偽指令SEGMENT/ENDSSEGMENT/ENDSv4 4 假定偽指令假定偽指令A(yù)SSUMEASSUMEv5 5 定位偽指令定位偽指令ORGORG與地址計(jì)數(shù)器與地址計(jì)數(shù)器$ $v6 6 過(guò)程定義偽指令過(guò)程定義偽指令PROC/ENDPPROC/ENDPv7 7 源程序開(kāi)場(chǎng)和終了偽指令源程序開(kāi)場(chǎng)和終了偽指令v 常用的數(shù)據(jù)定義偽指令有常用的數(shù)據(jù)定義偽指令有DBDB,DWDW,DDDD,DQDQ,DTDT。v 格式:格式: 變量名變量名 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 表達(dá)式表達(dá)式 ,v 功能:定義數(shù)據(jù)存儲(chǔ)區(qū),類(lèi)型由數(shù)據(jù)定義偽指令確定,初功

25、能:定義數(shù)據(jù)存儲(chǔ)區(qū),類(lèi)型由數(shù)據(jù)定義偽指令確定,初值由表達(dá)式給定。值由表達(dá)式給定。 - 0AH 04H 10H - 64H 00H 00H 01H 01H FBH FFH -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例:例:D A T A _ B Y T E D B D A T A _ B Y T E D B 10,4,10H,?10,4,10H,?D A T A _ W O R D D W D A T A _ W O R D D W 100,100H,-5,?100,100H,-5,?1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令4.2 偽指令偽指令例:例:A R R

26、A Y D B A R R A Y D B HELLOHELLO DB DB ABAB DW DW ABAB 48H 45H 4CH 4CH 4FH 41H 42H 42H 41H 41H ARRAY 例:例: PAR1 DW 100,200PAR1 DW 100,200 PAR2 DW 300,400 PAR2 DW 300,400ADDR_TABLE DW ADDR_TABLE DW PAR1,PAR2PAR1,PAR2VAR DB 100 DUP (?)VAR DB 100 DUP (?) DB 2 DUP (0,2 DB 2 DUP (0,2 DUP(1,2),3)DUP(1,2),3

27、)1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令4.2 偽指令偽指令OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ;字節(jié)指令 MOV OPER2, 0 ;字指令OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 類(lèi)型不匹配 MOV AX, WORD PTR OPER1+1 MOV AL, BYTE PTR OPER2(AX)=3402H (AL)=34H1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令4.2 偽指令偽指令4.2 偽指令偽指令1 等價(jià)偽指令等價(jià)偽指令EQU2 等號(hào)偽指令等號(hào)偽指令=3 定義符號(hào)名偽指

28、令定義符號(hào)名偽指令LABEL2 符號(hào)定義偽指令符號(hào)定義偽指令1 1 等價(jià)偽指令等價(jià)偽指令EQUEQU格式:符號(hào)名格式:符號(hào)名 EQ EQ 表達(dá)式表達(dá)式功能:為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等功能:為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等價(jià)的符號(hào)名,但它不懇求存儲(chǔ)單元。價(jià)的符號(hào)名,但它不懇求存儲(chǔ)單元。用途:用途: 用符號(hào)表示常量、數(shù)值表達(dá)式,即定義符用符號(hào)表示常量、數(shù)值表達(dá)式,即定義符號(hào)常量。運(yùn)用符號(hào)常量可使程序簡(jiǎn)單明了,加強(qiáng)號(hào)常量。運(yùn)用符號(hào)常量可使程序簡(jiǎn)單明了,加強(qiáng)程序的可讀性和通用性。程序的可讀性和通用性。 EQU EQU與屬性運(yùn)算符與屬性運(yùn)算符TRTR或或THISTHIS結(jié)合運(yùn)用,可以結(jié)

29、合運(yùn)用,可以給變量或標(biāo)號(hào)定義新的類(lèi)型屬性并重新命名,但給變量或標(biāo)號(hào)定義新的類(lèi)型屬性并重新命名,但堅(jiān)持其段偏移地址屬性不變。堅(jiān)持其段偏移地址屬性不變。 利用利用EQUEQU可以用一個(gè)符號(hào)名替代一個(gè)復(fù)雜的地可以用一個(gè)符號(hào)名替代一個(gè)復(fù)雜的地址表達(dá)式和其他一些符號(hào),如指令助記符、變量址表達(dá)式和其他一些符號(hào),如指令助記符、變量名、標(biāo)號(hào)、段名、存放器名、宏定義名等。名、標(biāo)號(hào)、段名、存放器名、宏定義名等。2 符號(hào)定義偽指令等價(jià)偽指令符號(hào)定義偽指令等價(jià)偽指令EQU例如:例如: ALPHA EQU 9BETA EQU ALPHA+18BB EQU BP+84.2 偽指令偽指令v 格式:符號(hào)名格式:符號(hào)名 = =

30、 表達(dá)式表達(dá)式v 功能:為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等價(jià)功能:為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等價(jià)的符號(hào)名,并能對(duì)所定義的符號(hào)多次反復(fù)定義,且以的符號(hào)名,并能對(duì)所定義的符號(hào)多次反復(fù)定義,且以最后一次定義的值為準(zhǔn)。最后一次定義的值為準(zhǔn)。v 【例】定義等價(jià)符號(hào)名?!纠慷x等價(jià)符號(hào)名。vvCOST = 20COST = 20vM M= MOV= MOVvLOST = LOST+10LOST = LOST+10;30LOST30LOSTvM M= ADD= ADD;M=ADDM=ADDv2 符號(hào)定義偽指令符號(hào)定義偽指令 等號(hào)偽指令等號(hào)偽指令=4.2 偽指令偽指令v 格式:變量名或標(biāo)號(hào)格式

31、:變量名或標(biāo)號(hào) LABELLABEL 類(lèi)型類(lèi)型v 功能:定義與原有變量類(lèi)型不同的新變量或?yàn)橹噶钫Z(yǔ)句功能:定義與原有變量類(lèi)型不同的新變量或?yàn)橹噶钫Z(yǔ)句定義有指定類(lèi)型的標(biāo)號(hào)。通常與數(shù)據(jù)定義偽指令連用,定義有指定類(lèi)型的標(biāo)號(hào)。通常與數(shù)據(jù)定義偽指令連用,其功能類(lèi)似語(yǔ)句其功能類(lèi)似語(yǔ)句“變量名或標(biāo)號(hào)變量名或標(biāo)號(hào) EQU THIS EQU THIS 類(lèi)型。類(lèi)型。v 【例】定義新類(lèi)型的變量?!纠慷x新類(lèi)型的變量。v vDDBUFDDBUF LABEL DWORDLABEL DWORDvBUFBUFDBDB 200 DUP 200 DUP0 0vvA LABEL FARA LABEL FARvB B:LEALEA

32、DXDX,BUFBUFv 4.2 偽指令偽指令2 符號(hào)定義偽指令定義符號(hào)名偽指令符號(hào)定義偽指令定義符號(hào)名偽指令LABEL 編制一個(gè)編制一個(gè)80X8680X86匯編言語(yǔ)源程序,段是根底,這有兩方匯編言語(yǔ)源程序,段是根底,這有兩方面含義:一是必需按段來(lái)構(gòu)造程序,二是在程序執(zhí)行時(shí),面含義:一是必需按段來(lái)構(gòu)造程序,二是在程序執(zhí)行時(shí),要憑仗四個(gè)段存放器對(duì)各個(gè)段的存儲(chǔ)單元進(jìn)展訪(fǎng)問(wèn)。要憑仗四個(gè)段存放器對(duì)各個(gè)段的存儲(chǔ)單元進(jìn)展訪(fǎng)問(wèn)。格式:段名格式:段名 SEGMENT SEGMENT 定位類(lèi)型定位類(lèi)型 組合類(lèi)型組合類(lèi)型 類(lèi)別類(lèi)別 段體段體 段名段名 ENDS ENDS功能:定義一個(gè)邏輯段,指定段的名字和范圍,段

33、在內(nèi)存功能:定義一個(gè)邏輯段,指定段的名字和范圍,段在內(nèi)存中的起始位置、段與段之間的銜接關(guān)系。中的起始位置、段與段之間的銜接關(guān)系。闡明:闡明: 段名由用戶(hù)指定,開(kāi)場(chǎng)與終了的段名須一致。段名由用戶(hù)指定,開(kāi)場(chǎng)與終了的段名須一致。 SEGMENT/ ENDS SEGMENT/ ENDS偽指令把程序分成假設(shè)干邏輯段偽指令把程序分成假設(shè)干邏輯段。 刪節(jié)號(hào)為段體,段體內(nèi)為指令和偽指令序列。刪節(jié)號(hào)為段體,段體內(nèi)為指令和偽指令序列。段的長(zhǎng)度不超越段的長(zhǎng)度不超越64KB64KB。SEGMENTSEGMENT后面的參數(shù)是可選后面的參數(shù)是可選 項(xiàng)。項(xiàng)。4.2 偽指令偽指令3 段定義偽指令段定義偽指令SEGMENT/E

34、ND 假定偽指令主要用于指示匯編程序哪些段是當(dāng)前段以及這些段假定偽指令主要用于指示匯編程序哪些段是當(dāng)前段以及這些段與段存放器之間的對(duì)應(yīng)關(guān)系。與段存放器之間的對(duì)應(yīng)關(guān)系。格式:格式:ASSUME 段存放器:段名段存放器:段名 ,段存放器:段名,段存放器:段名功能:該偽指令通知匯編程序在匯編時(shí),段存放器功能:該偽指令通知匯編程序在匯編時(shí),段存放器CS、DS、SS和和ES應(yīng)應(yīng)具有的符號(hào)段基址,以便匯編指令時(shí)確定段和建立錯(cuò)誤信息。但是段具有的符號(hào)段基址,以便匯編指令時(shí)確定段和建立錯(cuò)誤信息。但是段存放器實(shí)踐值存放器實(shí)踐值(CS除外除外)還要由傳送指令在執(zhí)行程序時(shí)賦值。該偽指令還要由傳送指令在執(zhí)行程序時(shí)賦值

35、。該偽指令普通出如今代碼段中。普通出如今代碼段中。【例】用【例】用ASSUME偽指令建立代碼段、堆棧段與偽指令建立代碼段、堆棧段與CS和和SS的對(duì)應(yīng)關(guān)系。的對(duì)應(yīng)關(guān)系。DATA1 SEGMENTADB 1,2,3DATA1 ENDSSTACK SEGMENT STACKDB200 DUP0STACK ENDSDATA2 SGEMENTBDB 123ABCDATA2 ENDS4 假定偽指令假定偽指令A(yù)SSUME4.2 偽指令偽指令DATA3DATA3SEGMENTSEGMENTC CDB DB ?,?,?,?,?DATA3DATA3ENDSENDSCODECODESEGMENTSEGMENTASS

36、UMEASSUMEDSDS:DATA1DATA1,ESES:DATA2DATA2,CSCS:CODECODE,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATA1DATA1MOVMOVDSDS,AXAX ;DATA1DSDATA1DSMOVMOVAXAX,DATA3DATA3MOVMOVESES,AXAX ;DATA3ESDATA3ESQ1Q1:MOVMOVALAL,A AQ2Q2:MOVMOVC C,ALALASSUMEASSUMEDSDS:DATA2 DATA2 ;建立;建立DSDS與與 B B段的對(duì)應(yīng)段的對(duì)應(yīng)關(guān)系關(guān)系MOVMOV AXAX,DATA2DAT

37、A2MOVMOV DSDS,AX AX MOVMOV ALAL,B BMOVMOV C C,ALALCODECODEENDS ENDS ENDEND STARTSTART4.2 偽指令偽指令4 假定偽指令假定偽指令A(yù)SSUME5 定位偽指令定位偽指令ORG與地址計(jì)數(shù)器與地址計(jì)數(shù)器$4.2 偽指令偽指令v 匯編程序在匯編源程序時(shí),每遇到一新段,就為該段設(shè)置匯編程序在匯編源程序時(shí),每遇到一新段,就為該段設(shè)置一個(gè)初值為一個(gè)初值為0 0的匯編地址計(jì)數(shù)器,匯編程序運(yùn)用匯編地址的匯編地址計(jì)數(shù)器,匯編程序運(yùn)用匯編地址計(jì)數(shù)器保管正在匯編的數(shù)據(jù)或指令的目的代碼在當(dāng)前段內(nèi)計(jì)數(shù)器保管正在匯編的數(shù)據(jù)或指令的目的代碼在

38、當(dāng)前段內(nèi)的偏移地址。的偏移地址。v 當(dāng)前地址計(jì)數(shù)器的值可用符號(hào)當(dāng)前地址計(jì)數(shù)器的值可用符號(hào)$ $表示,用戶(hù)可在程序中表示,用戶(hù)可在程序中直接運(yùn)用直接運(yùn)用$ $,表示援用當(dāng)前匯編地址計(jì)數(shù)器的值。例如:,表示援用當(dāng)前匯編地址計(jì)數(shù)器的值。例如:v ARRAY DW 4000HARRAY DW 4000H,5000H5000H,6000H6000HvCOUNT EQU COUNT EQU $ - ARRAY$ - ARRAY/ 2 / 2 v 匯編地址計(jì)數(shù)器的值可以用定位偽指令匯編地址計(jì)數(shù)器的值可以用定位偽指令ORGORG設(shè)置。設(shè)置。v v 格式:格式:ORG ORG 數(shù)值表達(dá)式數(shù)值表達(dá)式v 功能:將數(shù)

39、值表達(dá)式的值賦給匯編地址計(jì)數(shù)器。數(shù)功能:將數(shù)值表達(dá)式的值賦給匯編地址計(jì)數(shù)器。數(shù)值表達(dá)式的值須為值表達(dá)式的值須為0-655350-65535之間的非負(fù)整數(shù)。之間的非負(fù)整數(shù)。v 該偽指令把以下語(yǔ)句定義的內(nèi)存數(shù)據(jù)或程序,該偽指令把以下語(yǔ)句定義的內(nèi)存數(shù)據(jù)或程序,從表達(dá)式指定的起點(diǎn)從表達(dá)式指定的起點(diǎn)( (偏移地址偏移地址) )開(kāi)場(chǎng)延續(xù)存放,直開(kāi)場(chǎng)延續(xù)存放,直至遇到新的至遇到新的ORGORG指令。指令。v 【例】給匯編地址計(jì)數(shù)器賦值。【例】給匯編地址計(jì)數(shù)器賦值。vDATADATASEGMENT SEGMENT vORGORG1010; 置值為置值為1010vVAR1VAR1DW 100HDW 100H,2

40、00H200HvORGORG+5+5; 置的值為置的值為14+514+5,即為,即為1919vVAR2VAR2DB 1DB 1,2 2, +1+1,+2+2vN NEQU EQU -VAR2-VAR2 ; =23=23vDATADATAENDSENDS5 定位偽指令定位偽指令ORG與地址計(jì)數(shù)器與地址計(jì)數(shù)器$4.2 偽指令偽指令 在程序設(shè)計(jì)中,常把具有某種功能的程序段設(shè)計(jì)成一個(gè)在程序設(shè)計(jì)中,常把具有某種功能的程序段設(shè)計(jì)成一個(gè)過(guò)程。過(guò)程。80X8680X86宏匯編言語(yǔ)用于過(guò)程定義的偽指令的格式為:宏匯編言語(yǔ)用于過(guò)程定義的偽指令的格式為:過(guò)程名過(guò)程名 PROC NEAR PROC NEAR 或或FA

41、R FAR ;過(guò)程體;過(guò)程體 過(guò)程名過(guò)程名 ENDP ENDP 其中過(guò)程名是過(guò)程入口地址的符號(hào)表示,它由程序員指其中過(guò)程名是過(guò)程入口地址的符號(hào)表示,它由程序員指定,且開(kāi)場(chǎng)處和終了處的過(guò)程名一致。過(guò)程名同標(biāo)號(hào)一樣,定,且開(kāi)場(chǎng)處和終了處的過(guò)程名一致。過(guò)程名同標(biāo)號(hào)一樣,具有三種屬性:段屬性、偏移屬性和類(lèi)型屬性,類(lèi)型屬性可具有三種屬性:段屬性、偏移屬性和類(lèi)型屬性,類(lèi)型屬性可指定為指定為NEARNEAR或或FARFAR兩種。默許時(shí)系統(tǒng)商定是兩種。默許時(shí)系統(tǒng)商定是NEARNEAR。過(guò)程體為過(guò)。過(guò)程體為過(guò)程內(nèi)的指令和偽指令序列。程內(nèi)的指令和偽指令序列。 定義過(guò)程是為實(shí)現(xiàn)子程序調(diào)用而設(shè)的,調(diào)用格式為定義過(guò)程是

42、為實(shí)現(xiàn)子程序調(diào)用而設(shè)的,調(diào)用格式為: CALL CALL過(guò)程名過(guò)程名 過(guò)程由過(guò)程由RETRET指令前往。指令前往。6 6 過(guò)程定義偽指令過(guò)程定義偽指令PROC/ENDPPROC/ENDP4.2 偽指令偽指令1 1源程序開(kāi)場(chǎng)偽指令源程序開(kāi)場(chǎng)偽指令 在源程序開(kāi)場(chǎng)處可以用在源程序開(kāi)場(chǎng)處可以用NAMENAME或或TITLETITLE為模塊取名字。為模塊取名字。 NAME NAME偽指令偽指令 格式:格式:NAME NAME 模塊名模塊名 匯編程序?qū)⒁越o出的匯編程序?qū)⒁越o出的“模塊名作為模塊的名字。模塊名作為模塊的名字。 TITLE TITLE偽指令偽指令 假設(shè)程序中沒(méi)有假設(shè)程序中沒(méi)有NAMENAME偽

43、指令,那么也可運(yùn)用偽指令,那么也可運(yùn)用TITLETITLE偽指令。偽指令。 格式:格式:TITLE textTITLE text TITLE TITLE偽指令可指定每一頁(yè)上打印的標(biāo)題。同時(shí),假設(shè)程偽指令可指定每一頁(yè)上打印的標(biāo)題。同時(shí),假設(shè)程序中沒(méi)有序中沒(méi)有NAMENAME偽指令,那么匯編程序?qū)⒂脗沃噶?,那么匯編程序?qū)⒂胻ext text 中的前中的前6 6個(gè)字個(gè)字符作為模塊名。符作為模塊名。texttext最多可有最多可有6060個(gè)字符。個(gè)字符。 假設(shè)程序中既無(wú)假設(shè)程序中既無(wú)NAMENAME又無(wú)又無(wú)TITLETITLE偽指令,那么將用源程序偽指令,那么將用源程序名作為模塊名。所以名作為模塊名。

44、所以NAMENAME及及TITLETITLE偽指令并不是必要的,但普偽指令并不是必要的,但普通常運(yùn)用通常運(yùn)用TITLETITLE,以便在列表文件中能打印出標(biāo)題來(lái)。,以便在列表文件中能打印出標(biāo)題來(lái)。 7 源程序開(kāi)場(chǎng)和終了偽指令源程序開(kāi)場(chǎng)和終了偽指令4.2 偽指令偽指令2 2源程序終了偽指令源程序終了偽指令格式:格式:END END 地址表達(dá)式地址表達(dá)式 功能:該語(yǔ)句為源程序的最后一個(gè)語(yǔ)句,用以標(biāo)志整功能:該語(yǔ)句為源程序的最后一個(gè)語(yǔ)句,用以標(biāo)志整個(gè)程序的終了,即通知匯編程序匯編任務(wù)到此個(gè)程序的終了,即通知匯編程序匯編任務(wù)到此終了。終了。 其中,地址表達(dá)式為可選項(xiàng),假設(shè)選用地址表達(dá)式,那么表示其中,

45、地址表達(dá)式為可選項(xiàng),假設(shè)選用地址表達(dá)式,那么表示此程序是主程序,它可以單獨(dú)執(zhí)行,其地址表達(dá)式為該程序的啟動(dòng)此程序是主程序,它可以單獨(dú)執(zhí)行,其地址表達(dá)式為該程序的啟動(dòng)地址,即程序開(kāi)場(chǎng)運(yùn)轉(zhuǎn)的第一條指令的地址,例如,地址,即程序開(kāi)場(chǎng)運(yùn)轉(zhuǎn)的第一條指令的地址,例如,“END“ENDSTARTSTART,此,此STARTSTART是第一條指令的標(biāo)號(hào);假設(shè)不選用表達(dá)式,那么闡明此是第一條指令的標(biāo)號(hào);假設(shè)不選用表達(dá)式,那么闡明此程序?yàn)橐蛔映绦?,不能單?dú)運(yùn)轉(zhuǎn),只能被其它程序調(diào)用。程序?yàn)橐蛔映绦?,不能單?dú)運(yùn)轉(zhuǎn),只能被其它程序調(diào)用。 7 源程序開(kāi)場(chǎng)和終了偽指令源程序開(kāi)場(chǎng)和終了偽指令4.2 偽指令偽指令4.3 匯編言

46、語(yǔ)程序的構(gòu)造匯編言語(yǔ)程序的構(gòu)造 一個(gè)匯編源程序是分段的,由假設(shè)干個(gè)段構(gòu)成一個(gè)一個(gè)匯編源程序是分段的,由假設(shè)干個(gè)段構(gòu)成一個(gè)源程序。其中,必不可少的是代碼段和堆棧段,堆棧段源程序。其中,必不可少的是代碼段和堆棧段,堆棧段也可以不用顯示定義,可以直接運(yùn)用隱式堆棧段,假設(shè)也可以不用顯示定義,可以直接運(yùn)用隱式堆棧段,假設(shè)程序中需求運(yùn)用數(shù)據(jù)存儲(chǔ)區(qū),還要定義數(shù)據(jù)段,必要時(shí)程序中需求運(yùn)用數(shù)據(jù)存儲(chǔ)區(qū),還要定義數(shù)據(jù)段,必要時(shí)還要定義附加段。還要定義附加段。 普通情況下,對(duì)于不太復(fù)雜的程序普通情況下,對(duì)于不太復(fù)雜的程序只需求三個(gè)段即數(shù)據(jù)段、堆棧段和代碼段就可以了,只需求三個(gè)段即數(shù)據(jù)段、堆棧段和代碼段就可以了,而對(duì)于

47、復(fù)雜的程序,除了運(yùn)用上述三個(gè)段以外還可以運(yùn)而對(duì)于復(fù)雜的程序,除了運(yùn)用上述三個(gè)段以外還可以運(yùn)用多個(gè)段,甚至可以運(yùn)用多個(gè)程序模塊。用多個(gè)段,甚至可以運(yùn)用多個(gè)程序模塊。 匯編言語(yǔ)源程序構(gòu)造通常有兩種,它們的區(qū)別在于匯編言語(yǔ)源程序構(gòu)造通常有兩種,它們的區(qū)別在于代碼段中某些部分的編寫(xiě)稍有不同。詳細(xì)地說(shuō),就是用代碼段中某些部分的編寫(xiě)稍有不同。詳細(xì)地說(shuō),就是用戶(hù)程序運(yùn)轉(zhuǎn)終了后,前往戶(hù)程序運(yùn)轉(zhuǎn)終了后,前往DOSDOS的方法上有所不同。的方法上有所不同。完好的段定義格式完好的段定義格式 data segment ; data segment ; 定義數(shù)據(jù)段定義數(shù)據(jù)段 data endsdata ends;-;-

48、extra segment ; extra segment ; 定義附加段定義附加段 extra endsextra ends;-;-code segment ; code segment ; 定義代碼段定義代碼段 assume cs:code, ds:data, es:extra assume cs:code, ds:data, es:extrastart: start: mov ax, data mov ax, data mov ds, ax ; mov ds, ax ; 段地址段地址 段存放器段存放器 code endscode ends end start end startPSPPS

49、PDSDSESESSSSSCSCSEXE程序的內(nèi)存映象圖裝入模塊文件頭4.3 匯編言語(yǔ)程序的構(gòu)造匯編言語(yǔ)程序的構(gòu)造 1 1、用、用INT 21HINT 21H前往前往DOSDOS的程序構(gòu)造方式的程序構(gòu)造方式 INT 21H INT 21H是是DOSDOS系統(tǒng)功能調(diào)用,用這種方法前往系統(tǒng)功能調(diào)用,用這種方法前往DOSDOS的的程序構(gòu)造比較簡(jiǎn)單,我們編寫(xiě)程序常采用此構(gòu)造,詳細(xì)程序構(gòu)造比較簡(jiǎn)單,我們編寫(xiě)程序常采用此構(gòu)造,詳細(xì)編寫(xiě)時(shí)只需在用戶(hù)程序的最后安排兩條指令即可,即:編寫(xiě)時(shí)只需在用戶(hù)程序的最后安排兩條指令即可,即:MOV AHMOV AH,4CH4CHINT 21HINT 21H2 2、用過(guò)程前

50、往、用過(guò)程前往DOSDOS的程序構(gòu)造方式的程序構(gòu)造方式 采用此種方法前往采用此種方法前往DOSDOS的程序構(gòu)造,要求將用戶(hù)程序的程序構(gòu)造,要求將用戶(hù)程序定義為一個(gè)類(lèi)型為定義為一個(gè)類(lèi)型為FARFAR的過(guò)程,在用戶(hù)程序的開(kāi)場(chǎng)處要將的過(guò)程,在用戶(hù)程序的開(kāi)場(chǎng)處要將DSDS的值壓棧,偏移地址的值壓棧,偏移地址0 0壓棧,在程序的最后安排一條壓棧,在程序的最后安排一條RETRET指令。這樣當(dāng)程序運(yùn)轉(zhuǎn)到指令。這樣當(dāng)程序運(yùn)轉(zhuǎn)到RETRET指令后便可前往指令后便可前往DOSDOS。4.3 匯編言語(yǔ)程序的構(gòu)造匯編言語(yǔ)程序的構(gòu)造 code segmentmain proc far assume start: pus

51、h ds mov ax, 0 push ax retmain endpcode ends end startcode segmentmain proc far assume start: mov ax,4c00h int 21hmain endpcode ends end start4.3 匯編言語(yǔ)程序的構(gòu)造匯編言語(yǔ)程序的構(gòu)造 4.4 匯編言語(yǔ)程序的開(kāi)發(fā)過(guò)程匯編言語(yǔ)程序的開(kāi)發(fā)過(guò)程myfile.asm編輯程序編輯程序匯編程序匯編程序鏈接程序鏈接程序myfile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe1. 源程序的編輯源程

52、序的編輯2. 源程序的匯編源程序的匯編3. 目的文件的鏈接目的文件的鏈接4.5 匯編言語(yǔ)程序構(gòu)造設(shè)計(jì)匯編言語(yǔ)程序構(gòu)造設(shè)計(jì) 在匯編言語(yǔ)程序設(shè)計(jì)中,程序有順序、分支、循環(huán)和子程序四種根本構(gòu)造方式。4.5.1 順序程序設(shè)計(jì)4.5.2 分支程序設(shè)計(jì)4.5.3 循環(huán)程序設(shè)計(jì)4.5.4 子程序的設(shè)計(jì)4.5.5 宏指令 匯編言語(yǔ)程序設(shè)計(jì)步驟:匯編言語(yǔ)程序設(shè)計(jì)步驟: (1) (1)分析問(wèn)題:知條件、要處理的問(wèn)題、功能分析問(wèn)題:知條件、要處理的問(wèn)題、功能/ /性能性能要求等。要求等。 (2) (2)建立數(shù)學(xué)模型:把問(wèn)題數(shù)學(xué)化、公式化,便于計(jì)建立數(shù)學(xué)模型:把問(wèn)題數(shù)學(xué)化、公式化,便于計(jì)算機(jī)處置。算機(jī)處置。 (3)

53、(3)確定算法:簡(jiǎn)單、速度快、精度高、代碼量小、確定算法:簡(jiǎn)單、速度快、精度高、代碼量小、編程容易。編程容易。 (4) (4)繪制程序流程圖:用箭頭、框圖、菱形圖等表示繪制程序流程圖:用箭頭、框圖、菱形圖等表示程序構(gòu)造。程序構(gòu)造。 (5) (5)內(nèi)存空間分配:為程序或數(shù)據(jù)分配內(nèi)存空間。內(nèi)存空間分配:為程序或數(shù)據(jù)分配內(nèi)存空間。 (6) (6)編制程序與靜態(tài)檢查:程序構(gòu)造層次簡(jiǎn)單、清楚、編制程序與靜態(tài)檢查:程序構(gòu)造層次簡(jiǎn)單、清楚、易懂。易懂。 (7) (7)程序調(diào)試:利用調(diào)試軟件程序調(diào)試:利用調(diào)試軟件DEBUGDEBUG進(jìn)展調(diào)試。進(jìn)展調(diào)試。匯編言語(yǔ)程序設(shè)計(jì)的特點(diǎn):匯編言語(yǔ)程序設(shè)計(jì)的特點(diǎn): (1)

54、(1)算法要分解至指令級(jí);高級(jí)言語(yǔ)為語(yǔ)句級(jí)。算法要分解至指令級(jí);高級(jí)言語(yǔ)為語(yǔ)句級(jí)。 (2) (2)要詳細(xì)思索內(nèi)存空間分配問(wèn)題:任何一個(gè)變量、要詳細(xì)思索內(nèi)存空間分配問(wèn)題:任何一個(gè)變量、一條指令都要明確其存儲(chǔ)位置。一條指令都要明確其存儲(chǔ)位置。4.5 匯編言語(yǔ)程序構(gòu)造設(shè)計(jì)匯編言語(yǔ)程序構(gòu)造設(shè)計(jì) 順序程序設(shè)計(jì)也稱(chēng)為簡(jiǎn)單程序設(shè)計(jì),這種構(gòu)造的程序不運(yùn)用分支、循環(huán)構(gòu)造,程序本身的邏輯非常簡(jiǎn)單,所以只能完成一些簡(jiǎn)單操作。其特點(diǎn)是程序順序執(zhí)行,由前向后逐條執(zhí)行指令?!纠吭嚲帉?xiě)一程序計(jì)算以下表達(dá)式的值。=v-*+-540/x式中x、v均為有符號(hào)字?jǐn)?shù)據(jù)。設(shè)、的值存放在字變量、V中,結(jié)果存放在雙字變量之中,程序的流程

55、圖如下圖。4.5.1 順序程序設(shè)計(jì)順序程序設(shè)計(jì)4.5.1 順序程序設(shè)計(jì)順序程序設(shè)計(jì)順序運(yùn)算程序流程圖順序運(yùn)算程序流程圖源程序如下:源程序如下:DATADATASEGMENTSEGMENTX XDWDW200200Y YDWDW100100Z ZDWDW30003000V VDWDW1000010000W WDWDW2 DUP2 DUP?DATADATAENDSENDSSTACKSTACKSEGMENT STACKSEGMENT STACK DB 200 DUP DB 200 DUP0 0STACKSTACKENDSENDSCODECODESEGMENTSEGMENTASSUME DSASSUM

56、E DS:DATADATA,CSCS:CODECODE,SSSS:STACKSTACKSTARTSTART:MOVMOVAXAX,DATADATAMOVMOV DSDS,AXAX ;DATAAXDATAAXMOVMOV AXAX,X X IMULIMUL Y Y;X X* *Y YDXDX:AXAXMOVMOV CXCX,AXAXMOVMOV BXBX,DXDX ;DXDX:AXAX BXBX:CXCXMOVMOV AXAX,Z ZCWDCWD;Z Z符號(hào)擴(kuò)展符號(hào)擴(kuò)展ADDADD CXCX,AXAXADCADC BXBX,DXDX ;BXBX:CXCX+ + DXDX:AXAXBXBX:CXC

57、XSUBSUB CXCX,540540SBBSBB BXBX,0 0;BXBX:CXCX-540-540 BXBX:CXCXMOVMOV AXAX,V V CWDCWD;V V符號(hào)擴(kuò)展符號(hào)擴(kuò)展SUBSUB AXAX,CXCXSBBSBB DXDX,BXBX ;DXDX:AXAX- -BXBX:CXCXDXDX:AXAXIDIVIDIV X X;DXDX:AXAX/X/XMOVMOV W W,AXAX;商;商WWMOVMOV W+2W+2,DXDX;余數(shù);余數(shù)DXW+2DXW+2MOVMOV AHAH,4CH4CHINTINT 21H21HCODECODEENDSENDSENDEND START

58、START4.5.1 順序程序設(shè)計(jì)順序程序設(shè)計(jì)4.5.2 分支程序設(shè)計(jì)分支程序設(shè)計(jì) CASE 構(gòu)造構(gòu)造 case 1 case 2 case n條件條件? ?條條件件2 2? case 1 case 2 case n條件條件1 1?NYYNIF-THEN-ELSE 構(gòu)造構(gòu)造 分支程序是利用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序執(zhí)行次序改動(dòng)的一種程序構(gòu)分支程序是利用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序執(zhí)行次序改動(dòng)的一種程序構(gòu)造方式,即當(dāng)程序執(zhí)行到某一指令后,根據(jù)某個(gè)條件能否滿(mǎn)足,分別執(zhí)造方式,即當(dāng)程序執(zhí)行到某一指令后,根據(jù)某個(gè)條件能否滿(mǎn)足,分別執(zhí)行不同的指令序列。行不同的指令序列。 普通來(lái)說(shuō),分支程序經(jīng)常是先用比較指令或數(shù)據(jù)操作

59、及位檢測(cè)指令普通來(lái)說(shuō),分支程序經(jīng)常是先用比較指令或數(shù)據(jù)操作及位檢測(cè)指令等來(lái)改動(dòng)標(biāo)志存放器各個(gè)標(biāo)志位。然后用條件轉(zhuǎn)移指令進(jìn)展分支。等來(lái)改動(dòng)標(biāo)志存放器各個(gè)標(biāo)志位。然后用條件轉(zhuǎn)移指令進(jìn)展分支。 分支程序構(gòu)造可以有兩種方式,如以下圖所示,它們分別相當(dāng)于高分支程序構(gòu)造可以有兩種方式,如以下圖所示,它們分別相當(dāng)于高級(jí)言語(yǔ)中的級(jí)言語(yǔ)中的IF-THEN-ELSEIF-THEN-ELSE語(yǔ)句和語(yǔ)句和CASECASE語(yǔ)句。語(yǔ)句。4.5.2 分支程序設(shè)計(jì)分支程序設(shè)計(jì)【例】編寫(xiě)計(jì)算右面函數(shù)值的程序:【例】編寫(xiě)計(jì)算右面函數(shù)值的程序: 設(shè)輸入數(shù)據(jù)為設(shè)輸入數(shù)據(jù)為X X、輸出數(shù)據(jù)、輸出數(shù)據(jù)Y Y,且,且皆為字節(jié)變量。程序流程

60、圖如以皆為字節(jié)變量。程序流程圖如以下圖所示。下圖所示。 1 1 X X0 0Y= 0Y= 0 X=0 X=0 -1 X0 -1 X=AI+1? 終了終了YCOUNT1= 0 ?COUNT2COUNT1 I0 AI AI+1 I=I+1COUNT2COUNT2-1COUNT2= 0 ?COUNT1COUNT1-1NYmov cx, n ;mov cx, n ;元素個(gè)數(shù)元素個(gè)數(shù)dec cx ;dec cx ;比較遍數(shù)比較遍數(shù)loop1: mov di, cx ;loop1: mov di, cx ;比較次數(shù)比較次數(shù)mov bx, 0mov bx, 0loop2:loop2: mov ax, Abx

溫馨提示

  • 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)論