匯編語(yǔ)言程序格式課件_第1頁(yè)
匯編語(yǔ)言程序格式課件_第2頁(yè)
匯編語(yǔ)言程序格式課件_第3頁(yè)
匯編語(yǔ)言程序格式課件_第4頁(yè)
匯編語(yǔ)言程序格式課件_第5頁(yè)
已閱讀5頁(yè),還剩57頁(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)介

匯編語(yǔ)言程序格式匯編語(yǔ)言程序格式一、匯編語(yǔ)句類(lèi)型和格式1.語(yǔ)句類(lèi)型硬指令語(yǔ)句(指令性語(yǔ)句)是指能產(chǎn)生目標(biāo)代碼,CPU可以執(zhí)行的,能完成特定功能的語(yǔ)句,它主要由CPU指令組成偽指令語(yǔ)句(指示性語(yǔ)句)是一種不產(chǎn)生目標(biāo)代碼的語(yǔ)句,它僅僅在匯編過(guò)程中告訴匯編程序應(yīng)如何匯編宏指令語(yǔ)句

是一個(gè)指令序列,匯編時(shí)凡有宏指令語(yǔ)句的地方都將用相應(yīng)的指令序列的目標(biāo)代碼插入一、匯編語(yǔ)句類(lèi)型和格式1.語(yǔ)句類(lèi)型2.語(yǔ)句的格式(1)執(zhí)行性語(yǔ)句標(biāo)號(hào):硬指令助記符操作數(shù),操作數(shù);注釋?zhuān)?)說(shuō)明性語(yǔ)句名字偽指令助記符參數(shù),參數(shù)….;注釋2.語(yǔ)句的格式二、完整段定義格式

8086按照邏輯段組織程序,具有代碼段、數(shù)據(jù)段、附加段和堆棧段一個(gè)匯編語(yǔ)言源程序可以包括若干個(gè)代碼段、數(shù)據(jù)段或堆棧段段與段之間的順序可以隨意排列。邏輯段用匯編語(yǔ)言源程序中的段定義偽指令來(lái)定義二、完整段定義格式8086按照邏輯段組織程序,具有代碼段、二、完整段定義格式完整段定義偽指令指定段寄存器偽指令段寄存器的裝入可執(zhí)行程序的正常結(jié)束二、完整段定義格式完整段定義偽指令1.完整段定義偽指令(SEGMENT、ENDS)作用:控制匯編程序和連接程序在內(nèi)存中組織代碼和數(shù)據(jù)的方式。格式:

段名

SEGMENT

[定位類(lèi)型]

[組合類(lèi)型]

[‘類(lèi)別名’]┇

段名

