Ch 11¡@¼¶¼g EXE ¥i°õ¦æÀÉ


¥i°õ¦æÀÉ

·L³n©Ò¶}µoªº DOS §@·~¨t²Î¤¤¡A³Ì¬°±`¨£ªº¥i°õ¦æÀɦ³¨âºØ¡A¨ä°ÆÀɦW¤À§O¬O COM »P EXE¡C«e´X³¹©Ò¤¶²Ðªº¬O COM ( ¬O command ªº·N«ä )¡A·í¥¦Àx¦s¦bºÏºÐ¤ù®Éªº¤º®e©M¸ü¤J¨ì°O¾ÐÅ骺¤º®e¬O¤@¼Ò¤@¼Ë¡F¦pªG¤£¥Î¯S®íªº¤è¦¡»s§@¡Aµ{¦¡½X»P¸ê®Æ¦b¦P¤@°Ï¬q¤º¡A¬GÀɮפj¤pµLªk¶W¹L 64KB¡F¦]¦¹¥u¯à»s§@¤p«¬µ{¦¡¡A³o¤j¤jªº­­¨î COM ¥i°õ¦æÀɪº¥\¯à¡C

¦Ó³o¤@³¹­n¤¶²Ðªº¬O EXE ¥i°õ¦æÀÉ¡AEXE ¬O­^¤å execute ªº·N«ä¡CEXE Àɪºµ{¦¡½X¤Î¸ê®Æ©ñ¦b¤£¦P°Ï¬q¡A¬G¤j¤p¥i¥H¶W¹L 64KB¡C·í¥¦Àx¦s¦bºÏºÐ¤ù®É¡A°£¤Fµ{¦¡½X¤Î¸ê®Æ¥~¡AÁÙ²K¥[¤F¤@­ÓºÙ¬°ÀÉ®×ÀYªí ( file header ) ªº¸ê®Æ¡C¦Ó§@·~¨t²Î¸ü¤J EXE ¥i°õ¦æÀɮɡA·|®Ú¾ÚÀÉ®×ÀYªí©Ò°O¸üªº¸ê®Æ¶i¦æ°t¸m¡AµM«á¤~°õ¦æ¡C¨Ì¾ÚÀÉ®×ÀYªíªº¤£¦P¡AEXE Àɦ³³\¦hºØ®æ¦¡¡G

  1. ¦b 16 ¦ì¤¸ DOS °õ¦æªº¡uMZ Executable¡v( ²ºÙ MZ )¡C
  2. ¦b 16 ¦ì¤¸ªº Windows 1.x¡ã3.x °õ¦æªº¡uNew Executable¡v( ²ºÙ NE )¡C
  3. ¦b 32 ¦ì¤¸ªº Windows 95/98/Me/XP/Vista/7/8.x/10 °õ¦æªº¡uPortable Executable¡v( ²ºÙ PE )¡C
  4. ¦b 64 ¦ì¤¸ªº Windows XP/Vista/7/8.x/10 °õ¦æªº¡uPE¡Ï¡v¡C

¥»¨Ó¦b DOS §@·~¨t²Î¤Uªº­ì¥Íµ{¦¡ ( native program ) ¬O¡uMZ¡v®æ¦¡¡A¦ý¬O·í·L³nµo®i Windows 1.x¡ã3.x ®É¡A¦pªGµLªk°õ¦æ MZ ®æ¦¡ªº EXE¡A«K·|¥¢¥h³\¦h°Ó¾÷¡A¦]¦¹ Windows 1.x¡ã3.x ¤]¯à°õ¦æ DOS ªº­ì¥Íµ{¦¡¡A³o¤]¬O¤@ºØ¡u¦V¤U¬Û®e¡v¡C¦Ó«á¨ì¤F 32 ¦ì¤¸ªº®É¥N¡AWindows 95¡ã10 ¤]¬O¦p¦¹¡A¥¦­Ì¤]³£¯à°õ¦æ MZ »P NE ®æ¦¡ªº EXE ÀÉ¡C¨ì¤F 64 ¦ì¤¸ªº Windows ®É¡AÁÙ¦b¨Ï¥Î 16 ¦ì¤¸µ{¦¡ªº¤H¤j·§¤w¸g«Ü¤Ö¤F¡A·L³n¨M¤ß©ß±óÂÂ¥]µö¡A¤~¤£¤ä´© MZ ®æ¦¡¡A¦ýÁÙ¬O¤£´±¤£¤ä´© PE ®æ¦¡ªº°õ¦æÀÉ¡C¤p¤ì°¸±N³o¨Ç EXE ¥i°õ¦æÀÉ¡A»P¤ä´©ªº§@·~¨t²Î»s§@¦¨¤Uªí¡G

EXE ®æ¦¡¤ä´©ªº§@·~¨t²Î
MZDOS¡BWindows 1.x¡ã3.x¡B32 ¦ì¤¸ªº Windows 95/98/Me/XP/Vista/7/8.x/10
NEWindows 1.x¡ã3.x¡B32 ¦ì¤¸ªº Windows 95/98/Me/XP/Vista/7/8.x/10
PE32 ¦ì¤¸¤Î 64 ¦ì¤¸ªº Windows 95/98/Me/XP/Vista/7/8.x/10
PE¡Ï64 ¦ì¤¸ªº Windows 95/98/Me/XP/Vista/7/8.x/10

¦³¤F¤Wªí¤Î«e¤@¬q©Ò±Ô­zªºÆ[©À´Nª¾¹D¡AMZ ®æ¦¡ªº EXE ¥i°õ¦æÀÉ¡A¯à¦b 32 ¦ì¤¸ªº Windows 7 §@·~¨t²Î¤U°õ¦æ¡A¦ý¤£¯à¦b 64 ¦ì¤¸ªº Windows 7 §@·~¨t²Î¤U°õ¦æ¡C¦Ó PE¡Ï ®æ¦¡ªº EXE ¥i°õ¦æÀÉ¥u¯à¦b 64 ¦ì¤¸ªº Windows 7 §@·~¨t²Î¤U°õ¦æ¡A¦Ó¤£¯à¦b 32 ¦ì¤¸ªº Windows 7 §@·~¨t²Î¤U°õ¦æ¡C

ÁöµM EXE Àɦ³³\¦h¤£¦Pªº®æ¦¡¡A¦ý¬O¦b³oùؤp¤ì°¸¶È¤¶²Ð¦p¦ó¼¶¼g MZ ®æ¦¡ªº EXE ¥i°õ¦æÀÉ¡CMZ ®æ¦¡ªº EXE ¥i°õ¦æÀÉ»P COM ¥i°õ¦æÀɳ̤jªº¤£¦P¡A´N¬O EXE ¦³¦h­Ó°Ï¬q¡C

¦b DOS ùØ¡A°Ï¬q ( segment ) ¬O«ü¤@¶ô³sÄòªº°O¾ÐÅé¡A¨ä¤j¤p³Ì¦h¥u¦³ 64KB¡A¤]´N¬O 65536 ­Ó¦ì¤¸²Õ¡C°Ï¬q¶}©lªº¦ì§}¨Ã«D¥ô·Nªº¦ì§} ( ³oùتº¦ì§}¬O«ü¡u¹êÅé¦ì§}¡v¡A¤£¬O¡u°Ï¬q¡G°¾²¾¦ì§}¡v¸Ô²Ó±¡§Î¨£²Ä¤@³¹ )¡A¥u¦³¯à³Q 16 ¾ã°£ªº¦ì§}¤~¯à¬O°Ï¬q¶}©l¦ì§}¡A¥H¤Q¤»¶i¦ìªí¥Üªº¸Ü¡A´N¬O¹êÅé¦ì§}³Ì¥kÃ䨺¤@¦ì¥²¶·¬O¡u0¡v¡A³o¼Ëªº¦ì§}ºÙ¬°¡u¸`¡v( paragraphs )¡C



