>>> Åͺ¸ CÀÇ ±íÀº °÷ <<< Á¦5ȸ ¾î¼Àºí¸® ÄÚµå Á¢¼Ó II Assembly Code Interface II ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú4) --------------------------------------------------------------------- 1 º»¹®¿¡ ¾Õ¼­ --------------------------------------------------------------------- Àú¹ø ȸ¿¡´Â ¾î¼Àºí¸® ÄÚµå¿Í C ·çƾ°úÀÇ Á¢¼Ó(interface)À» À§ÇØ ¾î ¼Àºí¸® ¸ðµâÂÊ¿¡¼­ °ú¿¬ ¾î¶°ÇÑ Á¶Ä¡°¡ ÃëÇØÁ®¾ß Çϴ°¡¿¡ °üÇÑ ¸î °¡Áö ±ÔÄ¢µéÀ» »ó¼¼È÷ ¾Ë¾Æº¸¾Ò´Ù. À̹ø ȸ¿¡´Â °è¼ÓÇؼ­ ´ÙÀ½ »çÇ׿¡ ´ëÇÏ¿© ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. 1. ´Ù¸¥ ¸ðµâ¿¡ Á¤ÀǵǾî ÀÖ´Â ¿ÜºÎ¸íĪ(ÇÔ¼ö¸í ¹× º¯¼ö¸í)ÀÇ ÂüÁ¶ 2. C ¸ðµâ¿¡¼­ ¾î¼Àºí¸® ¸ðµâÀÇ ÇÔ¼ö È£Ãâ 3. (½Ç)¸Å°³º¯¼öÀÇ ÂüÁ¶ 4. ÀÚµ¿º¯¼öÀÇ Á¤ÀÇ ¹× ÂüÁ¶ 5. ¾î¼Àºí¸® ¸ðµâ¿¡¼­ C ¸ðµâÀÇ ÇÔ¼ö(¶óÀ̺귯¸® Æ÷ÇÔ) È£Ãâ 6. ¾î¼Àºí¸® ¸ðµâÀÇ ¾î¼Àºí ¹æ¹ý°ú ÃÖÁ¾ÀûÀÎ ¸µÅ© ¹æ¹ý --------------------------------------------------------------------- 2 ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨°ú ½ºÅà ¼¼±×¸ÕÆ®ÀÇ Å©±â --------------------------------------------------------------------- ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â, ½ºÅÃÀÇ Å©±â¸¦ °áÁ¤ÇÏ´Â ¿ÜºÎº¯¼ö _stklen°ú ±Ù°Å¸® ÈüÀÇ Å©±â¸¦ °áÁ¤ÇÏ´Â _heaplen µÑ Áß ¾î´À ÇϳªÀÇ ÃʱâÄ¡°¡ 0ÀÏ °æ¿ì¿¡, ½ºÅà ¼¼±×¸ÕÆ®ÀÇ Å©±â°¡ Á¤È®È÷ 64K¹ÙÀÌÆ®·Î °áÁ¤µÈ´Ù. ½ÇÁ¦·Î _s tklenÀÇ ³»Á¤µÈ ÃʱâÄ¡´Â 4096ÀÌ°í _heaplenÀÇ ÃʱâÄ¡´Â 0À̱⠶§¹®¿¡ ½º Åà ¼¼±×¸ÕÆ®´Â 64K¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °¡Áø´Ù(¹°·Ð °øÀ¯µÇ´Â µ¥ÀÌÅÍ ¼¼±×¸ÕÆ® µµ Æ÷ÇÔÇؼ­). ¹Ý¸é¿¡ ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â ±Ù°Å¸® ÈüÀ̶õ °Ô ¾øÀ¸¹Ç·Î _heaplen º¯¼ö°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. µû¶ó¼­ (µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®¿Í ºÐ¸®µÈ) ½ºÅà ¼¼±×¸Õ Æ®´Â Á¤È®È÷ _stklenÀÇ ÃʱâÄ¡¸¸Å­ÀÇ Å©±â¸¦ °¡Áö°Ô µÈ´Ù. ÀÌ ¶§ _stklen ÀÇ ³»Á¤µÈ ÃʱâÄ¡°¡ 4096À̹ǷΠ±× Å©±â´Â 4K¹ÙÀÌÆ®°¡ µÇ´Â °ÍÀÌ´Ù. °á°úÀûÀ¸·Î ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â, ÇÁ·Î±×·¥ÂÊ¿¡¼­ _stklenÀÇ Ãʱâ Ä¡¸¦ ´Ù¸¥ °ªÀ¸·Î ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ, ½ºÅÃÀº 4096¹ÙÀÌÆ®¶ó´Â Çù¼ÒÇÑ Å©±â ¸¦ °¡Áö°Ô µÈ´Ù. ÀÌ ¶§ ¸¸¾à ¼ö ų·Î ¹ÙÀÌÆ®¿¡ ´ÞÇÏ´Â µ¢Ä¡ Å« ÀÚµ¿¹è¿­À» Á¤ÀÇÇϰųª °ú´ÙÇÑ Àç±Í È£Ãâ(recursive call)À» ¼öÇàÇϰųª Çϸé, ½ºÅà Æ÷ÀÎÅÍ ·¹Áö½ºÅÍ SP°¡ ½ºÅà ¼¼±×¸ÕÆ® ÇÏÀ§ °æ°è¸¦ ³Ñ¾î°¡ ´Ù½Ã 0xffffºÎÅÍ °¨¼ÒÇÏ°Ô µÇ´Â ¾ÆÁÖ Ä¡¸íÀûÀÎ »ç°ÇÀÌ ¹ß»ýÇÑ´Ù. »ç½Ç SP°¡ 0xffffºÎÅÍ ´Ù½Ã °¨¼ÒÇÏ´õ¶óµµ ±× ¿µ¿ªÀº ¿ø°Å¸® Èü ¿µ¿ªÀÌ ¹Ç·Î °ÑÀ¸·Î º¸±â¿¡´Â º° ÀÏÀÌ ¾øÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ µ¿ÀûÀ¸·Î ¸Þ¸ð¸®¸¦ ÇÒ ´çÇϰųª spawn... ÇÔ¼ö ¶Ç´Â system ÇÔ¼ö¸¦ È£ÃâÇÏ¿© µµ½º·Î Àá½Ã ³ª°¥ ÀÏÀÌ »ý±â¸é, ÇÁ·Î±×·¥À¸·Î µÇµ¹¾Æ¿Ã ¶§ÀÇ º¹±Í¹øÁö°¡ Æı«µÇ¾î ³ªÁß¿¡ º¹ ±ÍÇÒ ¶§ ÇÁ·Î±×·¥ÀÌ ±×´ë·Î ÆøÁÖÇØ ¹ö¸®´Â ÀÏÀÌ ÅÍÁø´Ù. ¸»·Î¸¸ ÇÒ °Ô ¾Æ´Ï¶ó Á÷Á¢ È®ÀÎÇØ º¸ÀÌ°Ú´Ù. ´ÙÀ½ÀÇ <¿¹Á¦ 1>ÀÌ ±×°Í ÀÌ´Ù. ¹Ýµå½Ã ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨(¿¹ÄÁµ¥ ´ëÇü ¸ðµ¨)¿¡¼­ ÄÄÆÄÀÏ/¸µÅ©½ÃÅ°±â ¹Ù¶õ´Ù. <¿¹Á¦ 1> ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨°ú ½ºÅà ¼¼±×¸ÕÆ®ÀÇ Å©±â --------------------------------------------------------------------- #include #include void main(void) { SPÀÇ °ªÀ» °¡Áö´Â Àǻ纯¼ö(pseudo variable)---+ printf("_stklen is %u, SP is currently %u\n", _stklen, _SP); } --------------------------------------------------------------------- ½ÇÇà °á°ú _stklen is 4096, SP is currently 4072 --------------------------------------------------------------------- --------------------------------------------------------------------- 3 ´Ù¸¥ ¸ðµâ¿¡ Á¤ÀǵǾî ÀÖ´Â ¿ÜºÎ¸íĪÀÇ ÂüÁ¶ --------------------------------------------------------------------- 3.1 ¿ÜºÎ¸íĪÀÇ ¼±¾ð ´Ù½Ã º»·ÐÀ¸·Î µÇµ¹¾Æ°¡¼­, À̹ø¿¡´Â ´Ù¸¥ ¸ðµâ(ÁÖ·Î C ¸ðµâ)¿¡ Á¤ÀÇ µÇ¾î ÀÖ´Â ¿ÜºÎ¸íĪÀ» ¾î¼Àºí¸® ¸ðµâ¿¡¼­ ÂüÁ¶ÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇÏ°Ú ´Ù. ¾Ë°í ÀÖÀ¸¸®¶ó ¹ÏÁö¸¸, ÂüÁ¶(reference)¶õ º¯¼ö¿¡ ÀúÀåµÇ¾î ÀÖ´Â °ªÀ» Àаųª º¯¼ö¿¡ °ªÀ» ÀúÀåÇϰųª ¶Ç´Â ÇÔ¼ö¸¦ È£ÃâÇÏ´Â µîÀÇ ¸íĪ¿¡ °ü·ÃµÈ ¸ðµç "Á÷Á¢ÀûÀÎ" ÇàÀ§¸¦ ÃÑĪÇÏ´Â ¸»ÀÌ´Ù. ¿ì¼± ¿ä±¸µÇ´Â °ÍÀº EXTRN Áö½ÃÀÚ(directive)¿¡ ÀÇÇÑ ¿ÜºÎ¸íĪÀÇ ¼±¾ð ÀÌ´Ù. ÀÌ°ÍÀº C¿¡¼­ÀÇ ¼±¾ð °³³ä°ú Á¦¹ý À¯»çÇÏ´Ù. ÀÏ´Ü EXTRN Áö½ÃÀÚ¿¡ ÀÇÇØ ¿Ã¹Ù¸£°Ô ¸íĪÀÌ ¼±¾ðµÈ ÈÄ¿¡´Â ´Ù¸¥ ³»ºÎ¸íĪ ÂüÁ¶ÇϵíÀÌ ÇÒ ¼ö ÀÖ ´Ù(ÀÌÈÄ "EXTRN Áö½ÃÀÚ"´Â ÆíÀÇ»ó "EXTRN¹®"À¸·Î ¾àĪÇÏ°Ú´Ù). ¿ÜºÎ¸íĪ¿¡ ¼ÓÇÏ´Â °ÍÀº Å©°Ô µÎ °¡ÁöÀÌ´Ù. Çϳª´Â ¿ÜºÎº¯¼öÀÌ°í ´Ù¸¥ Çϳª´Â ¿ÜºÎÇÔ¼öÀÌ´Ù. ¿©±â¼­ ¿ÜºÎÇÔ¼ö¶õ Á¤ÀûÇÔ¼ö¸¦ Á¦¿ÜÇÑ ´Ù¸¥ ¸ðµç ÀÏ ¹ÝÀûÀÎ ÇÔ¼ö¸¦ ¶æÇÑ´Ù. ¿ì¼± EXTRN¹®ÀÇ ¹®¹ýÀ» »ìÆ캸ÀÚ. [ ]´Â »ý·« °¡´ÉÇÔÀ» ¶æÇÑ´Ù. ±×¸® °í ¾î¼Àºí¸®ÂÊ¿¡¼­´Â EXTRN¹®¿¡ ÀÇÇÑ "Á¤ÀÇ"¶ó´Â Ç¥ÇöÀ» ¾²Áö¸¸ ¿ì¸®´Â C ¸¦ ¹è¿ì°í ÀÖÀ¸¹Ç·Î ±×¿¡ ¸ÂÃç "¼±¾ð"À̶ó´Â ¿ë¾î¸¦ ¾²°ÚÀ¸´Ï Âø¿À¾ø±â ¹Ù ¶õ´Ù. EXTRN ¼±¾ð[, ¼±¾ð] ...... ÀÌ ¶§ "¼±¾ð"Àº ´ÙÀ½°ú °°Àº ¹®¹ý ±¸Á¶¸¦ °¡Áø´Ù. ¸íĪ:Çü[:°³¼ö] ¸íĪÀº ¹°·Ð º¯¼ö³ª ÇÔ¼öÀÇ À̸§ÀÌ´Ù. Çü(type)Àº, º¯¼öÀÏ °æ¿ì ±× ¹Ù ÀÌÆ® Å©±â, ÇÔ¼öÀÏ °æ¿ì È£Ã⠰Ÿ®(±Ù°Å¸®/¿ø°Å¸®)¸¦ ÁöÁ¤ÇÑ´Ù. °³¼ö(coun t)´Â ¸íĪÀÌ ¹è¿­°ú °ü·ÃµÉ ¶§, SIZE³ª LENGTH Áö½ÃÀÚÀÇ °á°ú¸¦ ¿Ã¹Ù·Î ±¸ Çϱâ À§ÇÏ¿© ¼±ÅÃÀûÀ¸·Î(optional) ÁöÁ¤ÇÑ´Ù. ¹è¿­ÀÌ ¾Æ´Ñ ÀϹÝÀûÀÎ º¯¼ö ¶ó¸é °³¼ö´Â 1ÀÏ °ÍÀ̹ǷΠ»ý·«ÇÏ¸é µÈ´Ù. »ç½Ç SIZE Áö½ÃÀÚ µîÀ» ¾µ ÀÏÀÌ ¾øÀ¸¸é »ý·«Çصµ ¹«¹æÇÏ´Ù. C¿¡¼­µµ ¹è¿­ÀÇ ¼±¾ð¿¡¼­´Â (ù¹ø°;¸ÇÁÂÃø) ¹è¿­Å©±â¸¦ »ý·«ÇÒ ¼ö ÀÖÁö ¾ÊÀº°¡? ´Ù½Ã, EXTRN¹®À¸·Î ÇϳªÀÇ ¸íĪ¸¸À» ¼±¾ðÇÑ´Ù¸é ¹®¹ýÀº ´ÙÀ½°ú °°ÀÌ °£´ÜÇØÁø´Ù. ¸íĪ ¾Õ¿¡ Ãß°¡ÀûÀÎ ¹ØÁÙÀÌ µ¡ºÙ´Â ÀÌÀ¯´Â Áö³­ ´Þ¿¡ ÀÌ¹Ì ¼³ ¸íÇß´Ù. Áï CÂÊ¿¡¼­ extvar¶ó¸é ¾î¼Àºí¸®ÂÊ¿¡¼­´Â _extvar¶ó°í ÇØ¾ß ÇÑ´Ù. ¾È ±×·¯¸é ¸µÅ©ÇÒ ¶§ Ä£±ÙÇÑ(?) Undefined symbolÀ̶ó´Â ¿¡·¯¸¦ ¸¸³ª°Ô µÉ °ÍÀÌ´Ù. EXTRN _¸íĪ:Çü ¿¹) EXTRN _extvar:WORD EXTRN¹®À¸·Î ¸íĪÀ» ¼±¾ðÇÒ ¶§¿¡´Â ´ÙÀ½ÀÇ ¼¼ °¡Áö »çÇ׿¡ ¸Å¿ì À¯ÀÇ ÇØ¾ß ÇÑ´Ù. ¾î¼Àºí¸®¾î Ãʺ¸ÀÚµéÀÇ °æ¿ì´Â ¼¼¹ø° »çÇ׿¡ ƯÈ÷ ½Å°æÀ» ½á ¾ß ÇÒ °ÍÀÌ´Ù. [1] ¸íĪÀÇ º¯¼ö¸íÀΰ¡ ÇÔ¼ö¸íÀΰ¡? [2] ¸íĪÀÇ ÇüÀ» ¿Ã¹Ù·Î ¼±¾ðÇߴ°¡? [3] ¸íĪÀ» ¿Ã¹Ù¸¥ À§Ä¡¿¡¼­ ¼±¾ðÇߴ°¡? 3.2 ¿ÜºÎ¸íĪÀÇ Çü(type) ¸ÕÀú ù¹ø°¿Í µÎ¹ø° »çÇ׿¡ ´ëÇØ ¼³¸íÇÏ°Ú´Ù. Åͺ¸ ¾î¼Àºí·¯ÀÇ °æ¿ì EXTRN¹®¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ÇüÀº ´ÙÀ½ <Ç¥ 1>°ú °°´Ù. <Ç¥ 1> Çü¸í°ú °ü·ÃµÈ C µ¥ÀÌÅÍÇü +----+----------+------+--------------------------------------------+ | | Çü¸í | Å©±â | °ü·ÃµÈ C µ¥ÀÌÅÍÇü | +----+----------+------+--------------------------------------------+ | ÇÔ | NEAR | | ±Ù°Å¸® ÇÔ¼ö | | ¼ö | FAR | | ¿ø°Å¸® ÇÔ¼ö | | ¸í | PROC | | ±Ù°Å¸® ¶Ç´Â ¿ø°Å¸® ÇÔ¼ö* | +----+----------+------+--------------------------------------------+ | | BYTE | 1 | char, unsigned char | | º¯ | WORD | 2 | int, unsigned, ±Ù°Å¸® Æ÷ÀÎÅÍ | | | DWORD | 4 | long, unsigned long, ¿ø°Å¸® Æ÷ÀÎÅÍ, float | | ¼ö | FWORD | 6 | ¾øÀ½(80386¿ë 48ºñÆ® ¿ø°Å¸® Æ÷ÀÎÅÍ) | | | PWORD | 6 | ¾øÀ½(80386¿ë 48ºñÆ® ¿ø°Å¸® Æ÷ÀÎÅÍ) | | ¸í | QWORD | 8 | double | | | TBYTE | 10 | long double(Åͺ¸ C 2.0 ÀÌ»ó) | | | DATAPTR | 2/4 | ±Ù°Å¸® ¶Ç´Â ¿ø°Å¸® Æ÷ÀÎÅÍ** | | | ±¸Á¶Ã¼¸í | ?? | °¢Á¾ ±¸Á¶Ã¼(structure) | +----+----------+------+--------------------------------------------+ * .MODEL Áö½ÃÀÚ¿¡ µû¶ó ÀÚµ¿À¸·Î ±× ¹ÙÀÌÆ® Å©±â°¡ °áÁ¤µÈ´Ù. ** °Å´ë Æ÷ÀÎÅÍ´Â C ¼öÁØ¿¡¼­¸¸ Áö¿øµÈ´Ù. ÀÌ Áß¿¡¼­ PROC¿Í DATAPTRÀº ¹«Ã´ À¯¿ëÇÑ °ÍÀÌÁö¸¸ .MODEL Áö½ÃÀÚ¸¦ ½á¾ß Àǹ̰¡ ÀÖÀ¸¹Ç·Î ´ÙÀ½ ´Þ·Î ¼³¸íÀ» ¹Ì·ç°Ú´Ù. ±×¸®°í QWORD³ª TBYTE ´Â ºÎµ¿Çü µ¥ÀÌÅÍ¿Í °ü·ÃµÇ¹Ç·Î °ÅÀÇ ¾²ÀÌÁö ¾Ê°í, FWORD³ª PWORD´Â 80386 ¿¡¼­³ª ¾²ÀÌ´Â °ÍÀ̹ǷΠ½Å°æ ²¨µµ µÈ´Ù(48ºñƮ¥¸® Æ÷ÀÎÅÍ ½á º» »ç¶÷ ÀÖ À¸¸é ¼Õ Á» µé¾î º¸½Ã¿À!). ¸¶Áö¸··Î ¾î¼Àºí¸®ÂÊ¿¡¼­´Â ±¸Á¶Ã¼¿Í °°Àº º¹ ÀâÇÑ µ¥ÀÌÅÍÇüÀ» ´Ù·ê ÀÏÀÌ °ÅÀÇ ¾ø´Ù. °á±¹ ¿ì¸®°¡ °ü½ÉÀ» °¡Á®¾ß ÇÒ °Í Àº ´ÙÀ½ 5°¡Áö·Î ¾ÐÃàµÈ´Ù. [1] ÇÔ¼ö¸íÀÏ ¶§: NEAR, FAR [2] º¯¼ö¸íÀÏ ¶§: BYTE, WORD, DWORD ¿¹¸¦ µé¾î ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­ ´ÙÀ½°ú °°ÀÌ ¿ÜºÎº¯¼ö·Î "Á¤ÀÇ"µÇ¾î ÀÖ´Â º¯¼öµéÀº, int i = 0, array[10]; char c, *s = "turbo28"; --- s´Â ±Ù°Å¸® Æ÷ÀÎÅÍ long fp = 1000L; char near *nearptr, far *farptr; | | | +----- ¿ø°Å¸® Æ÷ÀÎÅÍ +----------------- ±Ù°Å¸® Æ÷ÀÎÅÍ ¾î¼Àºí¸®ÂÊ¿¡¼­ ¾Æ·¡¿Í °°ÀÌ EXTRN¹®À» ½á¼­ ¼±¾ðÇÑ µÚ ÂüÁ¶ÇÏ¸é µÈ ´Ù. EXTRN¹®¿¡¼­´Â ¿©·¯ ¸íĪµéÀ» ½°Ç¥·Î ±¸ºÐÇÏ¿© ³ª¿­ÇÒ ¼öµµ ÀÖÁö¸¸, ¼³¸íÀÇ ÆíÀÇ»ó ÇÑ ÁÙ¿¡ Çϳª¾¿¸¸ ¼±¾ðÇß´Ù. EXTRN _i:WORD +---°³¼ö 10Àº »ý·«Çصµ º° ÁöÀå ¾øÀ½ EXTRN _array:WORD:10 EXTRN _c:WORD EXTRN _s:WORD --- ¸í½ÃÀûÀ¸·Î near/far ¼ö½ÄÀÚ°¡ ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¹Ç·Î DATAPTRÀ» ¾²´Â °Ô ´õ ¹Ù¶÷Á÷ÇÏÁö¸¸ ¸Þ¸ð¸® ¸ðµ¨ÀÌ °íÁ¤ÀûÀ̶ó¸é ¾Æ¹«·¡µµ »ó°ü¾ø´Ù. EXTRN _fp:DWORD EXTRN _nearptr:WORD -+- ¸í½ÃÀûÀ¸·Î near/far ¼ö½ÄÀÚ°¡ ÁöÁ¤µÇ¾î EXTRN _farptr:DWORD -+ ÀÖÀ¸¹Ç·Î DATAPTR¸¦ ¾²¸é ¾È µÈ´Ù. Âü°í·Î À§ÀÇ ¼±¾ð¿¡¼­´Â °¢ ¸íĪµéÀÌ ºÎÈ£ÀÖ´Â µ¥ÀÌÅÍÇüÀÎÁö ºÎÈ£¾ø´Â µ¥ÀÌÅÍÇüÀÎÁö ÀüÇô ±¸º°µÇÁö ¾Ê´Â´Ù. µû¶ó¼­ ºÎÈ£°¡ ÀÖ´ÂÁöÀÇ ¿©ºÎ´Â ½ÇÁ¦ ·Î º¯¼ö¸¦ ÂüÁ¶ÇÏ´Â °÷¿¡¼­ ¾î¶²(ºÎÈ£¾²´Â?ºÎÈ£¾È¾²´Â?) ¾î¼Àºí¸® ¸í·ÉÀ» ¾²´À³Ä¿¡ ´Þ·Á ÀÖ´Ù. ´ÙÀ½À¸·Î ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­ ´ÙÀ½°ú °°Àº ¿øÇü(prototype)À» °¡Áö´Â (¿ÜºÎ)ÇÔ¼öµéÀº, void memset(char *dest, int value, int n); void near nearmemset(char near *dest, int value, int n); void far farmemset(char far *dest, int value, long n); ¾î¼Àºí¸®ÂÊ¿¡¼­ ¾Æ·¡¿Í °°ÀÌ ¼±¾ðÇÑ µÚ È£ÃâÇÏ¸é µÈ´Ù. ¹°·Ð È£ÃâÇÏ·Á ¸é È£Ãâ °üÇà µî¿¡ ´ëÇÑ ±ÔÄ¢µµ ÁؼöÇØ¾ß Çϴµ¥ ±×°ÍÀº µÚ¿¡ °è¼Ó ¼³¸íÇÏ °Ú´Ù. EXTRN _memset:NEAR --- near/far°¡ ¸í½ÃÀûÀ¸·Î ÁöÁ¤µÇ¾î ÀÖÁö ¾ÊÀ¸¹Ç·Î PROC¸¦ ¾²´Â °Ô ´õ ¹Ù¶÷Á÷ÇÏÁö¸¸ ¸Þ¸ð¸® ¸ðµ¨ÀÌ °íÁ¤ÀûÀ̶ó¸é ¾Æ¹«·¡µµ »ó°ü¾ø´Ù. EXTRN _nearmemset:NEAR --- ¸í½ÃÀûÀ¸·Î near/far ¼ö½ÄÀÚ°¡ ÁöÁ¤µÇ¾î EXTRN _farmemset:FAR --- ÀÖÀ¸¹Ç·Î PROC¸¦ ¾²¸é ¾È µÈ´Ù. À§¿¡¼­ ÇÔ¼öÀÇ ¸Å°³º¯¼ö(parameter)³ª ¹Ýȯ°ª(return value)¿¡ °üÇÑ Á¤º¸°¡ ¿ÏÀüÈ÷ ¹«½ÃµÇ¾î ÀÖ´Ù´Â Á¡¿¡ À¯ÀÇÇϱ⠹ٶõ´Ù. 3.3 ¿ÜºÎ¸íĪÀÇ ¼±¾ð À§Ä¡ ¿øÄ¢Àº °£´ÜÇÏ´Ù. +------------------------------------------------------------------+ | EXTRN¹®Àº ÇØ´ç ¸íĪÀÌ Á¸ÀçÇÏ´Â ¼¼±×¸ÕÆ® ¹üÀ§ ³»¿¡ À§Ä¡ÇØ¾ß ÇÑ´Ù. | | (PUBLIC¹®µµ ¸¶Âù°¡ÁöÀÌ´Ù.) | +------------------------------------------------------------------+ ¿¹¸¦ µé¾î ¸¸¾à ¿ÜºÎº¯¼ö¶ó¸é °Å´ë ¸ðµ¨ÀÌ ¾Æ´Ñ ÇÑ ÃʱâÈ­ÀÇ ¿©ºÎ¿¡ µû¶ó _DATA ¶Ç´Â _BSS ¼¼±×¸ÕÆ®¿¡ Á¸ÀçÇÒ °ÍÀ̹ǷΠÇØ´ç EXTRN¹®µµ ±× ¼¼ ±×¸ÕÆ® ¹üÀ§(SEGMENT¡­ENDS) ³»¿¡ ³õ¿©¾ß ÇÑ´Ù. ±×¸®°í (¿ÜºÎ)ÇÔ¼öÀÇ °æ¿ì ¿¡ ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­´Â ´ç¿¬È÷ _TEXT ¼¼±×¸ÕÆ® ³»¿¡ Á¸ÀçÇÒ °ÍÀ̹ǷΠÇØ ´ç EXTRN¹®µµ ±× ¼¼±×¸ÕÆ® ³»¿¡ ³õ¿©¾ß ÇÑ´Ù. ¿©±â¼­ Á¶½ÉÇÒ °ÍÀº ¸¸¾à ÇØ ´ç ¼¼±×¸ÕÆ®¿¡ ¼ÓÇÏ´Â Äڵ尡 ¸ðµâ ³»¿¡ ÀüÇô ÃâÇöÇÏÁö ¾Ê´Â´Ù ÇÏ´õ¶óµµ ±× EXTRN¹®À» À§Çؼ­ ÇØ´ç ¼¼±×¸ÕÆ®¸¦ ¸¶·ÃÇÏ¿©¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù. ¾Õ ÀýÀÇ ¿¹¿¡¼­´Â ´ÙÀ½ <¿¹Á¦ 2>¿Í °°ÀÌ EXTRN¹®¸¸À» À§ÇÑ ¼¼±×¸ÕÆ®¸¦ ¸¶·ÃÇÏ°í ±× ¾È¿¡ µÎ¸é µÉ °ÍÀÌ´Ù. ³ª¸ÓÁö ½ÇÁ¦ÀûÀÎ ÄÚµå ¹× µ¥ÀÌÅÍ ¼¼±× ¸ÕÆ®´Â ±× ÀÌÈÄ¿¡ ³õÀ¸¸é µÈ´Ù. ¾îÂ÷ÇÇ µ¿ÀÏÇÑ ¸íĪÀÇ ³í¸® ¼¼±×¸ÕÆ®´Â ¿© ·¯ ±ºµ¥¿¡ ºÐ¸®ÇØ ³õ´õ¶óµµ ³ªÁß¿¡ ¸µÄ¿¿¡ ÀÇÇØ Çϳª·Î ÇÕÃÄÁö´Ï±î ¸»ÀÌ ´Ù. <¿¹Á¦ 2> EXTRN¹®À» ¿Ã¹Ù¸£°Ô À§Ä¡½ÃÅ°´Â ¿¹(¼ÒÇü ¸ðµ¨¿¡¼­) --------------------------------------------------------------------- _TEXT SEGMENT BYTE PUBLIC 'CODE' EXTRN _memset:NEAR EXTRN _nearmemset:NEAR _TEXT ENDS _DATA SEGMENT WORD PUBLIC 'DATA' EXTRN _i:WORD EXTRN _s:WORD EXTRN _fp:DWORD _DATA ENDS _BSS SEGMENT WORD PUBLIC 'BSS' EXTRN _array:WORD:10 EXTRN _c:WORD EXTRN _nearptr:WORD --- ¸í½ÃÀûÀ¸·Î near/far ¼ö½ÄÀÚ°¡ ÁöÁ¤µÇ¾î EXTRN _farptr:DWORD --- ÀÖÀ¸¹Ç·Î DATAPTR¸¦ ¾²¸é ¾È µÈ´Ù. _BSS ENDS _TEXT SEGMENT BYTE PUBLIC 'CODE' ASSUME cs:_TEXT, ds:_DATA ...... END --------------------------------------------------------------------- 3.4 ¿ø°Å¸® ¿ÜºÎ¸íĪÀÇ ¼±¾ð À§Ä¡ ¼ÒÇü ¸ðµ¨¿¡¼­¸¸ ÀÛ¾÷À» ÇÒ °ÍÀ̶ó¸é EXTRN¹®¿¡ °üÇÑ ÇÑ ´õ ÀÌ»ó ¹®Á¦ µÉ °Ç ¾ø´Ù. ÇÏÁö¸¸ ´Ù¸¥ ¸Þ¸ð¸® ¸ðµ¨À̶ó¸é ¾î¶³±î? ±× ¶§ÀÇ ¹®Á¦´Â ¹Ù ·Î _TEXT, _DATA, _BSS µîÀÇ °øÅëÀûÀÎ ¼¼±×¸ÕÆ®¿¡ Á¸ÀçÇÏÁö ¾Ê´Â ¸íĪÀÇ ¼±¾ðÀ» °ú¿¬ "¾îµð´Ù°¡ À§Ä¡½ÃÅ°³Ä" ÇÏ´Â °ÍÀÌ´Ù. ¿©±â¼­ Àá½Ã ¼¼ °¡Áö »õ ·Î¿î ¿ë¾î¿¡ ´ëÇÑ Á¤ÀǸ¦ ³»¸®°Ú´Ù. ¸ÕÀú ÇØ´ç ¸ðµâÀÌ ¾Æ´Ñ ´Ù¸¥ ¸ðµâ¿¡ Á¸ÀçÇÏ´Â ¸íĪÀ» À̸§ÇÏ¿© "¿ø°Å ¸® ¿ÜºÎ¸íĪ(far external)"À̶ó°í ÇÑ´Ù. ¶ÇÇÑ ÇØ´ç ¸ðµâÀÇ ¼¼±×¸ÕÆ®¸¦ " ±Ù°Å¸® ¼¼±×¸ÕÆ®(near segment)", ´Ù¸¥ ¸ðµâÀÇ ¼­·Î ´Ù¸¥ ¼¼±×¸ÕÆ®¸¦ "¿ø °Å¸® ¼¼±×¸ÕÆ®(far segment)"¶ó°í ÇÑ´Ù. ¹°·Ð ÀÌ ¿ë¾î ¼³¸íÀº ´ëÇü ÄÚµå/µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­¸¸ ÇØ´çÇÑ´Ù. ¿Ö³Ä ÇÏ ¸é ¼ÒÇü ÄÚµå/µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â ¼­·Î ´Ù¸¥ ¸ðµâÀ̶ó ÇÒÁö¶óµµ ¼¼±×¸ÕÆ®°¡ ½ÇÁúÀûÀ¸·Î _TEXT, _DATA, _BSS µîÀÇ "±Ù°Å¸® ¼¼±×¸ÕÆ®"¹Û¿¡ ¾ø±â ¶§¹®ÀÌ ´Ù. µû¶ó¼­ ±× °æ¿ì¿¡´Â ¿ø°Å¸® ¼¼±×¸ÕÆ®°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù°í º¼ ¼ö ÀÖ ´Ù. +---------------------------------------------------------+ | ±Ù°Å¸® ¼¼±×¸ÕÆ®´Â ÇØ´ç ¸ðµâ ³»¿¡ Á¸ÀçÇÏ´Â ¼¼±×¸ÕÆ®ÀÌ´Ù. | +---------------------------------------------------------+ | ¿ø°Å¸® ¼¼±×¸ÕÆ®´Â ÇØ´ç ¸ðµâ ³»¿¡ Á¸ÀçÇÏÁö ¾Ê°í | | ¶ÇÇÑ "±× ¸íĪÀÌ ¼­·Î ´Ù¸¥" ¼¼±×¸ÕÆ®ÀÌ´Ù. | | (¿ø°Å¸® ¼¼±×¸ÕÆ®´Â ¿øÄ¢ÀûÀ¸·Î ´ëÇü ÄÚµå/µ¥ÀÌÅÍ | | ¸ðµ¨¿¡¼­¸¸ Á¸ÀçÇÔ) | +---------------------------------------------------------+ | ¿ø°Å¸® ¿ÜºÎ¸íĪÀº ¿ø°Å¸® ¼¼±×¸ÕÆ®¿¡ Á¸ÀçÇÏ´Â ¸íĪÀÌ´Ù. | +---------------------------------------------------------+ ¿¹¸¦ µé¾î ¾Õ Àý¿¡¼­ ¾ð±ÞÇÑ farmemsetÀ̶ó´Â ¿ø°Å¸® ÇÔ¼ö°¡ dummy.c ¸ðµâÀÇ DUMMY_TEXT¶ó´Â ¼¼±×¸ÕÆ®¿¡ Á¸ÀçÇÑ´Ù°í Ä¡ÀÚ. ´ëÇü ÄÚµå ¸ðµ¨¿¡¼­ ´Â ¸ðµâ¸í¿¡ _TEXT°¡ µ¡ºÙÀº ¸íĪÀÌ ÄÚµå ¼¼±×¸ÕÆ®¸íÀ¸·Î ±ÔÁ¤µÈ´Ù´Â °ÍÀº ¿¾³¯¿¡ ¼³¸íÇß´Ù. void far farmemset(char far *dest, int value, long n); ÀÌ ¶§ °Å±â¿¡ Á¸ÀçÇÏ´Â (¿ø°Å¸®) ÇÔ¼ö¸¦ mymodule.asmÀ̶ó´Â ¾î¼Àºí¸® ¸ðµâ¿¡¼­ ÂüÁ¶ÇÏ·Á¸é °ú¿¬ ÇØ´ç EXTRN¹®À» ¾îµð´Ù°¡ µÎ¾î¾ß ÇÒ±î? ¸¸¿¡ Çϳª ±× ¼±¾ðÀ» ¾Æ·¡¿Í °°ÀÌ ¾î¼Àºí¸® ¸ðµâÀÇ MYMODULE_TEXT ¼¼±×¸ÕÆ® ³» ¿¡ µÎ¸é ÇѸ¶µð·Î Å«Àϳ­´Ù´Â °ÍÀ» È®½ÇÈ÷ ¾Ë¾ÆµÎ±â ¹Ù¶õ´Ù. ¿¹¸¦ µé¾î <¿¹Á¦ 3>°ú °°ÀÌ Çϸé, ¾î¼Àºí·¯°¡ _farmemsetÀÇ ¿É¼ÂÀ» DU MMY_TEXT ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ·ÎºÎÅÍ °è»êÇÏÁö ¾Ê°í MYMODULE_TEXT ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ·ÎºÎÅÍ °è»êÇØ ¹ö¸°´Ù. ±×·¸°Ô µÇ¸é ´ç¿¬È÷ ÇÁ·Î±×·¥ÀÌ Á¦´ë·Î µ¹¾Æ°¥ ¸®°¡ ¾ø´Ù. ½ÇÇà½Ã¿¡ ÇÁ·Î±×·¥ÀÌ ÆøÁÖÇÒ ¼öµµ ÀÖ°í, 64K¹ÙÀÌÆ® ÀÌ»óÀÇ µ¢ Ä¡ Å« ÇÁ·Î±×·¥¿¡¼­´Â ¸µÅ©½Ã¿¡ Fixup overflow¶ó´Â ¸Å¿ì °ïȤ½º·¯¿î ¿¡·¯ ¸¦ ¹ß»ý½ÃÅ°´Â ¼öµµ ÀÖ´Ù. (½ÇÁ¦·Î ÇÊÀÚ°¡ ´çÇØ ºÃÀ½. ¸çÄ¥ ¹ã³·À» ²þ²þ´ë °í Çì¸Ç µÚ¿¡ ¿ì¿¬È÷ Ʋ¸° À§Ä¡¿¡´Ù°¡ ¼±¾ðÇÑ °ÍÀ» ¹ß°ßÇÏ°í ÇãÅ»...) <¿¹Á¦ 3> ¿ø°Å¸® ¸íĪÀ» Ʋ¸° À§Ä¡¿¡¼­ ¼±¾ðÇÑ ¿¹ --------------------------------------------------------------------- ; File MYMODULE.ASM(´ëÇü ÄÚµå ¸ðµ¨¿¡¼­) MYMODULE_TEXT SEGMENT BYTE PUBLIC 'CODE' ASSUME ...... EXTRN _farmemset:FAR --- ¿ø°Å¸® ¼¼±×¸ÕÆ®ÀÎ DUMMY_TEXT ³»ÀÇ ¸íĪÀ» MYMODULE_TEXT ³»¿¡¼­ ¼±¾ðÇÏ°í ÀÖ´Ù. ...... MYMODULE_TEXT ENDS --------------------------------------------------------------------- ±×·¸´Ù¸é ½±°Ô »ý°¢Çϱ⿡´Â DUMMY_TEXT¶ó´Â ¼¼±×¸ÕÆ®¸¦ ¾î¼Àºí¸® ¸ð µâ ³»¿¡ ¸¶·ÃÇØ µÎ°í °Å±â´Ù°¡ EXTRN¹®À» µÎ¸é µÇÁö ¾Ê°Ú´À³Ä°í ÇÒ ¼ö ÀÖ ´Ù. ½ÇÁ¦·Î ±×¸® Çصµ µÇ±ä µÈ´Ù. <¿¹Á¦ 4> ¿ø°Å¸® ¸íĪÀ» ¼±¾ðÇÑ ¿¹ 1(¹Ù¶÷Á÷ÇÏÁö ¸øÇÑ ¹æ¹ý) --------------------------------------------------------------------- ; File MYMODULE.ASM(´ëÇü ¸ðµ¨¿¡¼­) +---------------- dummy ¸ðµâ¿¡ ÀÖ´Â ÄÚµå ¼¼±×¸ÕÆ® DUMMY_TEXT SEGMENT BYTE PUBLIC 'CODE' EXTRN _farmemset:FAR DUMMY_TEXT ENDS +----------------- mymodule ¸ðµâÀÇ ¿ø·¡ ÄÚµå ¼¼±×¸ÕÆ® | MYMODULE_TEXT SEGMENT BYTE PUBLIC 'CODE' ...... --- ÀÌ ¸ðµâÀÇ ÄÚµå ¼¼±×¸ÕÆ®ºÎ MYMODULE_TEXT ENDS ...... --- ±× ¹ÛÀÇ ISD ¶Ç´Â USID ¼¼±×¸ÕÆ®ºÎ(¼±ÅÃÀû) --------------------------------------------------------------------- ÀÌ ¹æ¹ýÀº ¼¼ °¡Áö Á¤µµÀÇ ¹®Á¦Á¡À» °¡Áö°í ÀÖ´Ù. ù°´Â ÇÑ ¸ðµâ ³» ¿¡ µÎ °³ ÀÌ»óÀÇ ÄÚµå ¼¼±×¸ÕÆ® ¼±¾ðÀÌ Æ÷ÇԵǾî ÀÖÀ¸¹Ç·Î Åͺ¸ CÀÇ ¸Þ¸ð ¸® ¸ðµ¨ ±¸Á¶¸¦ ¿ÏÀüÇÏ°Ô µû¸£Áö ¸øÇÑ´Ù´Â Á¡ÀÌ´Ù. µÎ¹ø° ¹®Á¦´Â ¹Ù·Î "³Ê¹« ¹ø°Å·Ó´Ù"´Â Á¡ÀÌ´Ù. Áï ¼±¾ðÇØ¾ß ÇÒ ¿ø°Å ¸® ¸íĪÀÌ ¿©·¯ °÷ÀÇ ¿ø°Å¸® ¼¼±×¸ÕÆ®¿¡ ºÐ»êµÇ¾î ÀÖ´Ù¸é ±× ¿ø°Å¸® ¼¼±× ¸ÕÆ®µéÀ» ÀÏÀÏÀÌ ¸¶·ÃÇÏ¿©¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Áï 10°÷ÀÇ ¿ø°Å¸® ¼¼±×¸ÕÆ®¿¡ ÀÖ´Â 10°³ÀÇ ¿ø°Å¸® ¸íĪÀ» ÂüÁ¶ÇÏ·Á¸é 10°³ÀÇ ¼¼±×¸ÕÆ® ¼±¾ðÀÌ Ãß°¡·Î ÇÊ ¿äÇØÁø´Ù. ÀÌ´Â Á¤¸»·Î ´ë´ÜÈ÷ ±ÍÂúÀº ÀÏÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. ¸¶Áö¸·À¸·Î ÀÌ ¹æ¹ýÀ¸·Î´Â ¾î¼Àºí·¯°¡ ¼¼±×¸ÕÆ® ¹èÄ¡¿Í °ü·ÃÇÏ¿© Á¦°ø ÇÏ´Â .CODE, .DATA µîÀÇ °¢Á¾ Æí¸®ÇÑ Áö½ÃÀÚ¸¦ ½á¼­ ±¸ÇöÇÒ ¼ö ¾ø´Ù´Â ´Ü Á¡ÀÌ ÀÖ´Ù. ±×·¸´Ù¸é °¡Àå °£ÆíÇÑ ¹æ¹ýÀÌ ¹«¾ùÀÌ³Ä ÇÏ¸é ¹Ù·Î "¸ðµç ¼¼±×¸ÕÆ®ÀÇ ¿ÜºÎ¿¡ ¿ø°Å¸® ¸íĪÀÇ ¼±¾ðÀ» µÎ´Â °Í"ÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é ¾î¼Àºí·¯´Â ±× ¸íĪÀÇ ¼¼±×¸ÕÆ® ¹× ¿É¼ÂÀ» °è»êÇÒ ¼ö ¾øÀ¸¹Ç·Î ±× °è»êÀ» ¸µÄ¿ÂÊÀ¸·Î ¹Ì ·é´Ù. ±×·¯¸é ¸µÄ¿°¡ ¿Ã¹Ù¸¥ ¼¼±×¸ÕÆ®:¿É¼Â Á¶ÇÕÀ» °è»êÇØ ÁØ´Ù. +---------------------------------------------------+ | ¿ø°Å¸® ¸íĪÀÇ ¼±¾ðÀº ¸ðµç ¼¼±×¸ÕÆ®ÀÇ ¿ÜºÎ¿¡ µÐ´Ù. | | Áï, ¾î¶°ÇÑ ¼¼±×¸ÕÆ®¿¡µµ ¼ÓÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. | +---------------------------------------------------+ <¿¹Á¦ 5> ¿ø°Å¸® ¸íĪÀ» ¼±¾ðÇÑ ¿¹ 2(¹Ù¶÷Á÷ÇÑ ¹æ¹ý) --------------------------------------------------------------------- ; File MYMODULE.ASM(´ëÇü ¸ðµ¨¿¡¼­) EXTRN _farmemset:FAR --- ¾î¶°ÇÑ ¼¼±×¸ÕÆ®¿¡µµ ¼ÓÇØ ÀÖÁö ¾Ê´Ù! MYMODULE_TEXT SEGMENT BYTE PUBLIC 'CODE' ...... --- ÀÌ ¸ðµâÀÇ ÄÚµå ¼¼±×¸ÕÆ®ºÎ MYMODULE_TEXT ENDS ...... --- ±× ¹ÛÀÇ ISD ¶Ç´Â USID ¼¼±×¸ÕÆ®ºÎ(¼±ÅÃÀû) --------------------------------------------------------------------- #55 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷5-2: ¾î¼Àºí¸® ÄÚµå Á¢¼Ó II 05/06 00:21 408 line --------------------------------------------------------------------- 4 C ¸ðµâ¿¡¼­ ¾î¼Àºí¸® ÇÔ¼öÀÇ È£Ãâ --------------------------------------------------------------------- ´ÙÀ½À¸·Î, C´Â ¸Å°³º¯¼ö¸¦ ½ºÅÃÀ» ÅëÇÏ¿© Àü´ÞÇÑ´Ù. Áö³­ ȸ¿¡¼­ ¼³¸í Çß´Ù½ÃÇÇ ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ Åͺ¸ C´Â ¸ÕÀú °¡Àå ¿À¸¥ÂÊ(¸¶Áö¸·) ¸Å°³ º¯¼öºÎÅÍ ¿ÞÂÊÀÇ ¼øÀ¸·Î Â÷·ÊÂ÷·Ê ¸Å°³º¯¼ö¸¦ ½ºÅÃ»ó¿¡ ´ëÇÇ(push)½ÃŲ´Ù. ¿¹ÄÁµ¥ Åͺ¸ CÂÊ¿¡¼­ÀÇ ÇÔ¼ö È£ÃâÀÌ ¾Æ·¡¿Í °°´Ù¸é, int test(int a, int b, int c); --- ÇÔ¼ö ¿øÇü ...... result = test(i, j, 1); ...... ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­ Åͺ¸ C´Â ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇÑ´Ù. mov ax,1 push ax push WORD PTR DGROUP:_j push WORD PTR DGROUP:_i call NEAR PTR _test add sp,6 ¿©±â¼­ °¡Àå ¿À¸¥ÂÊ (½Ç)¸Å°³º¯¼ö 1ºÎÅÍ ¸ÕÀú ½ºÅÿ¡ ´ëÇǵÊÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ÁÖ¸ñÇÒ »çÇ×Àº ÇÇÈ£Ãâ ÇÔ¼öÀÎ testÀÇ ¼öÇàÀÌ Á¾·áµÈ ÈÄ º¹±ÍÇÒ ¶§, ½ºÅà Æ÷ÀÎÅÍ ·¹Áö½ºÅÍ SPÀÇ º¹±¸¸¦ test°¡ ÇàÇÏÁö ¾Ê°í È£ÃâÇÑ ÂÊ¿¡¼­ ÇàÇÑ´Ù´Â Á¡ÀÌ´Ù. À§¿¡¼­ º¸´Ù½ÃÇÇ SPÀÇ º¹±¸¸¦ ÇàÇÏ´Â ¸í·ÉÀÎ add sp,6ÀÌ È£ÃâÇÑ ÂÊ¿¡ ³õ¿© ÀÖ´Ù. Âü°í·Î SP¿¡´Ù°¡ 6À» ´õÇÏ´Â ÀÌÀ¯´Â ½ºÅà ¿¡ ´ëÇÇµÈ ¸Å°³º¯¼öÀÇ ÃÑ ¹ÙÀÌÆ® Å©±â°¡ 3 x 2 == 6 ¹ÙÀÌÆ®À̱⠶§¹®ÀÌ´Ù. ¹°·Ð pop ¸í·ÉÀ» 3¹ø ½áµµ µÇÁö¸¸, ÀÌ °æ¿ì¿¡´Â add ¸í·ÉÀ» ¾²´Â °Ô ó¸® ¼Óµµ°¡ ¾à°£ ºü¸£´Ù. +----------------------------------------------------------+ | SPÀÇ º¹±¸´Â ÇÇÈ£Ãâ ÇÔ¼ö°¡ ¾Æ´Ï¶ó È£Ãâ ÇÔ¼öÂÊ¿¡¼­ ÇàÇÑ´Ù. | +----------------------------------------------------------+ ¾î·µç SPÀÇ º¹±¸¸¦ È£Ãâ ÇÔ¼öÂÊ¿¡¼­ ´ã´çÇϱ⠶§¹®¿¡ ÇÇÈ£Ãâ ÇÔ¼ö´Â È£Ãâ ÇÔ¼ö°¡ °ú¿¬ ¸î °³ÀÇ ½Ç¸Å°³º¯¼ö¸¦ ½ºÅÿ¡ ´ëÇǽÃÄ×´ÂÁö "¿øÄ¢ÀûÀ¸·Î ´Â" ÀüÇô ¾Ë ¹æµµ°¡ ¾ø´Ù. ÀÌ ¸»À» ¿ªÀ¸·Î ÇÏ¸é ¸Å°³º¯¼öÀÇ °³¼ö°¡ °¡º¯ÀÎ ÇÔ¼öµµ ¸¸µé ¼ö ÀÖ´Ù´Â ¾ê±â°¡ µÈ´Ù. ´ëÇ¥ÀûÀÎ ¿¹°¡ ¹Ù·Î printf ÇÔ¼öÀÌ ´Ù. Âü°í·Î printf ÇÔ¼ö´Â ¼­½Ä¹®ÀÚ¿­(format string) ³»ÀÇ ¼­½ÄÀÇ °³¼ö¿¡ ÀÇÇØ ¸Å°³º¯¼öÀÇ °³¼ö¸¦ ÆÇÁ¤ÇÏ°Ô µÈ´Ù. ´ÙÀ½À¸·Î ³Ñ¾î°¡±â Àü¿¡ Àá±ñ ¿ë¾î µÎ °³¸¸ ´õ Á¤ÀÇÇÏÀÚ. ´Ù¸§ÀÌ ¾Æ´Ï ¶ó, "C ÇÔ¼ö"¶õ C ¸ðµâÂÊ¿¡¼­ Á¤ÀÇµÈ ÇÔ¼ö¸¦ ¶æÇÏ°í, "¾î¼Àºí¸® ÇÔ¼ö"¶õ ¾î¼Àºí¸® ¸ðµâÂÊ¿¡¼­ Á¤ÀÇµÈ ÇÔ¼ö¸¦ ¶æÇÑ´Ù´Â °ÍÀÌ´Ù. --------------------------------------------------------------------- 5 ÁøÀÔ ÄÚµå¿Í Å»Ãâ ÄÚµå --------------------------------------------------------------------- C¿¡¼­ ÇÔ¼ö´Â "BP¸¦ ÅëÇؼ­ ½Ç¸Å°³º¯¼ö¸¦ ÂüÁ¶"Çϵµ·Ï ±ÔÄ¢ÀÌ Á¤ÇØÁ® ÀÖ´Ù. Áï BP¿¡´Ù°¡ ƯÁ¤ÇÑ ¿É¼ÂÀ» ´õÇÑ À§Ä¡ÀÇ ½ºÅÃÀ» ÂüÁ¶ÇÏ¸é µÈ´Ù. +------------------------------------+ | ½Ç¸Å°³º¯¼ö´Â BP¸¦ ÅëÇؼ­ ÂüÁ¶ÇÑ´Ù. | +------------------------------------+ ¿©±â¼­ ÁÖÀÇÇÒ Á¡ÀÌ Çϳª ÀÖ´Ù. C´Â ¸ðµç ÇÔ¼ö È£ÃâÀ» ÀüÈÄÇÏ¿© BP°ª ÀÌ À¯ÁöµÈ´Ù°í °¡Á¤ÇÑ´Ù. ±×·¯¹Ç·Î ÇÇÈ£Ãâ ÇÔ¼ö´Â ±× ¼±µÎ¿¡¼­ ¹Ýµå½Ã BP ¸¦ ´ëÇǽÃÄѾ߸¸ ÇÑ´Ù. ±×·± ´ÙÀ½ BP¿¡ SP°ªÀ» º¹»çÇÏ¿© ½Ç¸Å°³º¯¼öÀÇ Âü Á¶¿¡ ÀÌ¿ëÇÑ´Ù. À̸¦ ó¸®ÇØ ÁÖ´Â °£´ÜÇÑ Äڵ带 À̸§ÇÏ¿© "ÁøÀÔ ÄÚµå(ent ry code)"¶ó°í ºÎ¸¥´Ù. ¸¶Âù°¡Áö·Î ÇÇÈ£Ãâ ÇÔ¼ö°¡ ¼öÇàÀ» Á¾·áÇÏ°í º¹±ÍÇÒ ¶§¿¡´Â ¹Ýµå½Ã BP ¸¦ È£ÃâµÇ±â ÀüÀÇ ¿ø·¡ÀÇ °ªÀ¸·Î º¹±¸½ÃÄÑ ³õ¾Æ¾ß¸¸ ÇÑ´Ù. Áï pop bp ¸í·É À» ret ¸í·É Á÷Àü¿¡ µÎ¾î¾ß ÇÑ´Ù. ÀÌ µÎ ¸í·ÉÀ» À̸§ÇÏ¿© "Å»Ãâ ÄÚµå(exit code)"¶ó°í ºÎ¸¥´Ù. ÀÌ»óÀÇ ±ÔÄ¢Àº ÇÇÈ£Ãâ ÇÔ¼ö ³»¿¡¼­ ÀÚµ¿º¯¼ö¸¦ ÀüÇô ¾²Áö ¾ÊÀ» ¶§ÀÇ ¾ê±âÀ̸ç, À̸¦ ÀϹÝÀûÀ¸·Î ³ªÅ¸³»¸é <±×¸² 1>°ú °°´Ù. <±×¸² 1> ÇÇÈ£Ãâ ÇÔ¼ö ³»¿¡¼­ ÀÚµ¿º¯¼ö¸¦ ÀüÇô ¾²Áö ¾ÊÀ» ¶§ ÁøÀÔ ÄÚµå¿Í Å»Ãâ ÄÚµåÀÇ ÀϹÝÀûÀÎ ¿¹ ------------------------------------------------------------ SI¿Í DI¸¦ ÀüÇô ¾²Áö ¾ÊÀ» ¶§ SI¿Í DI¸¦ »ç¿ëÇÒ ¶§ ------------------------------------------------------------ ...... PROC ...... ...... PROC ...... push bp push bp mov bp,sp mov bp,sp push si push di ...... ...... pop di pop si pop bp pop bp ret ret ...... ENDP ...... ENDP ------------------------------------------------------------ <±×¸² 1>¿¡¼­ SI, DI¸¦ »ç¿ëÇÒ ¶§ µÎ ·¹Áö½ºÅ͸¦ ´ëÇǽÃÄÑ¾ß ÇÏ´Â ÀÌ À¯´Â C°¡ ¸ðµç ÇÔ¼ö È£Ãâ ÀüÈÄ¿¡ SI¿Í DI°ªÀÌ À¯ÁöµÈ´Ù°í °¡Á¤Çϱ⠶§¹®ÀÌ ´Ù. SI¿Í DI´Â Åͺ¸ C¿¡¼­ ·¹Áö½ºÅÍ º¯¼ö·Î »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î test ÇÔ ¼ö´Â <¿¹Á¦ 6>°ú °°À» ¼ö ÀÖ´Ù. º¸¸é ±Ý¹æ ¾Ë°ÚÁö¸¸ (i + j - 1)ÀÇ ¼ö½ÄÀ» °è»êÇؼ­ ±× °á°ú¸¦ ax¿¡ ´ã¾Æ¼­ ¹ÝȯÇÏ´Â ´Ü¼øÇÑ ÇÔ¼öÀÌ´Ù. <¿¹Á¦ 6> ¼ÒÇü ¸ðµ¨¿¡¼­ test ÇÔ¼öÀÇ ¿¹ ---------------------------------------------------- _TEXT SEGMENT BYTE PUBLIC 'CODE' _test PROC NEAR +-----------------------------------------+ ÁøÀÔ | push bp --- (1) | ÄÚµå | mov bp,sp --- SP¸¦ BP¿¡ º¹»çÇÑ´Ù. | +-----------------------------------------+ mov ax,[bp+4] --- ½Ç¸Å°³º¯¼ö iÀÇ °ª add ax,[bp+6] --- ½Ç¸Å°³º¯¼ö jÀÇ °ª sub ax,[bp+8] --- ½Ç¸Å°³º¯¼ö 1 +-----------------------------------------+ Å»Ãâ | pop bp | ÄÚµå | ret --- ¹Ýȯ°ªÀº AX¿¡ ´ã¾Æ¼­ µÇµ¹¸°´Ù. | +-----------------------------------------+ _test ENDP END ---------------------------------------------------- <¿¹Á¦ 6>¿¡¼­ test ÇÔ¼ö º»Ã¼ÀÇ ¼±µÎ¿Í ³¡¿¡ °¢°¢ ÇÕ´çÇÑ ÁøÀÔ ÄÚµå¿Í Å»Ãâ Äڵ尡 ³õ¿© ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¼­ test ÇÔ¼ö´Â SI¿Í DI¸¦ ÀüÇô ¾²Áö ¾Ê±â ¶§¹®¿¡ ±× µÎ ·¹Áö½ºÅ͸¦ ½ºÅÿ¡ ´ëÇǽÃÅ°Áö ¾Ê°í ÀÖ ´Ù. --------------------------------------------------------------------- 6 ½Ç¸Å°³º¯¼öÀÇ ÂüÁ¶ --------------------------------------------------------------------- 6.1 ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­ ¸Å°³º¯¼öÀÇ ÂüÁ¶ °è¼ÓÇؼ­ <¿¹Á¦ 6>ÀÇ test ÇÔ¼ö°¡ ¸Å°³º¯¼ö¸¦ ÂüÁ¶ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸ÀÚ. ¿ì¼± ¾Ë¾Æ¾ß ÇÒ »çÇ×Àº ¿Ö [bp+4]°¡ ½Ç¸Å°³º¯¼ö i°¡ µÇ´Â°¡ ÇÏ ´Â °ÍÀÌ´Ù. ±×°ÍÀº ´ÙÀ½ <±×¸² 2>ÀÇ ½ºÅà »óȲÀ» º¸¸é ¾Ë ¼ö ÀÖ´Ù. »ó¼¼È÷ ¼³¸íÇÏ ÀÚ¸é, ¿ì¼± bp+0ÀÇ 2¹ÙÀÌÆ® ¿µ¿ª¿¡´Â <¿¹Á¦ 6> (1) À§Ä¡ÀÇ push bp ¸í·É¿¡ ÀÇÇØ È£Ãâ ÇÔ¼ö(calling function)ÂÊ¿¡¼­ ¾²´øBP°ªÀÌ ´ëÇǵǾî ÀÖ´Ù. ´Ù À½ bp+2ÀÇ 2¹ÙÀÌÆ® ¿µ¿ª¿¡´Â ³ªÁß¿¡ ret ¸í·É¿¡ ÀÇÇØ È£Ãâ ÇÔ¼ö·Î µÇµ¹¾Æ °¥ ¶§ÀÇ º¹±Í ¹øÁö(return address)°¡ ÀúÀåµÇ¾î ÀÖ´Ù. À§ÀÇ <¿¹Á¦ 6>¿¡¼­ ´Â ¼ÒÇü ÄÚµå ¸ðµ¨À̱⠶§¹®¿¡ º¹±Í ¹øÁö°¡ 2¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °¡Áø´Ù. <±×¸² 2> test°¡ È£ÃâµÈ Á÷ÈÄÀÇ ½ºÅà »óȲ ---------------------------------------------------- | | ¹øÁö ÂüÁ¶ ÇÏÀ§¹øÁö +----------+ | | BP°ª´ëÇÇ | -- BP | +----------+ | | º¹±Í¹øÁö | -- BP+2 | +----------+ | | iÀÇ °ª | -- BP+4 [BP+4] | +----------+ | | jÀÇ °ª | -- BP+6 [BP+6] | +----------+ | | 1 | -- BP+8 [BP+8] »óÀ§¹øÁö +----------+ | | ---------------------------------------------------- ÀÌ»óÀÇ ½ºÅà ±¸Á¶·Î ÀÎÇØ Ã¹¹ø° ½Ç¸Å°³º¯¼ö iÀÇ °ªÀº bp+4 À§Ä¡ÀÇ ½º Åà ¿µ¿ª¿¡¼­ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. iÀÇ °ªÀº ù¹ø° ½Ç¸Å°³º¯¼öÀ̱⠶§¹®¿¡ ¸Ç ¸¶Áö¸·À¸·Î ½ºÅÿ¡ ´ëÇǵǸç, ±×·¡¼­ BP¿¡ »ó´ëÀûÀ¸·Î °¡Àå °¡±î¿î °÷¿¡ i ÀÇ °ªÀÌ ³õÀδٴ °ÍÀº ´©Â÷ ¾ð±ÞÇß´Ù. 6.2 ´ëÇü ÄÚµå ¸ðµ¨¿¡¼­ ¸Å°³º¯¼öÀÇ ÂüÁ¶ ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­´Â BP+4¿¡ ù¹ø°(¸Ç ¿ÞÂÊ) ½Ç¸Å°³º¯¼ö°ªÀÌ ³õÀÎ ´Ù. ±×·¸´Ù¸é ´ëÇü ÄÚµå ¸ðµ¨¿¡¼­µµ BP+4¿¡ ³õÀϱî? ÀüÇô ±×·¸Áö ¾Ê´Ù. ÁÖÁöÇÏ´Ù½ÃÇÇ ´ëÇü ÄÚµå ¸ðµ¨¿¡¼­´Â ¿ø°Å¸® È£ÃâÀ» ÇàÇϱ⠶§¹®¿¡ "º¹±Í ¹øÁö´Â 4¹ÙÀÌÆ®ÀÇ Å©±â"¸¦ °¡Áö°Ô µÈ´Ù. ±×·¡¼­ ù¹ø° ¸Å°³º¯¼öÀÇ À§Ä¡´Â BP+4°¡ ¾Æ´Ï¶ó BP+6ÀÌ µÇ¾î¾ß ÇÑ´Ù. Áï, ´ëÇü ÄÚµå ¸ðµ¨¿¡¼­´Â ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­º¸´Ù 2¸¸Å­¾¿ Ãß°¡ÀûÀÎ ¿É¼ÂÀÇ Áõ°¡°¡ ¿ä±¸µÈ´Ù. ¸¸¾à ¸ðµç ¸Å°³º¯¼öÀÇ Å©±â°¡ 2¹ÙÀÌÆ®·Î ÀÏÁ¤ÇÏ´Ù´Â °¡Á¤À» ÇÏ°í ÀÏ¹Ý ÀûÀ¸·Î µµÇ¥È­ÇÏ¸é ´ÙÀ½ <Ç¥ 1>°ú °°´Ù. ¹°·Ð ±× Å©±â°¡ ÀÏÁ¤Ä¡ ¾ÊÀ¸¸é <Ç¥ 1>Àº ¼º¸³µÇÁö ¾Ê´Â´Ù. <Ç¥ 1> ¸Å°³º¯¼öÀÇ ÂüÁ¶ ---------------------------------------------- ¸Å°³º¯¼ö ¼ÒÇü ÄÚµå ¸ðµ¨ ´ëÇü ÄÚµå ¸ðµ¨ ---------------------------------------------- 1¹ø° [BP+4] [BP+6] 2¹ø° [BP+6] [BP+8] ... n¹ø° [BP+2+n*2] [BP+4+n*2] ---------------------------------------------- * ´Ü, ¸ðµç ¸Å°³º¯¼ö°¡ 2¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °¡Áú ¶§¿¡¸¸ ¼º¸³ÇÑ´Ù. --------------------------------------------------------------------- 7 ÀÚµ¿º¯¼öÀÇ Á¤ÀÇ ¹× ÂüÁ¶ --------------------------------------------------------------------- ¾î¼Àºí¸® ÇÔ¼ö ³»¿¡¼­ ÀÚµ¿º¯¼ö¸¦ ¾²·Á¸é ÀÏ´Ü ÀÚµ¿º¯¼ö¸¦ À§ÇÑ ½ºÅà ¿µ¿ªÀ» È®º¸ÇØ µÎ¾î¾ß ÇÑ´Ù. ±×·¯±â À§ÇØ º¸Åë sub sp,nÀ̶ó´Â ¸í·ÉÀ» ¾´ ´Ù. ¿©±â¼­ nÀº »ç¿ëÇÒ ÀÚµ¿º¯¼öÀÇ ÃÑ ¹ÙÀÌÆ® Å©±â·Î¼­ »ó¼öÀÌ´Ù. ÀÌ·¸°Ô ÀÚµ¿º¯¼öÀÇ ¿µ¿ªÀ» È®º¸ÇÏ´Â °ÍÀÌ °ð ÀÚµ¿º¯¼öÀÇ "Á¤ÀÇ"°¡ µÈ´Ù. ÀÏ´Ü SP°ªÀ» °¨¼Ò½ÃÅ´À¸·Î½á ½ºÅà ¿µ¿ªÀ» È®º¸ÇÑ µÚ¿¡ ÀÚµ¿º¯¼öÀÇ Âü Á¶´Â BP¸¦ ÅëÇØ ÀÌ·ç¾îÁø´Ù. SP¸¦ ÀÌ¿ëÇÏ¸é ¾È µÇ´Â ÀÌÀ¯´Â, ÀϹÝÀûÀ¸·Î ÇÔ¼ö ³»¿¡ ÈçÈ÷ µîÀåÇÏ´Â push/pop ¸í·É¿¡ ÀÇÇØ SPÀÇ °ªÀÌ ¼ö½Ã·Î º¯Çϱ⠶§¹®ÀÌ´Ù. ±×·¡¼­ °íÁ¤ÀûÀÎ BP¸¦ ½á¼­ ÂüÁ¶ÇÏ´Â °ÍÀÌ ¿øÄ¢ÀÌ´Ù. ÀÚµ¿º¯¼ö¸¦ ¾²´Â °æ¿ì ÁøÀÔÄÚµå¿Í Å»ÃâÄÚµå´Â °¢°¢ ½ºÅà ¿µ¿ªÀ» È®º¸ ÇÏ°í º¹±Í½Ã SP°ªÀ» ȯ¿ø½ÃÅ°±â À§ÇØ <±×¸² 3>°ú °°ÀÌ ¼öÁ¤µÇ¾î¾ß ÇÑ´Ù. <±×¸² 3> ÇÇÈ£Ãâ ÇÔ¼ö ³»¿¡¼­ ÀÚµ¿º¯¼ö¸¦ »ç¿ëÇÒ ¶§ ÁøÀÔ ÄÚµå¿Í Å»Ãâ ÄÚµåÀÇ ÀϹÝÀûÀÎ ¿¹ ----------------------------------------------------- SI¿Í DI¸¦ ÀüÇô ¾²Áö ¾ÊÀ» ¶§ SI¿Í DI¸¦ »ç¿ëÇÒ ¶§ ----------------------------------------------------- ...... PROC ...... ...... PROC ...... push bp push bp mov bp,sp mov bp,sp sub sp,n sub sp,n push si push di ...... ...... pop di pop si mov sp,bp mov sp,bp pop bp pop bp ret ret ...... ENDP ...... ENDP ----------------------------------------------------- * nÀº ÀÚµ¿º¯¼öÀÇ ÃÑ ¹ÙÀÌÆ® Å©±âÀÌ´Ù. ±×¸®°í ù¹ø° ÀÚµ¿º¯¼öÀÇÀ§Ä¡´Â BP-2°¡ µÇ¸ç, ¸¸¾à ±× ÀÚµ¿º¯¼ö°¡ 2 ¹ÙÀÌÆ® Å©±â¶ó¸é [BP-2]·Î ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. Àü°ú °°ÀÌ ¸ðµç ÀÚµ¿º¯¼öÀÇ Å© ±â°¡ 2¹ÙÀÌÆ®·Î ÀÏÁ¤ÇÏ´Ù¸é <Ç¥ 2>ÀÇ °ø½ÄµéÀÌ ¼º¸³µÈ´Ù. ¿©±â¼­ ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó BPÀÇ ¿É¼ÂÀÌ Â÷ÀÌ°¡ ³ªÁö´Â ¾Ê´Â´Ù´Â Á¡¿¡ À¯ÀÇÇϱ⠹ٶõ´Ù. <Ç¥ 2> ÀÚµ¿º¯¼öÀÇ ÂüÁ¶ -------------------------- ÀÚµ¿º¯¼ö ÂüÁ¶ -------------------------- 1¹ø° [BP-2] 2¹ø° [BP-4] ... n¹ø° [BP-n*2] -------------------------- * ´Ü, ¸ðµç ÀÚµ¿º¯¼ö°¡ 2¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °¡Áú ¶§¿¡¸¸ ¼º¸³ÇÑ´Ù. --------------------------------------------------------------------- 8 ¾î¼Àºí¸® ÇÔ¼ö¿¡¼­ C ÇÔ¼öÀÇ È£Ãâ --------------------------------------------------------------------- ¾î¼Àºí¸® ÇÔ¼ö¿¡¼­ C ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀº ¾Õ¿¡¼­ C ÇÔ¼ö¿¡¼­ ¾î¼À ºí¸® ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ¹ý°ú ¶È°°´Ù. ¾Õ¿¡¼­´Â °£´ÜÇÑ ¿¹¸¸ µé¾ú±â ¶§¹® ¿¡ ¿©±â¼­´Â ÀÚ¼¼È÷ ¼³¸íÇÏ°íÀÚ ÇÑ´Ù. ¿øÄ¢Àº ´ÙÀ½°ú °°´Ù. +-- È£Ãâ Á÷Àü -------------------------------------------+ | ¸¶Áö¸·(¸Ç ¿À¸¥ÂÊ) ½Ç¸Å°³º¯¼ö¸¦ Á¦ÀÏ Ã³À½¿¡ ´ëÇǽÃŲ´Ù. | | ù¹ø°(¸Ç ¿ÞÂÊ) ½Ç¸Å°³º¯¼ö¸¦ Á¦ÀÏ ¸¶Áö¸·¿¡ ´ëÇǽÃŲ´Ù. | +--------------------------------------------------------+ +-- È£Ãâ Á÷ÈÄ -----------------------------------------------+ | SP¸¦ ¿ø·¡´ë·Î º¹±¸½ÃŲ´Ù. | | Áï, SP¿¡ ´ëÇǽÃÄ×´ø ½Ç¸Å°³º¯¼öÀÇ ÃÑ ¹ÙÀÌÆ® Å©±â¸¦ ´õÇϰųª | | ÇØ´çÇÏ´Â ¸¸Å­ÀÇ pop ¸í·ÉÀ» µÎ¸é µÈ´Ù. | +------------------------------------------------------------+ ¿øÄ¢Àº ÀÌ»ÓÀÌ´Ù. µû¶ó¼­ ½Ç¸Å°³º¯¼ö¸¦ ½ºÅÿ¡ ´ëÇǽÃÅ°´Â ¹æ¹ýÀº Æí ¸®ÇÑ ´ë·Î ÇÏ¸é µÈ´Ù. ´Ù¸¸ ÇÑ °¡Áö ÁÖÀÇÇÒ Á¡ÀÌ ÀÖ´Ù. Áï, ½ºÅûóÀ¸·ÎÀÇ ´ëÇÇ´Â Ç×»ó 2¹ÙÀÌ Æ®ÀÇ ¿öµå ´ÜÀ§·Î ÀÌ·ç¾îÁö±â ¶§¹®¿¡, ¸¸¾à 1¹ÙÀÌƮ¥¸® ½Ç¸Å°³º¯¼ö¶ó ÇÒ Áö¶óµµ ´ëÇÇ´Â 2¹ÙÀÌÆ® ´ÜÀ§·Î ÇؾßÇÑ´Ù´Â Á¡ÀÌ´Ù. µû¶ó¼­ 1¹ÙÀÌƮ¥¸® ½Ç ¸Å°³º¯¼ö´Â ¹Ýµå½Ã 2¹ÙÀÌÆ®ÀÇ Å©±â·Î ºÎȣȮÀå(sign extension)½ÃŲ ÈÄ¿¡ ´ëÇǽÃÄÑ¾ß ÇÑ´Ù. +--------------------------------------------+ | 1¹ÙÀÌÆ® Å©±âÀǽǸŰ³º¯¼ö´Â 2¹ÙÀÌÆ® Å©±â·Î | | ºÎȣȮÀå½ÃŲ ÈÄ¿¡ ½ºÅÿ¡ ´ëÇǽÃÄÑ¾ß ÇÑ´Ù. | +--------------------------------------------+ ºÎȣȮÀå ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù. -------------------------------------------------------------- * ºÎÈ£ÀÖ´Â charÇüÀ̶ó¸é, À½¼öÀÎ °æ¿ì »óÀ§ ¹ÙÀÌÆ®¸¦ 0xff, 0 ¶Ç´Â ¾ç¼öÀÎ °æ¿ì 0x00À¸·Î ¼³Á¤ÇÑ´Ù. * ºÎÈ£¾ø´Â unsigned charÇüÀ̶ó¸é, »óÀ§ ¹ÙÀÌÆ®´Â ¹«Á¶°Ç 0x00. -------------------------------------------------------------- ¶ÇÇѾî¼Àºí¸® ¸ðµâ¿¡¼­´Â ±ØÈ÷ µå¹® °æ¿ìÀÌ°ÚÁö¸¸, 4¹ÙÀÌÆ® Å©±âÀÇ f loatÇüÀÇ º¯¼ö´Â 8¹ÙÀÌÆ® Å©±âÀÇ doubleÇüÀ¸·Î º¯È¯ÇÑ ÈÄ¿¡ ´ëÇǽÃÄÑ¾ß ÇÑ ´Ù´Â Á¡µµ Âü°íÇϱ⠹ٶõ´Ù. --------------------------------------------------------------------- 9 EQU Áö½ÃÀÚ¸¦ ÀÀ¿ëÇÑ ¸Å°³º¯¼ö/ÀÚµ¿º¯¼öÀÇ ÂüÁ¶ --------------------------------------------------------------------- ¸Å°³º¯¼ö³ª ÀÚµ¿º¯¼ö¸¦ ÂüÁ¶Çϱâ À§ÇØ ¹ø¹øÈ÷ BP¿¡ ¿É¼ÂÀ» ´õÇÑ ¼ö½Ä À» ½á¾ß ÇÏ´Â °ÍÀº Áö±ØÈ÷ ¹ø°Å·Ó±â ¦ÀÌ ¾ø´Ù. ÇÏÁö¸¸ °£´ÜÇÑ °íÀüÀûÀÎ Å×Å©´ÐÀ» ¾²¸é ±× ¹ø°Å·Î¿òÀ» ´Ù¼Ò³ª¸¶ ÁÙÀÏ ¼ö ÀÖ´Ù. ±×°ÍÀº EQU Áö»çÀÚ ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù(ÀÌÇÏ EQU¹®À¸·Î ¾àĪ). ¿¹ÄÁµ¥ test ÇÔ¼öÀÇ °æ¿ì [BP+4], [BP+6], [BP+8]À» Á÷Á¢ ±â¼úÇÏ´Â ´ë ½Å¿¡ <¿¹Á¦ 7>°ú °°ÀÌ EQU¹®À¸·Î a, b, c¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÏ¸é µÈ´Ù. <¿¹Á¦ 7> ¼ÒÇü ¸ðµ¨¿¡¼­ test ÇÔ¼öÀÇ ¿¹ 2 ---------------------------------------------------- a EQU [bp+4] b EQU [bp+6] c EQU [bp+8] _TEXT SEGMENT BYTE PUBLIC 'CODE' _test PROC NEAR +----------------------------------------+ ÁøÀÔ | push bp --- (1) | ÄÚµå | mov bp,sp --- SP¸¦ BP¿¡ º¹»çÇÑ´Ù. | +----------------------------------------+ mov ax,a add ax,b sub ax,c +-----------------------------------------+ Å»Ãâ | pop bp | ÄÚµå | ret --- ¹Ýȯ°ªÀº AX¿¡ ´ã¾Æ¼­ µÇµ¹¸°´Ù. | +-----------------------------------------+ _test ENDP END ---------------------------------------------------- ±×·±µ¥ ¾î¶»°Ô º¸¸é EQU¹®À¸·Î ¸Å°³º¯¼ö³ª ÀÚµ¿º¯¼öÀÇ À§Ä¡¸¦ ÀÏÀÏÀÌ Á¤ÀÇÇÏ¿© »ç¿ëÇÏ´Â °ÍÁ¶Â÷ ¹ø°Å·Î¿ï ¶§°¡ ¸¹´Ù. ƯÈ÷ ¸Å°³º¯¼ö¸¦ ÂüÁ¶ÇÒ ¶§¿¡´Â, ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó BP¿¡ ´ëÇÑ ¿É¼ÂÀÌ Â÷ÀÌ°¡ ³ª±â ¶§¹®¿¡ ´õ´õ¿í ¹ø°Å·Ó´Ù. ±×·¡¼­ Åͺ¸ ¾î¼Àºí·¯ µî¿¡¼­´Â ¸Å°³º¯¼ö ¹× ÀÚµ¿º¯¼öÀÇ ÂüÁ¶¸¦ À§ÇØ ¸Å¿ì À¯¿ëÇÑ ARG ¹× LOCAL Áö½ÃÀÚ¸¦ Á¦°øÇϱâ´Â Çϴµ¥, Áö¸é»ó ´ÙÀ½ ´Þ·Î ¼³¸íÀ» ¹Ì·ç°Ú´Ù. --------------------------------------------------------------------- 10 ¾î¼Àºí¸® ¸ðµâÀÇ ¾î¼Àºí ¹æ¹ý°ú ÃÖÁ¾ÀûÀÎ ¸µÅ© ¹æ¹ý --------------------------------------------------------------------- ¾î¼Àºí¸® ¸ðµâÀ» ¾î¼ÀºíÇÏ´Â ¹æ¹ý¿¡´Â µÎ °¡Áö°¡ ÀÖ´Ù. Çϳª´Â ´ç¿¬È÷ ¾î¼Àºí·¯¸¦ Á÷Á¢ ½ÇÇà½ÃÄѼ­ ½á¼­ ¾î¼ÀºíÇÏ´Â °ÍÀÌ°í, ´Ù¸¥ Çϳª´Â Åͺ¸ C ¸í·ÉÇà ¹öÀüÀÎ tcc.exe¸¦ ½á¼­ °£Á¢ÀûÀ¸·Î ¾î¼Àºí·¯¸¦ ½ÇÇà½ÃÄÑ ¾î¼ÀºíÇÏ ´Â ¹æ¹ýÀÌ´Ù. ¿ì¼± ù¹ø° ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù. ÀÌ ¶§ ¹°·Ð tasm.exe³ª masm.exe´Â µµ½º PATH ¸í·É¿¡ ÀÇÇØ ÁöÁ¤µÈ °Ë»ö °æ·Î(search path) »ó¿¡ Á¸ÀçÇØ¾ß ÇÑ ´Ù. ±×¸®°í /mx³ª /MX ¿É¼ÇÀ» ÁÖ´Â ÀÌÀ¯´Â ¿ÜºÎ¸íĪ¿¡¼­ ´ë¼Ò¹®ÀÚ°¡ ±¸º° µÇµµ·Ï(case-sensitive) Çϱâ À§ÇÔÀÌ´Ù. ÀÌ ¿É¼ÇÀ» ºü¶ß¸®¸é ³ªÁß¿¡ ¸µÅ© ÇÒ ¶§ Undefined symbol ¿¡·¯¸¦ ¹«´õ±â·Î ¾ç»êÇÏ°Ô µÇ´Ï ÁÖÀÇÇϱ⠹ٶõ´Ù. [1] Åͺ¸ ¾î¼Àºí·¯¸¦ ¾µ ¶§ ¡æ /mx ¿É¼ÇÀ» ÁöÁ¤ C:\TURBOC\WORK>tasm /mx filename [2] ¸ÅÅ©·Î ¾î¼Àºí·¯¸¦ ¾µ ¶§ ¡æ /MX ¿É¼ÇÀ» ÁöÁ¤ C:\TURBOC\WORK>masm /MX filename ÀÌ ¹æ¹ýÀº ¾î¼Àºí¸® ¸ðµâ¸¸À» ¾î¼ÀºíÇÒ °æ¿ì¿¡ À¯¿ëÇÏ´Ù. ¹Ý¸é¿¡ µÎ¹ø ° ¹æ¹ýÀº ¾î¼Àºí¸® ¸ðµâ»Ó¸¸¾Æ´Ï¶ó C ¸ðµâ±îÁö ÇѲ¨¹ø¿¡ ÄÄÆÄÀÏ/¾î¼Àºí ÇÏ°íÀÚ ÇÒ ¶§ ¸Å¿ì À¯¿ëÇÑ´Ù. Áï, tcc.exe¸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î ¾î¼ÀºíÇϸé tcc.exe°¡ ³»Á¤µÈ/ÁöÁ¤µÈ ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó ÀûÀýÇÑ ¿É¼ÇÀ¸·Î ¸µÄ¿ tlin k.exe±îÁö ¾Ë¾Æ¼­ ½ÇÇà½ÃÄÑ ÁֹǷΠ´ë´ÜÈ÷ Æí¸®ÇÏ´Ù. ƯÈ÷ tlink.exe¸¦ Á÷ Á¢ ½ÇÇà½Ãų ¶§¿Í ´Þ¸® ±âµ¿ ¸ðµâ(startup module)À̳ª Åͺ¸ C Ç¥ÁØ ¶óÀÌ ºê·¯¸® È­ÀϵéÀ» ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø¾î¼­ ´ë´ÜÈ÷ Æí¸®ÇÏ´Ù. ¿¹¸¦ µé¾î Àüü ÇÁ·Î±×·¥ÀÌ ¸ÞÀÎ C ¸ðµâ main.c¿Í ¾î¼Àºí¸® ¸ðµâ mymo dule.asmÀÇ µÎ È­ÀÏ·Î ±¸¼ºµÇ¾î ÀÖ´Ù¸é ¾Æ·¡¿Í °°ÀÌ tcc.exe¸¦ ½ÇÇà½ÃÅ°¸é µÈ´Ù. ¹°·Ð ¾Æ·¡ÀÇ ¿¹¿¡¼­´Â ¼ÒÇü ¸ðµ¨·Î ÄÄÆÄÀϵȴÙ. ¸¸¾à ´Ù¸¥ ¸ðµ¨, ¿¹ ÄÁµ¥ ´ëÇü ¸ðµ¨·Î ÄÄÆÄÀÏÇÏ°í ½Í´Ù¸é -ml ¿É¼ÇÀ» ÁÖ¸é µÈ´Ù. C:\TURBOC\WORK>tcc main mymodule.asm À§¿¡¼­ º¸´Ù½ÃÇÇ mymodule ¸ðµâÀ» ±×Àú C ¸ðµâ ÁöÁ¤ÇϵíÀÌ ÇÏ¸é ±×¸¸ ÀÌ´Ù. µü ÇÑ °¡Áö ÁÖÀÇÇÒ Á¡À¸·Î, È®ÀåÀÚ .ASMÀ» ºü¶ß¸®Áö ¾Ê°í ÁöÁ¤Çϱ⠸¸ ÇÏ¸é ¸¸»ç OK! ÀÌ·¸°Ô ÇØÁÖ¸é tcc.exe´Â main ¸ðµâÀ» ÄÄÆÄÀÏÇÏ°í °ð ÀÌ ¾î tasm.exe¸¦ ½ÇÇà½ÃÄÑ mymodule.asmÀ» ¾î¼ÀºíÇÑ µÚ tlink.exe¸¦ ½ÇÇà½Ã ÄÑ ¸µÅ©±îÁö ÀÏ°ýÀûÀ¸·Î ó¸®ÇØ ÁØ´Ù. ¸¸¾à mymodule.asmÀ» ¾î¼Àºí¸¸ ½ÃÅ°°í ½Í´Ù¸é ¾Æ·¡¿Í °°ÀÌ -c ¿É¼ÇÀ» Á־ ¸µÅ© ÀÛ¾÷À» ±ÝÁö½ÃÅ°¸é µÈ´Ù. main ¸ðµâÀ» ÄÄÆÄÀϸ¸ ½ÃÅ°°í ½ÍÀ» ¶§µµ ¸¶Âù°¡Áö·Î -c ¿É¼ÇÀ» ÁÖ¸é µÈ´Ù. C:\TURBOC\WORK>tcc -c mymodule.asm ÇÑÆí ¸µÅ© ÀÛ¾÷¸¸ ´Üµ¶À¸·Î ó¸®ÇؾßÇÒ Çʿ並 ´À³¥ ¶§µµ ÀÖÀ» °ÍÀÌ ´Ù. ±×·±µ¥ ¸µÄ¿¸¦ Á÷Á¢ ½ÇÇà½ÃÅ°´Â °ÍÀº Á¤¸»·Î ¹ø°Å·Ó±â ¦ÀÌ ¾ø´Ù. ¿Ö ³Ä ÇÏ¸é ±âµ¿ ¸ðµâÀº ¹°·Ð Åͺ¸ C ¶óÀ̺귯¸® È­ÀϱîÁö ¿ÏÀüÇÏ°Ô ÁöÁ¤ÇØ ÁÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. µû¶ó¼­ ¸µÄ¿¸¦ Á÷Á¢ ½ÇÇà½ÃÅ°´Â ¹æ¹ýÀº ½Ç·Î ¹«½Ä ÇÑ ¹æ¹ýÀÌ ¾Æ´Ò ¼ö ¾ø´Ù. º¸´Ù Çö¸íÇÑ ¹æ¹ýÀº tcc.exe¸¦ ÅëÇØ °£Á¢ÀûÀ¸·Î ¸µÅ©ÇÏ´Â ¹æ¹ýÀÌ´Ù. Áï, tcc.exe¿¡ ÇÁ·Î±×·¥À» ±¸¼ºÇÏ´Â ¸ðµç ¸ðµâµéÀ» ÁöÁ¤ÇÒ ¶§ ¸ñÀû È­ ÀϸíÀ¸·Î ÁöÁ¤Çϸé, ´Ù½Ã ¸»Çؼ­ È®ÀåÀÚ .OBJ±îÁö ºü¶ß¸®Áö ¾Ê°í ÁöÁ¤ÇÏ ¸é, tcc.exe´Â ÄÄÆÄÀÏ/¾î¼ÀºíÀº ÀüÇô ÇàÇÏÁö ¾Ê°í Áï½Ã tlink.exe¸¦ ºÒ·¯ ¼­ ¸µÅ© ÀÛ¾÷À» ¼öÇàÇϵµ·Ï ÇÑ´Ù. ÀÌ ¶§ tcc.exe´Â ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó Àû ÀýÇÑ ¿É¼Ç, ±âµ¿ ¸ðµâ ¹× Åͺ¸ C ¶óÀ̺귯¸® È­ÀÏÀ» ÁöÁ¤ÇÏ¿© Åͺ¸ ¸µÄ¿t link.exe¸¦ ºÎ¸£±â ¶§¹®¿¡ ÇÁ·Î±×·¡¸Ó ÀÔÀå¿¡¼­´Â »ó´çÇÑ ¹ø°Å·Î¿òÀ» ´ú ¼ö ÀÖ´Ù. C:\TURBOC\WORK>tcc main.obj mymodule.obj À§¿¡¼­ ¸¸¾à Åͺ¸ C Ç¥ÁØ ¶óÀ̺귯¸®°¡ ¾Æ´Ñ º°µµÀÇ ¶óÀ̺귯¸®°¡ ¾² ÀÎ´Ù¸é ³¡ºÎºÐ¿¡ .LIB È®ÀåÀÚ¸¦ ºü¶ß¸®Áö ¾Ê°í ÁöÁ¤ÇØ ÁÖ¸é µÈ´Ù. --------------------------------------------------------------------- 11 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- ´ÙÀ½ ´Þ¿¡´Â °è¼ÓÇؼ­ Åͺ¸ ¾î¼Àºí·¯°¡ Åͺ¸ C¸¦ Áö¿øÇϱâ À§ÇØ Á¦°ø ÇÏ´Â ¸Å¿ì Æí¸®ÇÑ ±â´ÉÀÎ "´Ü¼øÈ­ ¼¼±×¸ÕÆ® Áö½ÃÀÚ(simplified segment di rective)" DOSSEG, .MODEL, .CODE, .DATA µîµî°ú ´õºÒ¾î ¸Å°³º¯¼ö ¹× ÀÚµ¿ º¯¼ö¸¦ Á¤ÀÇ/ÂüÁ¶Çϴµ¥ »ó´çÇÑ À¯¿ë¼ºÀ» °¡Á®´Ù ÁÖ´Â ARG ¹× LOCAL Áö½Ã ÀÚ¿¡ ´ëÇÏ¿© »ó¼¼È÷ ¾Ë¾Æº¸°Ú´Ù. ¾Æ¸¶ ÀÌ Áö½ÃÀڵ鿡 Àͼ÷ÇØÁö¸é ´Ù½Ã´Â ¹ø°Å·Î¿î SEGMENT, GROUP µîÀÇ Áö½ÃÀÚ¸¦ ¾²Áö ¾Ê°Ô µÉ °ÍÀÌ´Ù.