ENDS注意:SEGMENT和ENDS總是成對(duì)出現(xiàn)中間省略部分稱(chēng)為段體。對(duì)代碼段來(lái)說(shuō),則主要是程序代碼;對(duì)其它段來(lái)說(shuō),一般用于變量、符號(hào)等的定義方括號(hào)中的為可選項(xiàng),當(dāng)有可選項(xiàng)時(shí)各項(xiàng)順序不能錯(cuò),可選項(xiàng)之間用空格隔開(kāi)1.完整段定義偽指令(SEGMENT、ENDS)(1)段名段名是用戶(hù)自定義的,但不要與指令助記符或偽指令重名用來(lái)指示匯編程序?yàn)樵摱畏峙涞拇鎯?chǔ)區(qū)的首地址段名有段地址和偏移地址兩個(gè)屬性段開(kāi)始和段結(jié)束的段名必須相同(1)段名(2)定位類(lèi)型說(shuō)明段的起始地址的邊界要求,指示連接程序按定位類(lèi)型提出的要求,安排各段在內(nèi)存的相互銜接方式。它有5種可選擇類(lèi)型:①BYTE:段的起始地址可以從任何地址開(kāi)始。段起始地址(20位):××××××××××××××××××××B②WORD:段的起始地址必須以偶地址開(kāi)始段起始地址(20位):×××××××××××××××××××0B(2)定位類(lèi)型③DWORD:段的起始地址必須為4的倍數(shù)段起始地址(20位):××××××××××××××××××00B④PARA:段的起始地址必須從小段邊界開(kāi)始段起始地址(20位):××××××××××××××××0000B⑤PAGE:段的起始地址必須從頁(yè)的邊界開(kāi)始段起始地址(20位):××××××××××××00000000B如未指定定位類(lèi)型,則匯編程序默認(rèn)為PARA。③DWORD:段的起始地址必須為4的倍數(shù)(3)組合類(lèi)型當(dāng)程序有多個(gè)段時(shí),組合類(lèi)型用來(lái)說(shuō)明段與段之間是怎樣連接和定位的,共有6種組合類(lèi)型:①不指定或稱(chēng)隱含方式:表示本段與其他模塊中的同名段無(wú)連接關(guān)系,它將作為一個(gè)獨(dú)立的段運(yùn)行。②PUBLIC:本段與其他模塊中說(shuō)明為PUBLIC方式的同名段順序連接,組成一個(gè)大的邏輯段,它們共用同一個(gè)段起始地址。③COMMON:本段與其他模塊中說(shuō)明為COMMON方式的同名段從同一地址開(kāi)始重疊連接,段長(zhǎng)是同名段中最長(zhǎng)的段的長(zhǎng)度。(3)組合類(lèi)型④STACK:表示該段是堆棧段的一部分。把所有相同‘類(lèi)別名’的具有STACK組合類(lèi)型的段連接成一個(gè)連續(xù)段,該段長(zhǎng)度為各原有段的總和。將連續(xù)段首地址送SS,段內(nèi)最大偏移地址送SP(SP指向棧頂)。當(dāng)定義了STACK屬性后,在主程序中可省略對(duì)SS和SP的初始化。⑤MEMORY:與PUBLIC同義。

④STACK:表示該段是堆棧段的一部分。把所有相同‘類(lèi)別(4)‘類(lèi)別名’類(lèi)別名必須用單引號(hào)括起來(lái)。連接時(shí)對(duì)不同模塊、不同名的程序段只要‘類(lèi)別名’相同,則放在一個(gè)連續(xù)的物理空間,但每段之間是獨(dú)立的,不進(jìn)行組合。(4)‘類(lèi)別名’2.指定段寄存器偽指令(ASSUME)作用:明確段和段寄存器之間的關(guān)系,即告訴匯編程序,在運(yùn)行期間通過(guò)哪個(gè)段才能找到所要的指令和數(shù)據(jù)格式:ASSUME

段寄存器名:段名[,段寄存器名:段名[……]]例如:ASSUMECS:CODE,DS:DATA,SS:STACK2.指定段寄存器偽指令(ASSUME)3.段寄存器的裝入ASSUME偽指令只是指出各段和段寄存器之間的關(guān)系,但并未真正將段基地址裝入相應(yīng)的段寄存器中,所以在程序的代碼段開(kāi)始處就應(yīng)該先進(jìn)行段基址的裝入數(shù)據(jù)段DS、附加段ES和堆棧段SS的段基址由用戶(hù)程序代碼裝入

代碼段CS在加載程序后由系統(tǒng)自動(dòng)裝入3.段寄存器的裝入(1)DS、ES的裝入MOVAX,DATA;數(shù)據(jù)段段基地址送AX寄存器MOVDS,AX;AX寄存器的內(nèi)容送數(shù)據(jù)段寄存器DS或 MOVAX,SEGX;變量X所在數(shù)據(jù)段的段基址送AX寄存器MOVDS,AX(1)DS、ES的裝入(2)CS的裝入

對(duì)CS和IP的裝入方法是利用END后的標(biāo)號(hào)來(lái)完成的。如:START: ┇ ENDSTART系統(tǒng)自動(dòng)將START所在段的段地址送CS寄存器,將START所在段內(nèi)的偏移地址送IP寄存器。