¥H²©ö¤è¦¡«Å§i°Ï¬q

MZ ®æ¦¡ªº EXE ¥i°õ¦æÀɦܤ֥]§t¤T­Ó°Ï¬q¡A¤À§O©ñµÛµ{¦¡½X¡B¸ê®Æ»P°ïÅ|¡A¦]¦¹¦b¼¶¼g²Õ¦X»y¨¥®É¡A´N­n¤À§O«Å§i³o¤T­Ó°Ï¬q¡C«Å§i°Ï¬qªº¤è¦¡¦³¨âºØ¡G①²©ö¤è¦¡»P②§¹¾ã¤è¦¡¡C¥ý»¡²Ä¤@ºØ¡C¥H²©ö¤è¦¡«Å§i°Ï¬q®É¡A¥u­n¼g¥X¤@¨Ç°²«ü¥O¡A²ÕĶ¾¹·|¦Û°Ê¨Ï¥Î¹w³]ªº°Ï¬q¦WºÙ¤ÎÄÝ©Ê¡A°£¤F¤è«K¤§¥~¡A²©öªº°Ï¬q«Å§i¯à·f°t·L³nµo°âªº°ª¶¥»y¨¥½sĶ¾¹¡A¦]¦¹«Ü®e©ö»P¤§²£¥Íªº¥ØªºÀÉÁpµ²¡C( ¨£µù¤@ )


.CODE¡B.DATA »P .STACK

