8086°è¿ CPUÀÇ ±¸Á¶
¡¡8086°ú ȣȯÇÏ´Â CPU´Â 1MB(220)ÀÇ ¸Þ¸ð¸® ¾îµå·¹½º¸¦ °¡Áú
¼ö ÀÖ´Ù. 1MBÀÇ ¸Þ¸ð¸®¸¦ ÁöÁ¤Çϱâ À§Çؼ± 20b itÀÇ ·¹Áö½ºÅÍ°¡ ÇÊ¿äÇѵ¥ 86°è¿ÀÇ
CPU´Â 16bitÀ̹ǷΠsegment¿Í offsetÀ¸·Î ±¸ºÐÇÏ¿© ¸Þ¸ð¸®¸¦ ÁöÁ¤ÇÏ°Ô µÈ´Ù.
CPU¿¡ Àü¿øÀÌ µé¾î°¡´Â ¼ø°£ ȤÀº ¸®¼ÂÀÌ µÉ ¶§ CPU´Â 0xFFFF0¹øÁö·Î Á¡ÇÁÇÏ°Ô
µÇ¾î ÀÖ´Ù. ¹Ù·Î ÀÌ ¹øÁö¸¦ ¸®¼Â º¤ÅͶó°í ºÎ¸¥´Ù. 8088/86 CPU ´Â 0xFFFF:0x0000À¸·Î,
80286ÀÌÈÄÀÇ CPU´Â 0xF000:0xFFF0À̹ǷΠ¾ÕÀÚ¸®ÀÇ segment¸¦ ÇÑÀÚ¸® ºø°Ü¼
offset°ú ´õÇÏ¸é µÑ´Ù 0xFFFF 0À̶ó´Â Àý´ë ¹øÁö°¡ ³ª¿À°Ô µÈ´Ù. ±×·¸´Ù¸é ¿ì¸®°¡
»ç¿ëÇÒ º¸µåÀÇ ½ÃÀÛÀº 0xFFFF0À̹ǷΠÇÁ·Î±×·¥À» ÀÌ°÷¿¡ À§Ä¡½ÃÄÑ¾ß ÇÑ´Ù. ÇÏÁö¸¸
0xFFFF0 ~ 0xFFFFF±îÁöÀÇ °ø °£Àº 16byte¹Û¿¡ ¾ÈµÇ¹Ç·Î º¸Åë ÀÌ°÷¿¡´Â ´Ù¸¥
¹øÁö·Î Á¡ÇÁÇÒ ¸í·ÉÀ» ³Ö¾î ³õ°Ô µÈ´Ù. ±×¸®°í Ưº°È÷ 0x00000 ~ 0x003FF±îÁö´Â
ÀÎÅÍ·´Æ® º¤ÅÍ ¿µ¿ªÀ¸·Î ¾²µµ·Ï ¿¹¾àÀÌ µÇ¾î ÀÖ´Ù.
Compile & Link
¡¡ÇÁ·Î±×·¥ ¼Ò½º¸¦ ½ÇÇàÆÄÀÏ·Î ÀüȯµÇ´Â °úÁ¤Àº ´ÙÀ½°ú °°Àº 2´Ü°è¸¦ °ÅÄ£´Ù.
1. ¼Ò½º¸¦ compileÀ̶õ °úÁ¤À» °ÅÄ¡°Ô µÇ¸é ¸ñÀû ÄÚµåÀÎ objÆÄÀÏÀÌ »ý¼ºµÈ´Ù.
ÀÌ ÄÚµå´Â ¼Ò½º¸¦ ±â°èÄڵ忡 °¡±õ°Ô ¹Ù²Û°ÍÀÌÁö¸¸ Á÷Á¢ ½ÇÇàÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù.
2. ÀÌ objÆÄÀÏÀ» °¡Áö°í link¶õ °úÁ¤À» °ÅÃÄ ½ÇÇàÆÄÀÏÀÎ exeÆÄÀÏÀÌ ¸¸µé¾îÁö°Ô
µÈ´Ù. link´Â ¼Ò½º¸¦ compileÇÑ obj¿Í ½ºÅ¸Æ®¾÷ ÄÚµåÀÎ C0x.OBJ, ±×¸®°í ¿©·¯
libraryÆÄÀÏ°ú ÇÕÄ¡´Â °úÁ¤ÀÌ´Ù. C0x.OBJÀÇ x¶õ ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó Ʋ·ÁÁö°Ô
µÈ´Ù. °¡·É small modelÀ̸é C0S.OBJ, large modelÀ̸é C0L.OBJ¸¦ ¸»ÇÑ´Ù. ¹Ù·Î
ÀÌ C0x.OBJ¶ó´Â ¸ñÀû Äڵ尡 ¹Ø¿¡¼ ¾ê±âÇÒ ½ºÅ¸Æ®¾÷ ÄÚµå¶õ °ÍÀÌ´Ù.
Start Up Code¶õ?
¡¡¿ì¸®ÀÇ ÇÁ·Î±×·¥Àº mainÇÔ¼ö¸¦ °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é
ÀÌ mainÀº ´©°¡ È£ÃâÇÏ´Â °ÍÀ̳Ä? ÀÌ°ÍÀÌ ¹Ù·Î ½ºÅ¸Æ®¾÷ ÄÚµåÀÌ´Ù. ¿ì¸®°¡ Á¦ÀÛÇÑ
º¸µå¿¡¼ C¾ð¾î¸¦ »ç¿ëÇÏ·Á ÇÑ´Ù¸é ÄÄÆÄÀÏ·¯¿¡ °°ÀÌ µé¾îÀÖ´Â ½ºÅ¸Æ®¾÷ Äڵ带
¼öÁ¤ÇؾßÇÑ´Ù. ½ºÅ¸Æ®¾÷ ÄÚµåÀÇ ±â´ÉÀº °£´ÜÈ÷ ¾ê±âÇϸé, CPU ·¹Áö½ºÅÍ ÃʱâÈ¿Í
Á¤Àû º¯¼ö Ãʱâȸ¦ ÇÑÈÄ mainÀ» È£ÃâÇÏ´Â °ÍÀÌ´Ù.
¡¡µµ½º¿¡¼ ½ÇÇàµÉ ÇÁ·Î±×·¥ Á¦ÀÛÀ» À§ÇØ Âü°í·Î ½ºÅ¸Æ®¾÷ ÄÚµåÀÇ
7°¡Áö ´Ü°è¸¦ Àû¾î º»´Ù.
1. µµ½º¿¡ ÀÇÇØ Àü´ÞµÇ´Â ±âº»ÀûÀÎ µ¥ÀÌÅÍ´Â JCÀü¿ªº¯¼ö¿¡
ÀúÀåµÇ°í, µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®°¡ ¼¼Æ®µÈ´Ù.
2. ȯ°æ Å×ÀÌºí¿¡¼ '87='Çü½ÄÀÇ ¿£Æ®¸®¸¦ Ž»öÇÏ¿© ½Ã½ºÅÛ
Àü¿ªº¯¼ö _8087À» ¼¼Æ®ÇÑ´Ù.
3. ÀÎÅÍ·´Æ® º¤ÅÍ 0°ú 4¿¡¼ 6±îÁöÀÇ º¤Å͸¦ ÀúÀåÇÑ´Ù.
4. ½ºÅðú ÈüÀ» ÃʱâÈÇÑ´Ù. ¸ÞÀÎ ¸Þ¸ð¸®°¡ ½ºÅðú ÈüÀ»
¼ö¿ëÇÒ ¸¸ÇÑ ÃæºÐÇÑ °ø°£À» °¡Áö°í ÀÖ´ÂÁö¿¡ ´ëÇÑ Å×½ºÆ®°¡ ÇàÇØÁö°í, ³²Àº
¸Þ¸ð¸® °ø°£À» µµ½º¿¡°Ô µ¹·Á ÁØ´Ù.
5. ¼öÄ¡º¸Á¶ ÇÁ·Î¼¼¼¿Í ÀÎÅÍ·´Æ®, ȸ鿡 Á÷Á¢ÀûÀ¸·Î Á¢±ÙÇϱâ
À§ÇÑ ±âº»ÀûÀÎ µ¥ÀÌÅÍ Ã³¸® µî¿¡ ÇÊ¿äÇÑ ¿©¶ó°¡Áö ÃʱâÈ ·çƾ À» È£ÃâÇÑ´Ù.
6. argv¿Í envp ¾î·¹ÀÌ°¡ »ý¼ºµÇ°í, mainÇÔ¼ö¸¦ ºÎ¸¥´Ù.
7. exit ÇÔ¼ö°¡ ºÒ·ÁÁö°í ¼öÁ¤µÈ ÀÎÅÍ·´Æ® º¤ÅÍ´Â ¿ø·¡ °ªÀ¸·Î
µ¹·Á ³õ´Â´Ù. exit ÇÔ¼ö´Â µµ½º ÇÔ¼ö 0x4C¸¦ ºÎ¸§À¸·Î½á ÇÁ·Î±× ·¥À» Á¾°áÇÑ´Ù.
À§ 7´Ü°è¸¦ ¿ì¸®°¡ Á¦ÀÛÇÑ º¸µå¿¡ Àû¿ë½ÃŲ´Ù¸é ´ÙÀ½°ú °°Àº
´Ü°è°¡ µÈ´Ù.
¿ì¸®ÀÇ º¸µå°¡ floating point¿¬»êÀ» ÇÏÁö¾Ê°í, divide by
zero, NMI(none maskable interrupt)°°Àº ¿¹¿Ü 󸮸¦ ÇÏÁö ¾ÊÀ¸¸ç, ÇϳªÀÇ
ÇÁ·Î±×·¥¸¸ ¼öÇàÇÑ´Ù´Â Á¶°Ç¿¡¼´Â 2, 3, 5, 7´Ü°è´Â ÇÊ¿ä ¾ø°ÔµÈ´Ù.
±×·¯¹Ç·Î
1. º¯¼öÀÇ ÃʱâÈ
2. stackÃʱâÈ
3. mainÈ£Ãâ
ÀÇ 3´Ü°è·Î Ãà¾àÇÒ ¼ö ÀÖ´Ù.
C¾ð¾îÀÇ º¯¼ö ±¸Á¶
¡¡¿ì¸®°¡ C¾ð¾î¿¡¼ Àâ´Â º¯¼öÀÇ Á¾·ù´Â Å©°Ô Á¤Àû º¯¼ö(static
variable)¿Í µ¿Àû º¯¼ö(dynamic variable)°¡ ÀÖ´Ù.
Á¤Àû º¯¼ö´Â Àü¿ª º¯¼ö(global variable), Á¤Àû Áö¿ª º¯¼ö(static
local variable)·Î ³ª´©¾î Áø´Ù. ±×¸®°í ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§ ±îÁö Á¸ÀçÇϹǷÎ,
ÇÁ·Î±×·¥ ÄÚµå¿Í ¸¶Âù°¡Áö·Î ¸Þ¸ð¸®¸¦ Ç×»ó Â÷Áö ÇÑ´Ù. µ¥ÀÌÅÍ ¼¼±×¸ÕÆ® ³»¿¡
°ø°£ÀÌ È®º¸µÈ´Ù.
µ¿Àû º¯¼ö´Â Áö¿ª º¯¼ö(local variable)¸¦ ¸»ÇÑ´Ù. ±×¸®°í
ÇÔ¼ö°¡ ½ÇÇàµÉ ¶§ ±× ÇÔ¼ö ³»ºÎÀÇ º¯¼ö´Â ½ºÅÿ¡ ¿µ¿ªÀ» È®º¸ÇÏ°í, ÃʱâÈ µÇ¸ç
ÇÔ¼öÀÇ Á¾·á¿Í µ¿½Ã¿¡ ½ºÅÿ¡¼ ¿µ¿ªÀ» ÀÒ°Ô µÈ´Ù.
ÃʱⰪÀ» °¡Áö´Â Áö¿ª º¯¼ö´Â °¢ ÇÔ¼ö°¡ ÀÚµ¿À¸·Î ÃʱâÈ
ÇϹǷÎ, ½ºÅ¸Æ®¾÷ Äڵ忡¼´Â Àü¿ª º¯¼ö¿Í Á¤Àû Áö¿ª º¯¼ö Áï Á¤Àû º¯ ¼öÀÇ
Ãʱâȸ¸ ÇÏ¸é µÈ´Ù.
Á¤Àû Áö¿ª º¯¼ö´Â Àü¿ª º¯¼ö¿Í ¸¶Âù°¡Áö·Î »ý°¢ ÇÏ¸é µÈ´Ù.
´Ü º¯¼ö°¡ ¹ÌÄ¡´Â Scope¸¸ Ʋ¸± »ÓÀÌ´Ù. ±×¸®°í º¯¼ö´Â ÃʱâÈ µÈ°Í °ú ¾ÊµÈ
°ÍÀ¸·Î ³ª´ ¼ö ÀÖ´Ù. Á¤Àû º¯¼ö´Â ÃʱⰪÀ» ÁÖÁö ¾ÊÀ¸¸é ÀÚµ¿À¸·Î 0À¸·Î ¸¸µéÁö¸¸,
Áö¿ª º¯¼ö´Â ¸»±×´ë·Î ÃʱâÈ ÇÏÁö ¾Ê´Â´Ù.
int a;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ // ÃʱâȵÇÁö ¾ÊÀº Àü¿ª º¯¼ö(ÃʱâÈ ÇÏÁö ¾ÊÀº Àü¿ª º¯¼öÀÇ °ªÀº 0
int b = 1;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ // ÃʱâÈµÈ Àü¿ª º¯¼ö
void main()
{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ static int c;¡¡¡¡ // ÃʱâȵÇÁö ¾ÊÀº Á¤Àû Áö¿ª º¯¼ö
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ static int d = 2;¡¡¡¡¡¡¡¡¡¡¡¡ // ÃʱâÈµÈ Á¤Àû Áö¿ª º¯¼ö
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ int e;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ // ÃʱâȵÇÁö ¾ÊÀº Áö¿ª º¯¼ö(ÀÌ º¯¼öÀÇ ÃʱⰪÀº ¹«¾ùÀÌ µÉÁö ¸ð¸¥´Ù
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ int f = 3;¡¡¡¡¡¡¡¡¡¡ // ÃʱâÈµÈ Áö¿ª º¯¼ö
}
AssemblerÀÇ Segment
¡¡_TEXT Segment : CODE ClassÀ̸ç, ÇÁ·Î±×·¥ Äڵ尡 À§Ä¡ÇÒ
segment _DATA Segment : DATA ClassÀ̸ç, ÃʱâÈµÈ Á¤Àû º¯¼ö°¡ À§Ä¡ÇÒ segment
_BSS Segment : BSS ClassÀ̸ç, ÃʱâȸµÇÁö ¾ÊÀº Á¤Àû º¯¼ö°¡ À§Ä¡ÇÒ segment
_BSSEND Segment : STACK ClassÀ̸ç, Áö¿ª º¯¼ö°¡ ÀâÈú stack¿µ¿ªÀÇ segment¡¡
;+--------------------------------------------------------------+
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡ C_START.ASM -> C Start up code for 8088 Seriese¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;+--------------------------------------------------------------+
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ include rules.asi
;¡¡¡¡¡¡¡¡¡¡¡¡ Segment and Group declarations
_TEXT¡¡¡¡ segment byte public 'CODE'
_TEXT¡¡¡¡ ends
_DATA¡¡¡¡ segment word public 'DATA'
_DATA¡¡¡¡ ends
_BSS¡¡¡¡¡¡ segment word public 'BSS'
_BSS¡¡¡¡¡¡ ends
_BSSEND segment byte public 'STACK'
_BSSEND ends
DGROUP¡¡ GROUP _DATA, _BSS, _BSSEND
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ assume¡¡ CS:_TEXT,DS:DGROUP
;¡¡¡¡¡¡¡¡¡¡¡¡ External References
ExtProc@¡¡¡¡¡¡¡¡¡¡¡¡¡¡ main,¡¡¡¡ __CDECL__
;+---------------------------------------------------------+
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Start Up Code¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;+---------------------------------------------------------+
_TEXT¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ segment
startx¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ proc¡¡¡¡¡¡ near
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ cli
;+---------------------------------------------------------+
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Init Segment Register¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;+---------------------------------------------------------+
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ax,DGROUP
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ds,ax¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;Static variables source segment in rom
; Set up stack segment
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ax,00h
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ss,ax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ sp,8000h
;stackÀº °¨¼Ò Çϱ⠶§¹®¿¡ stackÀº ·¥ÀÇ ³¡À¸·Î ¸ÂÃá´Ù. 32kbÀÇ ·¥Àº 0~7FFF±îÁö
À̹ǷΠstack
;segment(ss)´Â 0À¸·Î stack pointer´Â 8000h·Î ÇØ ³õÀ¸¸é ·¥ÀÇ ³¡¿¡¼ºÎÅÍ
stackÀ» »ç¿ëÇÏ°Ô
;µÇ´Â °ÍÀÌ´Ù.¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ax,40h¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;start data area¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ es,ax¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;Static variables target segment in ram
; move initialized data area ( ROM --> RAM )
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ si,offset DGROUP:data@
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ di,si
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ cx,offset DGROUP:bdata@
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ sub¡¡¡¡¡¡¡¡ cx,di
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ cld
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ rep¡¡¡¡¡¡¡¡ movsb
; Reset uninitialized data crea ( RAM )
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ax,0
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ di,offset DGROUP:bdata@
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ cx,offset DGROUP:edata@
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ sub¡¡¡¡¡¡¡¡ cx,di
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ rep¡¡¡¡¡¡¡¡ stosb
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ax,40h¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ;start data area
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ds,ax
; Set up data segment & Call main() function
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ sti
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ call¡¡¡¡¡¡ main@
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ jmp¡¡¡¡¡¡¡¡ $
PubSym@¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ DGROUP@, <dw 40h>, __PASCAL__
startx¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ endp
_TEXT¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ends
;+--------------------------------------------------------------+
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Start Up Data Area¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;|¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ |
;+--------------------------------------------------------------+
_DATA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ segment
data@¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ label¡¡¡¡ byte
_DATA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ends
_BSS¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ segment
bdata@¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ label¡¡¡¡ byte
_BSS¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ends
_BSSEND¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ segment
edata@¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ label¡¡¡¡ byte
_BSSEND¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ends
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ end
int a;
int b = 1;
void main()
{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ static int c;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ static int d = 2;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ int e;
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ int f = 3;
}
À§ÀÇ ½ºÅ¸Æ®¾÷ ÄÚµå¿Í C ÇÁ·Î±×·¥À» ½ÇÇàÈÀÏ·Î ¸¸µé¾úÀ» ¶§ÀÇ MAPÆÄÀÏÀÌ´Ù.
¡¡Start¡¡ Stop¡¡¡¡ Length Name¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Class
¡¡00000H 00044H 00045H _TEXT¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ CODE
¡¡00046H 00049H 00004H _DATA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ DATA
ÀÌ°÷¿¡ b,dº¯¼ö°¡ À§Ä¡ÇÑ´Ù. b,d´Â ÃʱâÈµÈ Á¤Àû º¯¼öÀ̱⠶§¹®ÀÌ´Ù.
¡¡0004AH 0004DH 00004H _BSS¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ BSS
ÀÌ°÷¿¡ a,cº¯¼ö°¡ À§Ä¡ÇÑ´Ù. a,c´Â ÃʱâȵÇÁö ¾ÊÀº Á¤Àû º¯¼öÀ̱⠶§¹®ÀÌ´Ù.
¡¡0004EH 0004EH 00000H _BSSEND¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ STACK
Detailed map of segments
¡¡0000:0000 003A C=CODE¡¡¡¡ S=_TEXT¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=(none)¡¡ M=C0.ASM¡¡¡¡¡¡¡¡ ACBP=28
¡¡0000:003A 000B C=CODE¡¡¡¡ S=_TEXT¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=(none)¡¡ M=TEST.C¡¡¡¡¡¡¡¡ ACBP=28
¡¡0004:0006 0000 C=DATA¡¡¡¡ S=_DATA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=DGROUP¡¡ M=C0.ASM¡¡¡¡¡¡¡¡ ACBP=48
¡¡0004:0006 0004 C=DATA¡¡¡¡ S=_DATA¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=DGROUP¡¡ M=TEST.C¡¡¡¡¡¡¡¡ ACBP=48
¡¡0004:000A 0000 C=BSS¡¡¡¡¡¡ S=_BSS¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=DGROUP¡¡ M=C0.ASM¡¡¡¡¡¡¡¡ ACBP=48
¡¡0004:000A 0004 C=BSS¡¡¡¡¡¡ S=_BSS¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=DGROUP¡¡ M=TEST.C¡¡¡¡¡¡¡¡ ACBP=48
¡¡0004:000E 0000 C=STACK¡¡ S=_BSSEND¡¡¡¡¡¡¡¡¡¡¡¡¡¡ G=DGROUP¡¡ M=C0.ASM¡¡¡¡¡¡¡¡ ACBP=28
¡¡ Address¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Publics by Name
¡¡0000:0038 idle¡¡ DGROUP@
¡¡0004:000C idle¡¡ _a
¡¡0004:0006 idle¡¡ _b
¡¡0000:003A¡¡¡¡¡¡¡¡¡¡¡¡ _main
¡¡ Address¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Publics by Value
¡¡0000:0038 idle¡¡ DGROUP@
¡¡0000:003A¡¡¡¡¡¡¡¡¡¡¡¡ _main
¡¡0004:0006 idle¡¡ _b
¡¡0004:000C idle¡¡ _a
Program entry point at 0000:0000
À§ ½ºÅ¸Æ®¾÷ ÄÚµå¿Í ´ÙÀ½ ÇÁ·Î±×·¥À» ½ÇÇàÈÀÏ·Î ¸¸µé¾úÀ» ¶§ÀÇ
MAPÆÄÀÏÀÌ´Ù.
¡¡a,b¸¸ÀÌ Àü¿ª º¯¼öÀ̱⠶§¹®¿¡ ÇÁ·Î±×·¥ Àüü¿¡¼ ÂüÁ¶ÇÒ
¼ö ÀÖ´Â public¿¡ ¼ÓÇÑ´Ù.
c,d´Â Á¤Àû º¯¼öÀÌÁö¸¸ e,f¿Í °°ÀÌ Áö¿ª º¯¼öÀ̹ǷΠc,d¸¦
¼±¾ðÇÑ main¿¡¼¸¸ ÂüÁ¶ÇÑ´Ù.
DGROUP@Àº _DATA¿Í °°ÀÌ Àç¹èÄ¡ °¡´ÉÇÑ »ó¼öµéÀ» Æ÷ÇÔÇÏÁö
¾Ê±âÀ§ÇØ ¾²¿©Áø´Ù.
¿¹¸¦ µé¸é CÀÇ interruptÇÔ¼ö´Â ·¹Áö½ºÅ͵éÀ» stack¿¡ pushÇÑ
µÚ DS¸¦ DGROUP@·Î ÃʱâÈ ÇÑ´Ù.
´ÙÀ½Àº interruptÇÔ¼ö aaa()¸¦ assembly¾î·Î ¹ø¿ªÇØ º» °ÍÀÌ´Ù.
¡¡¡¡ ;¡¡¡¡¡¡¡¡
¡¡¡¡ ;¡¡¡¡¡¡ void interrupt aaa()
¡¡¡¡ ;¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ assume¡¡ cs:_TEXT
_aaa¡¡¡¡¡¡ proc¡¡¡¡¡¡ far
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ ax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ bx
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ cx
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ dx
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ es
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ ds
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ si
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ di
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ push¡¡¡¡¡¡ bp
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ bp,cs:DGROUP@
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ ds,bp
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ mov¡¡¡¡¡¡¡¡ bp,sp
¡¡¡¡ ;¡¡¡¡¡¡¡¡
¡¡¡¡ ;¡¡¡¡¡¡ {
¡¡¡¡ ;¡¡¡¡¡¡ }
¡¡¡¡ ;¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ bp
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ di
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ si
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ ds
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ es
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ dx
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ cx
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ bx
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ pop¡¡¡¡¡¡¡¡ ax
¡¡¡¡¡¡¡¡¡¡¡¡¡¡ iret¡¡¡¡¡¡¡¡
_aaa¡¡¡¡¡¡ endp
mov ax, _data / mov ds, ax¸¦ ¾²´Â ´ë½Å mov bp, cs:DGROUP@
/ mov ds, bp¿Í °°Àº Äڵ尡 ¾²ÀÎ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ±×·¯¹Ç·Î DGR OUP@¸¦ ½ºÅ¸Æ®¾÷
Äڵ忡¼ ÃʱâÈ ÇØÁÖ¾î¾ß ÇÑ´Ù. PubSym@ DGROUP@, <dw 40h>, __PASCAL__
À§¿Í °°ÀÌ ÇØÁÜÀ¸·Î ÃʱⰪÀ» 40h·Î DS¿Í °°°Ô ÇØÁØ´Ù. ÀÌ º¯¼ö´Â ÄÚµå ¼¼±×¸ÕÆ®
¾È¿¡ Àֱ⠶§¹®¿¡ ·Ò¿¡ ½Ç¸± °æ¿ì´Â ¹Ýµå½Ã ÃÊ ±â°ªÀ» Á¤ÇØ ÁÖ¾î¾ß Çϸç, ·¥¿¡
Äڵ尡 ½Ç¸± °æ¿ì´Â ³ªÁß¿¡ ÃʱâÈ ÇÒ ¼öµµ ÀÖ´Ù.
|