(2)CS的裝入(3)SS的裝入方法1:由系統(tǒng)自動(dòng)裝填。要求在定義堆棧段時(shí),必須把參數(shù)寫(xiě)全。這時(shí),將程序裝入內(nèi)存,系統(tǒng)會(huì)自動(dòng)地把堆棧段地址和堆棧指針置入SS和SP中,因而可以不在代碼段中裝入SS和SP的值。STACK1SEGMENTPARASTACK‘STACK’ DB50HDUP(?)STACK1ENDS(3)SS的裝入方法2:手動(dòng)裝填STACK1SEGMENTPARA DW50HDUP(?) TOPLABELWORD ;TOP屬性為WORDSTACK1ENDSCODESEGMENT ASSUMECS:CODE,SS:STACK1START:MOVAX,STACK1 MOVSS,AX ;堆棧段的段地址送SS MOVSP,OFFSETTOP ;堆棧段的棧頂?shù)刂匪蚐P ┇TOP是該堆棧的初始棧頂部地址。方法2:手動(dòng)裝填4.操作系統(tǒng)下可執(zhí)行程序的正常結(jié)束方法1(非標(biāo)準(zhǔn)方法):

在CODEENDS之前增加如下語(yǔ)句: MOVAX,4C00H INT21H方法2(標(biāo)準(zhǔn)方法):

MAINPROCFAR

PUSHDS ;保存原來(lái)的PSP段地址 MOVAX,0H ;0送AX PUSHAX ;0壓棧 ┇ RET ;返回DOS

MAINENDP4.操作系統(tǒng)下可執(zhí)行程序的正常結(jié)束完整段定義的源程序格式

DATASEGMENT ;定義數(shù)據(jù)段DATASTRING DB‘Hello,Everybody!’,0DH,0AH,’$’

DATAENDS ;數(shù)據(jù)段結(jié)束

CODESEGMENT ;定義代碼段CODE

ASSUMECS:CODE,DS:DATA;確定CS、DS、SS指向的邏輯段

START:MOVAX,DATA;設(shè)置數(shù)據(jù)段的段地址DS