¦b²Ä¥|³¹®É¡A«Å§iµ{¦¡½X°Ï¬q»P¸ê®Æ°Ï¬q¡A¤À§O¥Î .CODE »P .DATA °²«ü¥O¡F¦Ó°ïÅ|°Ï¬q«h¨Ï¥Î .STACK °²«ü¥O¡C³o¤T­Ó°²«ü¥O»yªk¦p¤U¡G

.CODE   ¡i°Ï¬q¦WºÙ¡j
.DATA
.STACK  ¡i°ïÅ|¤j¤p¡j

«Å§iµ{¦¡½X°Ï¬q¥Î .CODE °²«ü¥O¡A«á­±±µµÛªº°Ï¬q¦WºÙ¥i¥H¬Ù²¤¡A¦pªG¬Ù²¤¡A¦b TINY¡BSMALL¡BCOMPACT¡BFLAT °O¾ÐÅé¼Ò¦¡®É¡Aµ{¦¡½X°Ï¬qªº¤º©w¦WºÙ¬O¡u_TEXT¡v¡F¦pªG¬O MEDIUM¡BLARGE¡BHUGE ¼Ò¦¡®É¡A¤º©wªº¦WºÙ¬O¡u°Ï¬q¦WºÙ_TEXT¡v¡C

©w¸q¸ê®Æ°Ï¬q¥Î .DATA °²«ü¥O¡A¤£½×°O¾ÐÅé¼Ò¦¡¬°¦ó¡A¨ä¦WºÙ³£¬O¡u_DATA¡v¡C

©w¸q°ïÅ|°Ï¬q¥Î .STACK °²«ü¥O¡A«á­±¥i¥H±µ°ïÅ|¤j¤p¡A¨ä³æ¦ì¬O¦ì¤¸²Õ¡A¦pªG¬Ù²¤ªº¸Ü¡A¤º©w­È¬O 1024 ¦ì¤¸²Õ¡C¹ï¤j³¡¤Àªºµ{¦¡¦Ó¨¥¡A1024 ­Ó¦ì¤¸²Õªº°ïÅ|¤w¸g¨¬°÷¤F¡C¤£½×°O¾ÐÅé¼Ò¦¡¬°¦ó¡A°ïÅ|°Ï¬qªº¦WºÙ³£¬O¡uSTACK¡v¡C°ïÅ|ªº¦ì§}·|¨ü¨ì¡u.MODEL¡vªº¼vÅT¡A¦³Ãö¡u.MODEL¡vªº³]©w½Ð°Ñ¦Ò²Ä¥|³¹¡C¥D­nªº¬O°ïÅ|¦³¨âºØ©Ê½è¡GNEARSTACK »P FARSTACK¡A«eªÌªí¥Ü°ïÅ|°Ï¬q»P¸ê®Æ°Ï¬q¦b¦P¤@°Ï¬q¡F«áªÌªí¥Ü°ïÅ|°Ï¬q»P¸ê®Æ°Ï¬q¦b¤£¦P°Ï¬q¤º¡C


.STARTUP »P .EXIT

©w¸q¦n¤Fµ{¦¡½X¡B¸ê®Æ¡B°ïÅ|¤T­Ó°Ï¬q¤§«á¡AÁÙ­n§â°Ï¬q¼È¦s¾¹¤À§O«ü¦V³o¤T­Ó°Ï¬qªº¦ì§}¡A¤]´N¬O­n³]©w CS¡BDS¡BSS ¤T­Ó°Ï¬q¼È¦s¾¹¤§­È¡C§â CS ¼È¦s¾¹¤§­È³]¬°µ{¦¡½X°Ï¬qªº¦ì§}¡A¬O¥Ñ DOS ¨t²Î¨Ó¤À°tªº¤£¥Î§Ú­Ì·Ð´o¡A§Ú­Ì­n¾á¤ßªº¬O DS¡BSS ¤§­È¶·¥Ñµ{¦¡³]©w¡A³Ì²³æªº¤èªk¬O¨Ï¥Î .STARTUP °²«ü¥O§Y¥i¡C

ÁöµM»¡¤@­Ó°Ï¬q³Ì¦h¥i¹F 64KB ªº¤j¤p¡A¦ý¹ï©ó¤j¦h¼Æ¤p«¬µ{¦¡¦Ó¨¥¡A³£µLªk¹F¨ì¡A¤×¨ä¬O°ïÅ|°Ï¬q¡C¦pªG¸ê®Æ°Ï¬q¤j¤p»P°ïÅ|°Ï¬q¤j¤p¥[°_¨Ó¤£¶W¹L 64KB¡A¨º»ò°²¨Ï§â¥¦­Ì©ñ¦b¦P¤@­Ó°Ï¬q¡A¤]´N¬O DS »P SS ¬Û¦P¡A¦P®É¤p¤ßªºÅý SP ¤£·|Âл\±¼¨ì¯u¥¿¦s©ñ¸ê®Æªº¦a¤è ( ÁÙ°O±o°ïÅ|°Ï¬q¬O¥Ñ°ª¦ì§}¦V§C¦ì§}¨Ï¥Î )¡A¨º»ò§Ú­Ì´N¯à¥Î DS:BX ª½±µ¦s¨ú°ïÅ|¡A¤Ï¹L¨Ó¤]¥i¥H¥Î SS:SP ª½±µ¦s¨ú¸ê®Æ¡C¹³³o¼Ëªº¸ê®Æ°Ï¬q©M°ïÅ|°Ï¬q¡A¥iµø¬°¤@­Ó¸s²Õ¡AºÙ¬°°Ï¬q¸s²Õ ( DGROUP )¡C

¦Ó .STARTUP ´N¬O¬°¤F¹F¨ì³o­Ó¥Øªº¤S¯à²¤Æµ{¦¡³]­p®vªº¤u§@¡C©³¤U¤p¤ì°¸´NÁ|¤U­±ªº hellow1.asm ¬°¨Ò¤l¨Ó»¡©ú .STARTUP ¦p¦ó¿ì¨ìªº¡G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.MODEL  SMALL,C
.386
.STACK
;*******************************************************************************
.DATA
msg     DB      "Hellow, World.$"
;*******************************************************************************
.CODE
        .STARTUP
        mov     dx,OFFSET msg
        mov     ah,9
        int     21h
        .EXIT   0
;*******************************************************************************
END

¥Î¡uml hellow1.asm¡v²ÕĶ¨Ã³sµ²¦¨¥\«á¡A¥Î¡usymdeb hellow1.exe¡v¸ü¤J¡AÆ[¬Ý¤@¶}©l¼È¦s¾¹ªºªì©l­È¤Î¤Ï²ÕĶªºµ²ªG¬O¡G

