資源描述:
《匯編語言源程序的結(jié)構(gòu)及上機(jī)步驟》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、匯編語言源程序的結(jié)構(gòu)及上機(jī)步驟匯編語言源程序有兩類:其一,經(jīng)匯編后生成擴(kuò)展名為.EXE的可執(zhí)行文件(簡稱EXE文件);其二,經(jīng)匯編后生成擴(kuò)展名為.COM的緊湊格式文件(可執(zhí)行,簡稱COM文件)。這兩種文件具有不同的優(yōu)先級,其源程序結(jié)構(gòu)也有較大差異。1.EXE文件的匯編格式?(1)特點(diǎn):程序可帶重定位信息,程序分段,每段64K,文件較長???程序裝入內(nèi)存時,CS、SS由系統(tǒng)賦值,DS、ES由用戶賦值?(2)EXE匯編語言源程序一般結(jié)構(gòu)如下:;programtitlegoeshead---(程序題目放這里);?;EQU?STATEME
2、NTGOHEAD---(等值語句放這里);*************?STACKSEGMENTPARASTACK'STACK';堆棧段??????DB20DUP('STACK??')?STACKENDS;********************DATASGSEGMENT???????????????????;數(shù)據(jù)段;DATAGOESHEAR?DATASGENDS;*********************EXTRASEGMENT????????????????????;附加段(可有可無)?????????????;DATAGOES
3、HEAR?EXTRAENDS;*********************CODESGSEGMENT???????????????????;代碼段;----------------------MAINPROCFAR????????????????????;主過程??ASSUMECS:CODESG,DS:DATASG,ES:EXTRA,SS:STACK??PUSHDS?????????????????????????;程序段前綴PSP??MOVAX,0????????????????????????;首地址入棧??PUSHAX??MO
4、V?AX,DATASG??????????????????;將數(shù)據(jù)段的段地址傳送給??MOV?DS,AX??????????????????????;段寄存器DS??MOV?AX,EXTRA???????????????????;將附加段的段地址傳送給??MOV?ES,AX??????????????????????;段寄存器ES??;MAINPARTOFPROGRAMGOESHEAR(程序的主要部分放這里)??RET?????????????????????????????;(返回)MAINENDP;--------------
5、---------CODESGENDS;**************************ENDMAIN????????????????????????;程序結(jié)束?說明:系統(tǒng)在為用戶文件分配內(nèi)存空間時,會多分配256個BYTE(100H)內(nèi)存空間給該文件,而這256BYTE時放在程序的機(jī)器碼前面,所以這個區(qū)域稱為程序段前綴(PSPProgramSystemPrefix),此區(qū)域內(nèi)所紀(jì)錄的內(nèi)容為用戶跟系統(tǒng)溝通的一些相關(guān)信息.在程序段前綴PSP的首地址中,存放了一條INT20H(程序結(jié)束)的指令。?(3)EXE文件裝入內(nèi)存中的情況如
6、圖3.3.1所示(一開始,段寄存器DS、ES指向段前綴PSP的段地址)?????低地址?程序段前綴???PSPDS:0H,ES:0H???代碼段CS:0H(IP=0)?????????????????????????CS:IP(指向下一條要執(zhí)行的指令)???數(shù)據(jù)段????附加段????????????????????????????????高地址??堆棧段SS:0H??????????????????SS:SP(指向棧頂)圖3.3.12..COM文件的匯編格式?(1)特點(diǎn):程序不能帶可重定位信息;整個源程序只能使用一個邏輯段;程序
7、裝入內(nèi)存時,CS、SS、DS、ES指向同一段,均由系統(tǒng)賦值;第一條可執(zhí)行指令位于段內(nèi)偏移量為0100H的地方(前面256個字節(jié)為程序段前綴PSP所在地);數(shù)據(jù)區(qū)可設(shè)置在代碼段的開始或末尾(與指令代碼的合計(jì)總長度小于64KB等。?(2)COM匯編語言源程序一般結(jié)構(gòu)如下:;programtitlegoeshead---(程序題目放這里);?;EQU?STATEMENTGOHEAD---(等值語句放這里);*************CODESGSEGMENT???????????????????;代碼段;----------------
8、------MAINPROCNEAR????????????;主過程只能是NEAR屬性??ORG100H???????;使第一條可執(zhí)行指令位于段內(nèi)偏移量為0100H的地方???ASSUMECS:CODESG,DS:CODESG,ES:CODESG,