MOVDS,AXMOVDX,OFFSETSTRING;利用功能調(diào)用顯示信息MOVAH,9INT21HMOVAH,4CH;利用系統(tǒng)功能調(diào)用返回DOSINT21HCODEENDS;代碼段結(jié)束ENDSTART;匯編結(jié)束完整段定義的源程序格式三、簡(jiǎn)化段定義格式簡(jiǎn)化的段定義書(shū)寫(xiě)簡(jiǎn)單,有利于實(shí)現(xiàn)匯編語(yǔ)言程序模塊與高級(jí)語(yǔ)言程序模塊的連接,它可以由操作系統(tǒng)自動(dòng)安排段序,自動(dòng)保證名字定義的一致性。三、簡(jiǎn)化段定義格式簡(jiǎn)化的段定義書(shū)寫(xiě)簡(jiǎn)單,有利于實(shí)現(xiàn)匯1.存儲(chǔ)模式選擇偽操作(﹒MODEL)格式:﹒MODEL模式類(lèi)型功能:本語(yǔ)句一般放在段定義之前,用來(lái)說(shuō)明在存儲(chǔ)器中是如何安放各個(gè)段的。模式類(lèi)型說(shuō)明代碼段、數(shù)據(jù)段在程序中如何安排;代碼、數(shù)據(jù)的尋址是近還是遠(yuǎn)。根據(jù)它們的不同組合,模式類(lèi)型可以有如下5種。1.存儲(chǔ)模式選擇偽操作(﹒MODEL)①Tiny模式:也叫微模式,所有數(shù)據(jù)及代碼放入同一個(gè)物理段內(nèi),該模式用于編寫(xiě)較小的源程序,這種模式的源程序最終可以形成COM文件。②Small:也叫小模式,所有數(shù)據(jù)放入一個(gè)64KB的段中,所有代碼放入另一個(gè)64KB的段中,即程序中只有一個(gè)數(shù)據(jù)段和一個(gè)代碼段這是一般應(yīng)用程序最常用的一種模式。①Tiny模式:也叫微模式,所有數(shù)據(jù)及代碼放入同一個(gè)物理段③Medium:也叫中模式:所有數(shù)據(jù)放入一個(gè)64KB的段中,代碼可以放入多于一個(gè)的段中,即程序中可以有多個(gè)代碼段。④Compact:也叫壓縮模式,所有代碼放入一個(gè)64KB的段中;數(shù)據(jù)可以放入多于一個(gè)的段中,即程序中可以有多個(gè)數(shù)據(jù)段。⑤Large:也叫大模式,代碼和數(shù)據(jù)都可以分別放入多于一個(gè)的段中,即程序中可以有多個(gè)代碼段和多個(gè)數(shù)據(jù)段。③Medium:也叫中模式:所有數(shù)據(jù)放入一個(gè)64KB的段2.?dāng)?shù)據(jù)段定義偽指令(.DATA)格式:.DATA[名字]定義一個(gè)數(shù)據(jù)段,如果有多個(gè)數(shù)據(jù)段,則用名字來(lái)區(qū)別:只有一個(gè)數(shù)據(jù)段時(shí),隱含段名為DATA。3.堆棧段定義偽指令(.STACK)格式:.STACK[長(zhǎng)度]定義一個(gè)堆棧段,并形成SS及SP的初值,SP的默認(rèn)值為1024,隱含段名為STACK??蛇x的長(zhǎng)度參數(shù)指定堆棧段所占存儲(chǔ)區(qū)的字節(jié)數(shù),默認(rèn)大小是1KB。2.?dāng)?shù)據(jù)段定義偽指令(.DATA)4.代碼段定義偽指令(.CODE)格式:.CODE[名字]定義一個(gè)代碼段,如果有多個(gè)代碼段,則用名字來(lái)區(qū)別:只有一個(gè)代碼段時(shí),隱含段名為CODE。5.程序開(kāi)始偽指令(.STARTUP)格式:.STARTUP產(chǎn)生程序開(kāi)始執(zhí)行的代碼,同時(shí)還指定了程序開(kāi)始執(zhí)行的起點(diǎn)。在小模式下,可以省略將數(shù)據(jù)段基址裝入DS的語(yǔ)句。4.代碼段定義偽指令(.CODE)6.程序返回偽指令(.EXIT)格式:.EXIT[參數(shù)]功能:.EXIT產(chǎn)生終止程序執(zhí)行返回操作系統(tǒng)的指令代碼??蛇x參數(shù)是一個(gè)返回的數(shù)碼,通常用0代表沒(méi)有錯(cuò)誤

例如:.EXIT0對(duì)應(yīng)的代碼是: MOVAX,4C00H INT21H6.程序返回偽指令(.EXIT)簡(jiǎn)化段定義的源程序格式.MODEL SMALL ;定義程序的存儲(chǔ)模式.STACK ;定義堆棧段.DATA ;定義數(shù)據(jù)段STRINGDB’Hello,Everybody!’,0DH,0AH,’$’;在數(shù)據(jù)段定義要顯示的字符串.CODE ;定義代碼段.STARTUP ;說(shuō)明程序起始位置,并建立DS、SS內(nèi)容MOVDX,OFFSETSTRING ;指定字符串在數(shù)據(jù)段的偏移地址MOVAH,9INT21H ;利用DOS功能調(diào)用顯示信息.EXIT0 ;程序結(jié)束點(diǎn),返回DOS

END ;匯編結(jié)束簡(jiǎn)化段定義的源程序格式簡(jiǎn)化段定義的源程序格式.MODEL SMALL ;定義程序的存儲(chǔ)模式.STACK ;定義堆棧段.DATA ;定義數(shù)據(jù)段STRINGDB’Hello,Everybody!’,0DH,0AH,’$’;在數(shù)據(jù)段定義要顯示的字符串.CODE ;定義代碼段Start:MOVAX,DATAMOVDS,A ;說(shuō)明程序起始位置,并建立DS、SS內(nèi)容MOVDX,OFFSETSTRING ;指定字符串在數(shù)據(jù)段的偏移地址MOVAH,9INT21H ;利用DOS功能調(diào)用顯示信息MOVAH,4cHINT21H;程序結(jié)束點(diǎn),返回DOS