E:\DOS\EXE>symdeb hellow1.exe [Enter]
Microsoft (R) Symbolic Debug Utility  Version 4.00
Copyright (C) Microsoft Corp 1984, 1985.  All rights reserved.

Processor is [80286]
-r [Enter]
AX=0000  BX=0000  CX=002B  DX=0000  SP=0400  BP=0000  SI=0000  DI=0000  
DS=1543  ES=1543  SS=1556  CS=1553  IP=0000   NV UP EI PL NZ NA PO NC 
1553:0000 B85415         MOV	AX,1554                            
-u 0 1a [Enter]
1553:0000 B85415         MOV    AX,1554
1553:0003 8ED8           MOV    DS,AX
1553:0005 8CD3           MOV    BX,SS
1553:0007 2BD8           SUB    BX,AX
1553:0009 C1E304         SHL    BX,04
1553:000C 8ED0           MOV    SS,AX
1553:000E 03E3           ADD    SP,BX
1553:0010 BA0C00         MOV    DX,000C
1553:0013 B409           MOV    AH,09
1553:0015 CD21           INT    21
1553:0017 B8004C         MOV    AX,4C00
1553:001A CD21           INT    21
-

¹ï·Ó­ì©lµ{¦¡¡A¤W­±ÂŦrªºµ{¦¡´N¬O .STARTUP §@¥Î«á²K¥[ªºµ²ªG¡C²Ä¤@¦æ¬O§â 1554H ²¾¤J AX¡A³o 1554H ¨ä¹ê´N¬O¸ê®Æ°Ï¬qªº¦ì§}¡A³o¬O¥Ñ DOS ¥H¤Î EXE ªºÀÉ®×ÀYªí¦@¦P¨M©wªº¡A¨Ã¤£¬O§Ú­Ì©Ò¯à±±¨îªº¡C°ïÅ|ªº¦ì§}³q±`¤ñ¸ê®Æ°Ï¬q°ª¡A¦]¦¹ SS ªº­È«h¬O¥Ñ¸ê®Æ°Ï¬qªº¤j¤p¨M©w¡C¹³ hellow1.exe ªº¸ê®Æ°Ï¬q«e­± 12 ­Ó ( ¨äµ{¦¡½X¥i¥H¥Ñµ{¦¡½X°Ï¬q 1553:0010 ³B±oª¾ ) ¦ì¤¸²Õ¨S¨Ï¥Î¡A¯u¥¿ªº¸ê®Æ¦³ 15 ­Ó¦ì¤¸²Õ ( §Y msg ¦r¦ê¤j¤p )¡A¦]¦¹¸ê®Æ°Ï¬q¹ê»Ú¤W¦³ 27 ­Ó¦ì¤¸²Õ¡CÁÙ°O±o«e­±»¡¹L¨C­Ó°Ï¬q°_©lªº¹êÅé¦ì§}¥²¶·¬O 16 ªº¾ã¼Æ­¿¡A27 °£¥H 16 ¬O 1 ¾l 11¡A¦]¦¹­n¥Î¨â­Ó¸`¨Ó®e¯Ç¡C©Ò¥H SS ¤§­È¤ñ AX ¦h 2¡A¬G¤@¶}©l¡ASS ¬° 1556H¡C

