資源描述:
《匯編語言源程序.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、§5.4匯編語言源程序掌握:匯編語言與匯編程序的概念;匯編語言程序設(shè)計過程;匯編語言源程序的結(jié)構(gòu)框架;常用偽指令及基本DOS功能模塊的應(yīng)用。1一、80X86新增指令特點:增加對32位字長操作的指令;加強各類指令功能;增加了高級語言、控制保護(hù)、Cache管理等指令。2二、匯編語言及匯編程序計算機語言:機器語言匯編語言高級語言面向機器的語言機器語言匯編語言高級語言3匯編語言及匯編程序匯編語言源程序用助記符編寫的程序源程序的編譯程序匯編程序匯編語言源程序機器語言目標(biāo)程序4匯編語言程序設(shè)計與執(zhí)行過程輸入?yún)R編語言源程序源文件.ASM匯編(編譯)目標(biāo)文件.OBJ鏈接可
2、執(zhí)行文件.EXE調(diào)試最終程序5匯編語言的程序結(jié)構(gòu)一個源程序必須用其編譯器能夠理解的語法進(jìn)行編寫,這些語法是指語句和程序結(jié)構(gòu)必須遵循的規(guī)則。匯編語言也是如此。首先,通過以下可在PCDOS環(huán)境下運行的匯編語言源程序?qū)嵗?,初步認(rèn)識標(biāo)準(zhǔn)的匯編語言源程序的框架結(jié)構(gòu),并通過它來了解匯編語言的有關(guān)規(guī)定和格式。6例:打印輸出字符串“THISISASAMPLEPROGRAM”;SAMPLEPROGRAMDISPLAYMESSAGE;注釋行STACKSEGMENTPARASTACK’STACK’;定義堆棧段DB1024DUP(0);在存儲器建立一個堆棧區(qū)STACKENDS;段
3、結(jié)束DATASEGMENT;定義數(shù)據(jù)段MESSAGEDB’THISISASAMPLEPROGRAM’;存放數(shù)據(jù)DB0DH,0AH,’$’DATAENDS;段結(jié)束CODESEGMENT;代碼段開始ASSUMECS:CODE,DS:DATA,SS:STACK;將段名與段寄器聯(lián)系起來7STARTPROCFAR;將過程定義為遠(yuǎn)過程PUSHDSMOVAX,0PUSHAXMOVAX,DATA;建立數(shù)據(jù)段的可尋址性MOVDS,AX;初始化DSLEABX,MESSAGELOOP1:CMPBYTEPTR[BX],’$’JELOOP2MOVAH,5標(biāo)準(zhǔn)序,以便返回DOS操作系
4、統(tǒng)8MOVDL,[BX]INT21HINCBXJMPLOOP1LOOP2:RETSTARTENDP;過程結(jié)束CODEENDS;代碼段結(jié)束ENDSTART;整個程序匯編結(jié)束9匯編源程序的特點一、由若干邏輯段組成,各邏輯段都有一個段名,由段定義語句(偽指令)來定義和說明。通常只有代碼段是必不可少的。數(shù)據(jù)段或附加段用來在內(nèi)存中建立一個適當(dāng)容量的工作區(qū)用以存放常量和變量。堆棧段則在內(nèi)存中建立一個堆棧區(qū),以便中斷和子程序調(diào)用及各模塊間傳遞參數(shù)時使用。某些簡單的程序并不一定需要數(shù)據(jù)段和堆棧段,但對一些復(fù)雜的程序,堆棧段、數(shù)據(jù)段和代碼段都可以不止一個。通常把數(shù)據(jù)段放在代
5、碼段前面。10匯編源程序的特點(續(xù))二、在代碼段的起始處,用ASSUME命令說明各個段寄存器與邏輯段的關(guān)系。并由用戶自己設(shè)置各段寄存器(除代碼段外)初值,以建立這些邏輯段的可尋址性。三、每個邏輯段由若干行匯編語句組成,每行只有一條語句且不能超過128個字符,但一條語句允許有后續(xù)行,最后均以加車作結(jié)束。整個源程序必須以END語句來結(jié)束,它通知匯編程序停止匯編。END后面的標(biāo)號START表示該程序執(zhí)行時的起始地址。11匯編源程序的特點(續(xù))四、每一條匯編語句最多由4個字段組成,它們均按照一定的規(guī)則分別寫在一條語句的4個區(qū)域,各區(qū)域之間用空格或TAB鍵隔開。五、
6、每個源程序在代碼段中都必須含有返回到DOS操作系統(tǒng)的指令語句,以保證程序執(zhí)行完畢后能自動回到DOS狀態(tài),以便繼續(xù)向計算機鍵入命令。12源程序與PCDOS的接口為保證用戶程序執(zhí)行完后自動返回DOS,應(yīng)采取兩項措施:一是將用程序中的主程序定義為FAR過程,其最后一條指令為RET;二是在主程序的開始處將PSP所在段的段地址DS(或ES)保存進(jìn)棧,然后再將一個全0的字(PSP的段內(nèi)偏移地址)壓入堆棧。PUSHDSMOVAX,0PUSHAX13源程序與PCDOS的接口(續(xù))還有一種返回DOS的非標(biāo)準(zhǔn)方法:不定義主程序為FAR過程并去掉標(biāo)準(zhǔn)序部分,只在代碼段結(jié)束之前(
7、即CODEENDS之前)增加兩句:MOVAH,4CHINT21H14匯編語言的語句格式語句是匯編語言源程序的基本組成單位,源程序是一個語句序列。語句序列中的每個語句規(guī)定了一個基本操作要求,而語句序列則完成某個特定的操作任務(wù)。15語句的種類在80X86/Pentium匯編語言中,有三種基本語句:指令語句、偽指令語句和宏指令語句。指令語句:對應(yīng)于CPU指令系統(tǒng)中的一條指令,為可執(zhí)行語句。匯編程序?qū)橹a(chǎn)生一對應(yīng)的機器目標(biāo)代碼。如:指令語句MOVDS,AX;機器代碼為8EH和D8H16語句的種類(續(xù))偽指令語句CPU不執(zhí)行的語句,只是匯編時給匯編程序提供匯編信息
8、,如定義符號、分配存儲單元、將程序分段等。它本身不產(chǎn)生目標(biāo)代碼,所