ENDstart ;匯編結(jié)束簡(jiǎn)化段定義的源程序格式綜合練習(xí)在數(shù)據(jù)段定義一字節(jié)變量,存儲(chǔ)一個(gè)0-9之間的十進(jìn)制數(shù)(1)編寫(xiě)匯編語(yǔ)言源程序,將該十進(jìn)制數(shù)顯示到屏幕上(2)用debug將匯編生成的可執(zhí)行文件調(diào)入內(nèi)存,查看數(shù)據(jù)段的內(nèi)容(3)在內(nèi)存中修改數(shù)據(jù)段中定義的十進(jìn)制數(shù),用t或g命令顯示運(yùn)行結(jié)果思考:(1)如何在屏幕上顯示一個(gè)兩位的十六進(jìn)制數(shù)(2)如何在屏幕上顯示一個(gè)兩位的十進(jìn)制數(shù)綜合練習(xí)在數(shù)據(jù)段定義一字節(jié)變量,存儲(chǔ)一個(gè)0-9之間的十進(jìn)制數(shù)DATASEGMENT ADB6DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDL,6ADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENT 匯編語(yǔ)言程序格式匯編語(yǔ)言程序格式一、匯編語(yǔ)句類(lèi)型和格式1.語(yǔ)句類(lèi)型硬指令語(yǔ)句(指令性語(yǔ)句)是指能產(chǎn)生目標(biāo)代碼,CPU可以執(zhí)行的,能完成特定功能的語(yǔ)句,它主要由CPU指令組成偽指令語(yǔ)句(指示性語(yǔ)句)是一種不產(chǎn)生目標(biāo)代碼的語(yǔ)句,它僅僅在匯編過(guò)程中告訴匯編程序應(yīng)如何匯編宏指令語(yǔ)句

是一個(gè)指令序列,匯編時(shí)凡有宏指令語(yǔ)句的地方都將用相應(yīng)的指令序列的目標(biāo)代碼插入一、匯編語(yǔ)句類(lèi)型和格式1.語(yǔ)句類(lèi)型2.語(yǔ)句的格式(1)執(zhí)行性語(yǔ)句標(biāo)號(hào):硬指令助記符操作數(shù),操作數(shù);注釋?zhuān)?)說(shuō)明性語(yǔ)句名字偽指令助記符參數(shù),參數(shù)….;注釋2.語(yǔ)句的格式二、完整段定義格式

8086按照邏輯段組織程序,具有代碼段、數(shù)據(jù)段、附加段和堆棧段一個(gè)匯編語(yǔ)言源程序可以包括若干個(gè)代碼段、數(shù)據(jù)段或堆棧段段與段之間的順序可以隨意排列。邏輯段用匯編語(yǔ)言源程序中的段定義偽指令來(lái)定義二、完整段定義格式8086按照邏輯段組織程序,具有代碼段、二、完整段定義格式完整段定義偽指令指定段寄存器偽指令段寄存器的裝入可執(zhí)行程序的正常結(jié)束二、完整段定義格式完整段定義偽指令1.完整段定義偽指令(SEGMENT、ENDS)作用:控制匯編程序和連接程序在內(nèi)存中組織代碼和數(shù)據(jù)的方式。格式:

段名

SEGMENT

[定位類(lèi)型]

[組合類(lèi)型]

[‘類(lèi)別名’]┇

段名

