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¿Í °°°Ô ÇØÁØ´Ù. ÀÌ º¯¼ö´Â ÄÚµå ¼¼±×¸ÕÆ® ¾È¿¡ Àֱ⠶§¹®¿¡ ·Ò¿¡ ½Ç¸± °æ¿ì´Â ¹Ýµå½Ã ÃÊ ±â°ªÀ» Á¤ÇØ ÁÖ¾î¾ß Çϸç, ·¥¿¡ Äڵ尡 ½Ç¸± °æ¿ì´Â ³ªÁß¿¡ ÃʱâÈ­ ÇÒ ¼öµµ ÀÖ´Ù.