¦A¬Ý¾í¦â¦rªº SP ­È¬° 400H¡A´«ºâ¦¨¤Q¶i¦ì¬O 1024¡A¥ç§Y .STACK ªº¹w³]­È¡Cºî¦X¥H¤W©Ò»¡¡A¦pªG²{¦b­n§â SS ³]¦¨©M DS ¤@¼Ë¡A¦P®É¤S¤£¯à§âÂмg­ì¨Óªº¸ê®Æ¡A¦]¦¹ SP ¥²¶·¦A¦h¥[¤@¨Ç¡C¨º»ò­n¥[¤W¦h¤Ö©O¡Hµª®×«Ü©úÅã¡A´N¬O¸ê®Æ°Ï¬qªº¤j¤p¡A¦P®É¤S­n²Å¦X¤@­Ó°Ï¬q¥²¶·¥Ñ¡u¸`¡vªº¦ì§}¶}©l¡AÅãµM´N¬O 20H ¤F¡C

ÁA¸Ñ¤F³o­Ó¹Lµ{¡A.STARTUP ©Ò°µªº¨Æ±¡´N«Ü²³æ¤F¡A­º¥ý§â DS ³]©w¸ê®Æ°Ï¬q©Ò¦b¦ì§} ( ¨äµ{¦¡½X¦bµ{¦¡½X°Ï¬qªº 1553:0000¡ã1553:0003 )¡A±µ¤U¨Óªº¨â¦æºâ¥X¸ê®Æ°Ï¬q¦û¤F¦h¤Ö¸`¡AµM«á 1553:0009 ³B§â¸`­¼¥H 16 ±o¨ì¦û¤F¦h¤Ö¦ì¤¸²Õ¡AÂŦrªº³Ì«á¨â¦æ´N¬O³]©w¦n·sªº SS:SP¡C

¦pªGµ{¦¡¨Ï¥Î .STARTUP ¨Ó²¤Æªì©lµ{¦¡¡A¨º»ò¦b­ì©lµ{¦¡µ²§Àªº END °²«ü¥O¥i¥H¤£¥²«ü©wµ{¦¡ªº¶i¤JÂI¡A§Y¨Ï¼g¥X¨Ó¤]·|³Q²ÕĶ¾¹©¿²¤¡C²z¥Ñ«Ü²³æ¡A¬JµM¤w¸g«ü©w .STARTUP¡A´Nªí¥Üµ{¦¡ªº¶i¤JÂI´N¦b³o¨à¤F¡C

Æ[¹î­ì©lµ{¦¡²Ä 13 ¦æ¡A³o¬O¤@­Ó·sªº°²«ü¥O¡u.EXIT 0¡v¡A¥¦ªº»yªk¨ä¹ê¬O

.EXIT   value

value ºÙ¬°µ²§ô½X ( exit code )¡A¬O¤@­Ó¦ì¤¸²Õ¤j¤pªº¼Æ­È¡A¥ç§Y value ªº½d³ò¥²¶·¦b 0¡ã255 ¤§¶¡¡ADOS ªº§å¦¸ÀÉ ( batch file ) ¥i¥H§Q¥Î³o­Ó°h¥X½X¶i¦æ³B²z¤u§@¡C¦A¹ï·Ó­ì©l½X¤Î¤Ï²ÕĶµ²ªG¡A·|µo²{ .EXIT ·|²K¥[ÃB¥~ªºµ{¦¡½X¡A¡uMOV AX,4C00¡v»P¡uINT 21H¡v¡A«Ü©úÅã³o¬O¤@­Ó DOS ªA°Èµ{¦¡¡A¨ä¥\¯à¬Oµ²§ôµ{¦¡¡A±N±±¨îÅv¤ÏÁÙµ¹ DOS §@·~¨t²Î¡C


µ²§ôµ{¦¡¨Ãªð¦^°h¥X½Xµ¹ DOS

µ²§ôµ{¦¡¡A§â±±¨îÅvÁÙµ¹ DOS
¿é¤J¡GAH¡×4C
¡@¡@¡@AL¡×°h¥X½X
°õ¦æ¡GINT 21

©Î³\¦³¤H·|°Ý¡A¬°¦ó¤£¹³¥H«e»s§@ COM ÀɮɡA¨Ï¥Î¡uINT 20H¡v¨Óµ²§ôµ{¦¡©O¡H­ì¦]¬O¦]¬°¦b EXE ÀÉ°õ¦æ®É¡A³q±`·|§ïÅÜ DS¡A¤]´N¬O»¡ DS ¤w¸g¤£¬O­ì¨Ó DOS ¥æµ¹µ{¦¡ªº¼Æ­È¤F¡A©Ò¥H EXE Àɤ£¥Î¡uINT 20H¡vµ²§ôµ{¦¡¡C¨º»ò¡ACOM ÀɬO§_¥i¥H¥Î AH¡×4CH/INT 21H µ²§ôµ{¦¡©O¡Hµª®×¬O¥i¥Hªº¡A§A¥i¥H¦Û¦æ¸Õ¸Õ¡C


¤pµ²

¤W­±ªºµ{¦¡¬[ºc¡A¥i¥H»¡¬O©Ò¦³¤p«¬µ{¦¡ªº½d¥»¡A¦]¦¹¤p¤ì°¸¯S§O¼g¦b¤U­±¡G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.MODEL  SMALL,C
.386
.STACK
;*******************************************************************************
.DATA
;¦s©ñ¸ê®Æªº¦a¤è
;*******************************************************************************
.CODE
;-------------------------------------------------------------------------------
;¦s©ñ°Æµ{¦¡ªº¦a¤è
;-------------------------------------------------------------------------------
        .STARTUP
        ;¦s©ñµ{¦¡½Xªº¦a¤è
        .EXIT   value
;*******************************************************************************
END


¥H§¹¾ã¤è¦¡«Å§i°Ï¬q

SEGMENT »P ENDS

¥Î§¹¾ãªº¤è¦¡«Å§i°Ï¬q®É¡A¥²¶·¨Ï¥Î¤@¹ï SEGMENT/ENDS °²«ü¥O¡A¥¦ªº»yªk¬O¡G

name    SEGMENT [[align]] [[READONLY]] [[combine]] [[use]] [['class']] 
        statements
name    ENDS

statements ¬O¦b SEGMENT »P ENDS ¤§¶¡ªºµ{¦¡½X©Î¸ê®Æ¡A³o¨Çµ{¦¡½X©Î¸ê®Æ´N¬O¸Ó°Ï¬qªº¤º®e¡C

name ¬O°Ï¬q¦WºÙ¡A¥i¦Û¥Ñ³]©w¦ý¤£¥i¥H¬O¼È¦s¾¹¦WºÙ¡B«ü¥O¦WºÙµ¥µ¥²ÕĶ¾¹«O¯d¦r¡C¦b­ì©lµ{¦¡¤¤¡A¦P¦WºÙªº°Ï¬q§Y¨Ï¤À¶}¨Ó¼g¡A¤¤¶¡¹jµÛ¨ä¥L°Ï¬q¡A³sµ²¾¹ÁÙ¬O·|§â¥¦­Ì¦X¨Ö¦¨¦P¤@­Ó°Ï¬q¡C¦pªG§Aªºµ{¦¡¬O¥Ñ³\¦h¼Ò²Õ²Õ¦¨ªº¤jµ{¦¡¡A¤£¦P¼Ò²Õ¤º¦pªG¦³¬Û¦P¦WºÙªº°Ï¬q¤]·|³Q³sµ²¾¹¦X¨Ö¦¨¦b¦P¤@°Ï¬q¤º¡A°£«D combine ³]¬° PRIVATE¡A´N¤£·|¦X¨Ö¦P¦WºÙªº°Ï¬q¡C

align ¬O±Æ¦C§Î¦¡¡A¬O«ü°Ï¬q°_©l¦ì§}ªº³W«h¡A¥i¥H¬O¤U­±´XºØ§Î¦¡¡G

  1. BYTE¡G¥Ñ¬Y¤@¦ì¤¸²Õ¶}©l¡A¤]´N¬O¥ô·N¦ì§}¶}©l¡Aµø¸ü¤J DOS ÅX°Êµ{¦¡¦h¹è¥H¤Î«e­±°Ï¬q¤j¤p¨M©w¡C
  2. WORD¡G¥Ñ¬Y¤@¦r²Õ¶}©l¡A¤]´N¬O±q°¸¼Æ¦ì§}¶}©l¡C¤]´N¬O»¡°Ï¬qªº°_©l¦ì§}¬°°¸¼Æ¦ì§}¡C
  3. DWORS¡GDWORD ¬OÂù¦r²Õªº·N«ä¡A¤@­ÓÂù¦r²Õ¬O 4 ­Ó¦ì¤¸²Õ¡C¤]´N¬O»¡°Ï¬qªº°_©l¦ì§}¥²¶·¬° 4 ©Ò¯à¾ã°£ªº¦ì§}¡C
  4. PARA¡G¥Ñ¬Y¤@¸`¶}©l¡A¸`ªº­^¤å¬O PARAGRAPH¡A¤@¸`ªº¤j¤p¬O 10H ­Ó¦ì¤¸²Õ¡A¤]´N¬O¤Q¶i¦ìªº 16 ­Ó¦ì¤¸²Õ¡C¤]´N¬O»¡°Ï¬qªº°_©l¦ì§}¥²¶·¬° 16 ©Ò¯à¾ã°£ªº¦ì§}¡C¦pªG¬Ù²¤ align¡A¹w³]­È¬O PARA¡C
  5. PAGE¡G¥Ñ¬Y¤@­¶ ( PAGE ) ¶}©l¡A¤@­¶¬O 100H ­Ó¦ì¤¸²Õ¡C¤]´N¬O»¡°Ï¬qªº°_©l¦ì§}¥²¶·¬° 100H ©Ò¯à¾ã°£ªº¦ì§}¡C

READONLY ¬OÅý²ÕĶ¾¹±N¦¹°Ï¬q³]¬°°ßŪ°Ï¬q¡A·N«ä¦b³o°Ï¬qªº¸ê®Æ¥u¯àŪ¨ú¤£¯à¼g¤J¡C²ÕĶ¾¹·|Àˬd­ì©l½X¤ºªºµ{¦¡¦³¨S¦³±N¸ê®Æ¼g¤J³o­Ó°Ï¬q¤º¡A¦pªG¦³´Nµo¥Í¿ù»~¡C³o¦b³]­p«OÅ@¼Ò¦¡ªºµ{¦¡©M³]­p¦³Ãö ROM ªºµ{¦¡®É«Ü¦³¥Î¡CREADONLY ¥i¥H¬Ù²¤¡Aªí¥Ü¦¹°Ï¬q¥iŪ¥i¼g¡C

combine ¬O«ü¦X¨Ö§Î¦¡¡A¬O«ü¥Ü³sµ²¾¹¦p¦ó³B²z¤£¦P¼Ò²Õªº°Ï¬q¡A¥i¥H¬O¤U­±´XºØ±¡§Î¡G

  1. PRIVATE¡G¤£»P¨ä¥L°Ï¬q¦X¨Ö¡A§Y¨Ï¦P¦WºÙªº°Ï¬q¤]¤@¼Ë¡A³o¬O¹w³]­È¡C
  2. PUBLIC¡G¨ã¦³¬Û¦P¦WºÙ¥B¬Û¦PÃþ§O¦Wªº°Ï¬q¦X¨Ö¦¨¤@­Ó°Ï¬q¡C( ¨£²Ä 25 ³¹ )
  3. COMMON¡G¨ã¦³¬Û¦P¦WºÙªº°Ï¬q¦X¨Ö¦¨¤@­Ó°Ï¬q¡A¦ý³o¨Ç°Ï¬q·|­«Å|¦b¤@°_¡A¦]¦¹³Ì«áªº°Ï¬qªø«×¬O³Ì¤jªº°Ï¬q¡C¤]¦]¬°¨ã¦³ COMMON ªº°Ï¬q·|­«Å|¡A¦]¦¹¸Ó°Ï¬q¤ºªºªì©l¸ê®Æ¤£¥i¾a¡C
  4. AT ¦ì§}¡G°Ï¬q³Q¸m©ó¯S©w¦ì§}¡C¦ý¬O¦b­ì©lµ{¦¡¤¤¡A¤£¯à¦b³]©w¬° AT ªº°Ï¬qùؼg¤Wµ{¦¡½X©Î¬O¤wªì©lªº¸ê®Æ¡A¾¨ºÞ¦p¦¹¡A¥¦¦b¥i¥H«ü©wµø°T°O¾ÐÅé©Î¤¤Â_¦V¶qªí®É«Ü¦³¥Î¡C
  5. STACK¡Gªí¥Ü¦¹°Ï¬q¬°°ïÅ|°Ï¬q¡C¤@¯ë¦Ó¨¥¡A¤@­Óµ{¦¡¥²¶·³]¥ß¤@­Ó°ïÅ|°Ï¬q¡A°£«D¬O»s§@ COM ¥i°õ¦æÀɩάO DLL ( °ÊºA°ÊºA³sµ²µ{¦¡®w )¡C
  6. MEMORY¡G»P PUBLIC ¦P¸q¡C

use ¬O³]©w°Ï¬q¤ºªº°¾²¾¦ì§}¥H¤Î¹w³]ªº¹Bºâ¤¸¬O 16 ¦ì¤¸©Î 32 ¦ì¤¸¡C¦b»¡©ú use ¤§«e¡AÀ³¸Ó­n¥ýª¾¹D¡AMASM 6.11 ¤£¶È¯à¼¶¼g DOS µ{¦¡¡A¤]¯à¼¶¼g 32 ¦ì¤¸ªº Windwos µ{¦¡¡C«eªÌ¬O 16 ¦ì¤¸ªº§@·~¨t²Î¡A¥Î 16 ¦ì¤¸ªø«×ªí¥Ü°¾²¾¦ì§}¡A¦]¦¹³Ì¤j¥u¯à¬O 64KB¡A³o¤]´N¬O¤@­Ó°Ï¬q³Ì¤jªºªø«×¤F¡F«áªÌ¬O 32 ¦ì¤¸§@·~¨t²Î¡A¥Î 32 ¦ì¤¸ªí¥Ü°¾²¾¦ì§}¡A³Ì¤j¥i¹F 4GB¡C

¨º»ò²ÕĶ¾¹¦p¦ó§P§O­n²ÕĶ¦¨ 16 ¦ì¤¸ªºµ{¦¡ÁÙ¬O 32 ¦ì¤¸¡H³o­n¬Ý­ì©l½X¤@¶}©l .MODEL ©M .386 ©Î .486 ªº¶¶§Ç¤F¡C¦pªG¬O .MODEL ¦b«e¡A²ÕĶ¾¹·|»s§@ 16 ¦ì¤¸ªº DOS µ{¦¡¡F¤Ï¤§«h»s§@ 32 ¦ì¤¸ªº Windows µ{¦¡¡C

¾¨ºÞ¦p¦¹¡A§Ú­ÌÁÙ¬O¥i¥H»s§@¤@­Óµ{¦¡¤¤¦³¨Ç°Ï¬q¬O 16 ¦ì¤¸ªº¡A¦³¨Ç¬O 32 ¦ì¤¸ªº¡A¨âºØ¤£¦P¦ì¤¸¦ì§}ªº²V¦Xµ{¦¡¡A³oºØ±¡§Î¤j¦h¥Î©ó§@·~¨t²Î¡C³o®É­Ô´N­n¥Î use ¨Ó¨M©w­þ¨Ç°Ï¬q¬O 16 ¦ì¤¸¡A­þ¨Ç¬O 32 ¦ì¤¸¡A¦]¦¹ use ¦³¨âºØ¿ï¶µ¡GUSE16 »P USE32¡A«Ü©úÅã«eªÌ¬O 16 ¦ì¤¸ªº¦ì§}¡A«áªÌ¬O 32 ¦ì¤¸ªº¦ì§}¡C


ASSUME

¦³¨Ç x86 «ü¥O·|°²©w¹w³]°Ï¬q¡A¨Ò¦p PUSH¡BPOP ¬O°²©w¦b SS ©Ò«üªº°Ï¬q¤º¦s¨ú¸ê®Æ¡AMOV «ü¥O«h¬O°²©w¦b DS ©Ò«üªº°Ï¬q¤º¦s¨ú¸ê®Æ¡C¦]¦¹¡AÁÙ­n¦³­Ó°²«ü¥O¨Ó§i¶D²ÕĶ¾¹¡A­þ­Ó°Ï¬q¹ïÀ³­þ­Ó¼È¦s¾¹¡A³o­Ó«ü¥O´N¬O ASSUME¡C³q±`¬O¦bµ{¦¡½X°Ï¬q«Å§i¤§«á¡A´N­n¦³¤@±ø ASSUME °²«ü¥O¡A»¡©ú°Ï¬q»P°Ï¬q¼È¦s¾¹ªº¹ïÀ³Ãö«Y¡CASSUME ªº»yªk¬O¡G

ASSUME   segregister:seglocation [[,segregister:seglocation]]

¨ä¤¤ segregister ¬O°Ï¬q¼È¦s¾¹¡Aseglocation ¬O°Ï¬q¦WºÙ¡C


³]©w°Ï¬q¼È¦s¾¹¤§­È