ENDS注意:SEGMENT和ENDS總是成對(duì)出現(xiàn)中間省略部分稱(chēng)為段體。對(duì)代碼段來(lái)說(shuō),則主要是程序代碼;對(duì)其它段來(lái)說(shuō),一般用于變量、符號(hào)等的定義方括號(hào)中的為可選項(xiàng),當(dāng)有可選項(xiàng)時(shí)各項(xiàng)順序不能錯(cuò),可選項(xiàng)之間用空格隔開(kāi)1.完整段定義偽指令(SEGMENT、ENDS)(1)段名段名是用戶(hù)自定義的,但不要與指令助記符或偽指令重名用來(lái)指示匯編程序?yàn)樵摱畏峙涞拇鎯?chǔ)區(qū)的首地址段名有段地址和偏移地址兩個(gè)屬性段開(kāi)始和段結(jié)束的段名必須相同(1)段名(2)定位類(lèi)型說(shuō)明段的起始地址的邊界要求,指示連接程序按定位類(lèi)型提出的要求,安排各段在內(nèi)存的相互銜接方式。它有5種可選擇類(lèi)型:①BYTE:段的起始地址可以從任何地址開(kāi)始。段起始地址(20位):××××××××××××××××××××B②WORD:段的起始地址必須以偶地址開(kāi)始段起始地址(20位):×××××××××××××××××××0B(2)定位類(lèi)型③DWORD:段的起始地址必須為4的倍數(shù)段起始地址(20位):××××××××××××××××××00B④PARA:段的起始地址必須從小段邊界開(kāi)始段起始地址(20位):××××××××××××××××0000B⑤PAGE:段的起始地址必須從頁(yè)的邊界開(kāi)始段起始地址(20位):××××××××××××00000000B如未指定定位類(lèi)型,則匯編程序默認(rèn)為PARA。③DWORD:段的起始地址必須為4的倍數(shù)(3)組合類(lèi)型當(dāng)程序有多個(gè)段時(shí),組合類(lèi)型用來(lái)說(shuō)明段與段之間是怎樣連接和定位的,共有6種組合類(lèi)型:①不指定或稱(chēng)隱含方式:表示本段與其他模塊中的同名段無(wú)連接關(guān)系,它將作為一個(gè)獨(dú)立的段運(yùn)行。②PUBLIC:本段與其他模塊中說(shuō)明為PUBLIC方式的同名段順序連接,組成一個(gè)大的邏輯段,它們共用同一個(gè)段起始地址。③COMMON:本段與其他模塊中說(shuō)明為COMMON方式的同名段從同一地址開(kāi)始重疊連接,段長(zhǎng)是同名段中最長(zhǎng)的段的長(zhǎng)度。(3)組合類(lèi)型④STACK:表示該段是堆棧段的一部分。把所有相同‘類(lèi)別名’的具有STACK組合類(lèi)型的段連接成一個(gè)連續(xù)段,該段長(zhǎng)度為各原有段的總和。將連續(xù)段首地址送SS,段內(nèi)最大偏移地址送SP(SP指向棧頂)。當(dāng)定義了STACK屬性后,在主程序中可省略對(duì)SS和SP的初始化。⑤MEMORY:與PUBLIC同義。

④STACK:表示該段是堆棧段的一部分。把所有相同‘類(lèi)別(4)‘類(lèi)別名’類(lèi)別名必須用單引號(hào)括起來(lái)。連接時(shí)對(duì)不同模塊、不同名的程序段只要‘類(lèi)別名’相同,則放在一個(gè)連續(xù)的物理空間,但每段之間是獨(dú)立的,不進(jìn)行組合。(4)‘類(lèi)別名’2.指定段寄存器偽指令(ASSUME)作用:明確段和段寄存器之間的關(guān)系,即告訴匯編程序,在運(yùn)行期間通過(guò)哪個(gè)段才能找到所要的指令和數(shù)據(jù)格式:ASSUME

段寄存器名:段名[,段寄存器名:段名[……]]例如:ASSUMECS:CODE,DS:DATA,SS:STACK2.指定段寄存器偽指令(ASSUME)3.段寄存器的裝入ASSUME偽指令只是指出各段和段寄存器之間的關(guān)系,但并未真正將段基地址裝入相應(yīng)的段寄存器中,所以在程序的代碼段開(kāi)始處就應(yīng)該先進(jìn)行段基址的裝入數(shù)據(jù)段DS、附加段ES和堆棧段SS的段基址由用戶(hù)程序代碼裝入

代碼段CS在加載程序后由系統(tǒng)自動(dòng)裝入3.段寄存器的裝入(1)DS、ES的裝入MOVAX,DATA;數(shù)據(jù)段段基地址送AX寄存器MOVDS,AX;AX寄存器的內(nèi)容送數(shù)據(jù)段寄存器DS或 MOVAX,SEGX;變量X所在數(shù)據(jù)段的段基址送AX寄存器MOVDS,AX(1)DS、ES的裝入(2)CS的裝入

對(duì)CS和IP的裝入方法是利用END后的標(biāo)號(hào)來(lái)完成的。如:START: ┇ ENDSTART系統(tǒng)自動(dòng)將START所在段的段地址送CS寄存器,將START所在段內(nèi)的偏移地址送IP寄存器。

(2)CS的裝入(3)SS的裝入方法1:由系統(tǒng)自動(dòng)裝填。要求在定義堆棧段時(shí),必須把參數(shù)寫(xiě)全。這時(shí),將程序裝入內(nèi)存,系統(tǒng)會(huì)自動(dòng)地把堆棧段地址和堆棧指針置入SS和SP中,因而可以不在代碼段中裝入SS和SP的值。STACK1SEGMENTPARASTACK‘STACK’ DB50HDUP(?)STACK1ENDS(3)SS的裝入方法2:手動(dòng)裝填STACK1SEGMENTPARA DW50HDUP(?) TOPLABELWORD ;TOP屬性為WORDSTACK1ENDSCODESEGMENT ASSUMECS:CODE,SS:STACK1START:MOVAX,STACK1 MOVSS,AX ;堆棧段的段地址送SS MOVSP,OFFSETTOP ;堆棧段的棧頂?shù)刂匪蚐P ┇TOP是該堆棧的初始棧頂部地址。方法2:手動(dòng)裝填4.操作系統(tǒng)下可執(zhí)行程序的正常結(jié)束方法1(非標(biāo)準(zhǔn)方法):

在CODEENDS之前增加如下語(yǔ)句: MOVAX,4C00H INT21H方法2(標(biāo)準(zhǔn)方法):

MAINPROCFAR

PUSHDS ;保存原來(lái)的PSP段地址 MOVAX,0H ;0送AX PUSHAX ;0壓棧 ┇ RET ;返回DOS

MAINENDP4.操作系統(tǒng)下可執(zhí)行程序的正常結(jié)束完整段定義的源程序格式

DATASEGMENT ;定義數(shù)據(jù)段DATASTRING DB‘Hello,Everybody!’,0DH,0AH,’$’

DATAENDS ;數(shù)據(jù)段結(jié)束

CODESEGMENT ;定義代碼段CODE

ASSUMECS:CODE,DS:DATA;確定CS、DS、SS指向的邏輯段

START:MOVAX,DATA;設(shè)置數(shù)據(jù)段的段地址DS