ASSUME «ü¥Ü±N¼È¦s¾¹»P°Ï¬q¤§¶¡ªºÃö«Y§i¶D²ÕĶ¾¹¡AÅý²ÕĶ¾¹ª¾¹D¦p¦ó²ÕĶ¡A¨ä¹ê¨Ã¨S¦³§â°Ï¬q¦ì§}¶ñ¤J°Ï¬q¼È¦s¾¹¤º¡C¦]¦¹¡A¦b­ì©lµ{¦¡¤@¶}©lªº¦a¤è¡AÁÙ­n¥[¤W´X±ø x86 «ü¥OÅý DS «ü¦V¸ê®Æ°Ï¬qªº¦ì§}¡C³o¨Ç«ü¥O¦p¤U¡G

        mov     ax,¸ê®Æ°Ï¬q¦WºÙ
        mov     ds,ax

§¹¾ãµ{¦¡¦p¤U¡G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
.MODEL  SMALL,C
.386
;*******************************************************************************
mystack SEGMENT PARA    STACK   'stack'
        DB      1024 DUP (?)
mystack ENDS
;*******************************************************************************
mydata  SEGMENT PARA    PUBLIC  'data'
msg     DB      "Hellow, World.$"
mydata  ENDS
;*******************************************************************************
mycode  SEGMENT PARA    PUBLIC  'code'
        assume  cs:mycode,ds:mydata
;-------------------------------------------------------------------------------
main    PROC
        mov     ax,mydata
        mov     ds,ax

        mov     dx,OFFSET msg
        mov     ah,9
        int     21h
        mov     ax,4c00h
        int     21h
main    ENDP
;-------------------------------------------------------------------------------
mycode  ENDS
;*******************************************************************************
END     main

§â¤W­±­ì©lµ{¦¡¦s¦¨ hellow2.asm¡AµM«á¶i¤J¡uVirtual PC¡vªº¡uMS-DOS 6.20¡v¡A¤U¹F¡uml hellow2.asm¡v²ÕĶ§Y¥i¥¿±`°õ¦æ¡A°õ¦æ®É¤]¬O¦b¿Ã¹õ¤W¦L¥X¡uHellow, World!¡v´Nµ²§ôµ{¦¡¡C

³o­Óµ{¦¡²Ä 4¡ã6 ¦æ¡A³]©w°ïÅ|°Ï¬q¤j¤p¬° 1KB ( §Y 1024 ­Ó¦ì¤¸²Õ )¡A°ïÅ|°Ï¬qªº¦WºÙ¬° mydstack¡A¦Ó¦X¨Ö§Î¦¡¬°¡uSTACK¡v¡A¦X¨Ö§Î¦¡¬°¡uSTACK¡v´N·|³Q²ÕĶ¾¹µø¬°°ïÅ|°Ï¬q¡Cª`·N¨ì SEGMENT »P ENDS ¦¨¹ï¥X²{¡A¤£¥u°ïÅ|°Ï¬q¦p¦¹¡A¸ê®Æ°Ï¬q¡Bµ{¦¡½X°Ï¬q¤]¬O¦p¦¹¡C

²Ä 8¡ã10 ¦æ¬°¸ê®Æ°Ï¬q¡A¦WºÙ¬°¡umydata¡v¡A¦b«á­±²Ä 13 ¦æ¥i¥H¨£¨ì ASSUME §â¸ê®Æ°Ï¬q»P DS¡Bµ{¦¡½X°Ï¬q»P CS ¹ïÀ³°_¨Ó¡A¤]¥i¥H§â³o¤@¦æ¤À¦¨¨â¦æ¡G

ASSUME  cs:mycode
ASSUME  ds:mydata

²Ä 16 ¦æ¨ú±o mydata ªº°Ï¬q¦ì§}¨Ã¦s©ó AX ùØ¡A²Ä 17 ¦æ§â DS ¤§­È³]¬° AX¡C¥i¯à·|¦³¤H°Ý¡A¬°¦ó¤£Â²³æ¥Î¤@¦æ¡umov ds,mydata¡v´N¦n¤F¡A³o¬O¦]¬°¦b x86 ªº MOV «ü¥O¤£¯à§â±`¼Æ¦s¤J°Ï¬q¼È¦s¾¹ªº«ü¥O¡A¥u¯à§â³q¥Î¼È¦s¾¹¦s¤J°Ï¬q¼È¦s¾¹ùØ¡A¬G¥u¯à¥Î³o¼Ë¶¡±µªº¤èªk¡C

¨ä¥Lªºµ{¦¡½XÀ³¸Ó¤£¶·¦h°µ¸ÑÄÀ¤F¡C


µù¤@

¼Ò²Õ ( module ) ¥i¥H·Q¹³¦¨¬O°õ¦æ¬Y¥ó¯S©w¤u§@ªºµ{¦¡¡C·í­n¶}µo¬Y­Ó¤j«¬³nÅé®É¡A±`±`·|±N¥¦¤À¦¨¼Æ­Ó¤pµ{¦¡¡A¥æµ¹¤£¦Pªºµ{¦¡³]­p®v¡A¤À§O¦P®É¼¶¼g¡A³Ì«á¥u»Ý¦A¥H¥Dµ{¦¡±N¦U­Ó¤pµ{¦¡³sµ²°_¨Ó¡A´N¯à»s§@¦¨¤@­Ó§¹¾ãªºµ{¦¡¡C³o¨Ç¤pµ{¦¡´N¯à¬Ý¦¨¬O¼Ò²Õ¡A¦Ó³o¼Ë³]­p³nÅ骺¤è¦¡ºÙ¬°¼Ò²Õ¤Æ¡C

¹³·L³nªº¤å®Ñ³B²z³nÅé¡A¡uWORD¡v¡A¥»¨­°£¤F³B²z¤å¦r¤§¥~¡AÁÙ·|¦h¤FÃB¥~ªº¥\¯à¡A¨Ò¦p¤èµ{¦¡¡B¹Ï¤ùµ¥¥\¯à¡A´NÀ³¸Ó¬O¥Ñ¤£¦Pªº³æ¦ì³]­p¦Ó¦¨ªº¡C