MOVDS,AXMOVDX,OFFSETSTRING;利用功能調(diào)用顯示信息MOVAH,9INT21HMOVAH,4CH;利用系統(tǒng)功能調(diào)用返回DOSINT21HCODEENDS;代碼段結(jié)束ENDSTART;匯編結(jié)束完整段定義的源程序格式三、簡(jiǎn)化段定義格式簡(jiǎn)化的段定義書(shū)寫(xiě)簡(jiǎn)單,有利于實(shí)現(xiàn)匯編語(yǔ)言程序模塊與高級(jí)語(yǔ)言程序模塊的連接,它可以由操作系統(tǒng)自動(dòng)安排段序,自動(dòng)保證名字定義的一致性。三、簡(jiǎn)化段定義格式簡(jiǎn)化的段定義書(shū)寫(xiě)簡(jiǎn)單,有利于實(shí)現(xiàn)匯1.存儲(chǔ)模式選擇偽操作(﹒MODEL)格式:﹒MODEL模式類(lèi)型功能:本語(yǔ)句一般放在段定義之前,用來(lái)說(shuō)明在存儲(chǔ)器中是如何安放各個(gè)段的。模式類(lèi)型說(shuō)明代碼段、數(shù)據(jù)段在程序中如何安排;代碼、數(shù)據(jù)的尋址是近還是遠(yuǎn)。根據(jù)它們的不同組合,模式類(lèi)型可以有如下5種。1.存儲(chǔ)模式選擇偽操作(﹒MODEL)①Tiny模式:也叫微模式,所有數(shù)據(jù)及代碼放入同一個(gè)物理段內(nèi),該模式用于編寫(xiě)較小的源程序,這種模式的源程序最終可以形成COM文件。②Small:也叫小模式,所有數(shù)據(jù)放入一個(gè)64KB的段中,所有代碼放入另一個(gè)64KB的段中,即程序中只有一個(gè)數(shù)據(jù)段和一個(gè)代碼段這是一般應(yīng)用程序最常用的一種模式。①Tiny模式:也叫微模式,所有數(shù)據(jù)及代碼放入同一個(gè)物理段③Medium:也叫中模式:所有數(shù)據(jù)放入一個(gè)64KB的段中,代碼可以放入多于一個(gè)的段中,即程序中可以有多個(gè)代碼段。④Compact:也叫壓縮模式,所有代碼放入一個(gè)64KB的段中;數(shù)據(jù)可以放入多于一個(gè)的段中,即程序中可以有多個(gè)數(shù)據(jù)段。⑤Large:也叫大模式,代碼和數(shù)據(jù)都可以分別放入多于一個(gè)的段中,即程序中可以有多個(gè)代碼段和多個(gè)數(shù)據(jù)段。③Medium:也叫中模式:所有數(shù)據(jù)放入一個(gè)64KB的段2.?dāng)?shù)據(jù)段定義偽指令(.DATA)格式:.DATA[名字]定義一個(gè)數(shù)據(jù)段,如果有多個(gè)數(shù)據(jù)段,則用名字來(lái)區(qū)別:只有一個(gè)數(shù)據(jù)段時(shí),隱含段名為DATA。3.堆棧段定義偽指令(.STACK)格式:.STACK[長(zhǎng)度]定義一個(gè)堆棧段,并形成SS及SP的初值,SP的默認(rèn)值為1024,隱含段名為STACK??蛇x的長(zhǎng)度參數(shù)指定堆棧段所占存儲(chǔ)區(qū)的字節(jié)數(shù),默認(rèn)大小是1KB。2.?dāng)?shù)據(jù)段定義偽指令(.DATA)4.代碼段定義偽指令(.CODE)格式:.CODE[名字]定義一個(gè)代碼段,如果有多個(gè)代碼段,則用名字來(lái)區(qū)別:只有一個(gè)代碼段時(shí),隱含段名為CODE。5.程序開(kāi)始偽指令(.STARTUP)格式:.STARTUP產(chǎn)生程序開(kāi)始執(zhí)行的代碼,同時(shí)還指定了程序開(kāi)始執(zhí)行的起點(diǎn)。在小模式下,可以省略將數(shù)據(jù)段基址裝入DS的語(yǔ)句。4.代碼段定義偽指令(.CODE)6.程序返回偽指令(.EXIT)格式:.EXIT[參數(shù)]功能:.EXIT產(chǎn)生終止程序執(zhí)行返回操作系統(tǒng)的指令代碼??蛇x參數(shù)是一個(gè)返回的數(shù)碼,通常用0代表沒(méi)有錯(cuò)誤

例如:.EXIT0對(duì)應(yīng)的代碼是: MOVAX,4C00H INT21H6.程序返回偽指令(.EXIT)簡(jiǎn)化段定義的源程序格式.MODEL SMALL

溫馨提示

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