#46 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷1-1: °¢Á¾ Æ÷ÀÎÅÍ 05/06 00:02 282 line ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1990.5 HWP/TXT º¯È¯: 1993.5.5 >>> Åͺ¸ CÀÇ ±íÀº °÷ <<< Á¦1ȸ ±Ù°Å¸®/¿ø°Å¸®/°Å´ë Æ÷ÀÎÅÍÀÇ Æ¯Â¡ ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú4) --------------------------------------------------------------------- 1 º»¹®¿¡ ¾Õ¼­ --------------------------------------------------------------------- ÀÛ³â 12¿ùÀ» ³¡À¸·Î ¸¶°¨µÈ "Á¤º¹ Åͺ¸ C"¶ó´Â ¿¬Àç ÀÌÈÄ·Î °³ÀÎ »çÁ¤ ¶§¹®¿¡ ¸¶¼Ò¿¡ µÎ¹® ºÒÃâÇß¾ú´Âµ¥, À̹ø¿¡ ±âȸ°¡ ´ê¾Æ¼­ »õ·Î ¿¬À縦 ½Ã ÀÛÇÏ°Ô µÇ¾î¼­ ¹Ý°©°Ô »ý°¢ÇÑ´Ù. ±×·±µ¥ ÀâÁö¶ó´Â ¸Å¿ì Á¦ÇÑÀûÀΠȯ°æ Å¿ À¸·Î ÀÎÇØ ÇÑÁ¤µÈ Áö¸é¿¡ º¸´Ù ¸¹Àº Á¤º¸¸¦ ÃàÀû½ÃÅ°·Á´Ù º¸´Ï ¾Æ¹«·¡µµ ±ÛÀÌ µüµüÇØÁú ¼ö¹Û¿¡ ¾øÀ» °Í °°¾Æ ¾çÇظ¦ ¸ÕÀú ±¸ÇÑ´Ù. À̹ø ¿¬Àç¿¡¼­ ´Ù·ê ³»¿ëÀº, Áö³­ "Á¤º¹ ..."¿Í´Â ´Þ¸® Áß°£ °úÁ¤À» Èǽ °Ç³Ê¶Ù¾î¼­, Åͺ¸ C¸¦ ´Ù·ç´Â µ¥ À־ »ó´çÈ÷ °í±Þ ±â¹ý¿¡ ¼ÓÇÏ´Â °Íµé·Î ²Ù¹Ð »ý°¢ÀÌ´Ù. ÃÖÁ¾ ¸ñÇ¥·Î´Â Åͺ¸ C¿Í ¾î¼Àºí¸® ¶Ç´Â (»çÁ¤ÀÌ Çã ¶ôÇϸé) Åͺ¸ ÆĽºÄ®°úÀÇ ¸µÅ©·Î Á¤ÇÒ °èȹÀÌ°í, ±×¿¡ µû¶ó ¿ì¼±Àº ¸µÅ©¿¡ ¾Õ¼­ ±× ±âÃÊ°¡ µÇ´Â ³»¿ëÀ» À̹ø È£¿Í ´ÙÀ½ È£¿¡ °ÉÃļ­ ´Ù·ê ÀÛÁ¤À¸·Î ÀÖ´Ù. ±× ±âÃʷμ­ ÀÌ ´Þ¿¡´Â ±Ù°Å¸®/¿ø°Å¸®/°Å´ë Æ÷ÀÎÅÍ(near/far/huge poi nter)ÀÇ Æ¯Â¡ ¹× Â÷ÀÌÁ¡¿¡ ´ëÇÏ¿© ÀÚ¼¼È÷ ¾Ë¾Æº¸°í, ´ÙÀ½ ´Þ¿¡´Â Åͺ¸ C°¡ Á¦°øÇÏ´Â 6°¡ÁöÀÇ ¸Þ¸ð¸® ¸ðµ¨(memory model)¿¡ °üÇÏ¿© °³·«ÀûÀ¸·Î ¼³¸íÇÑ µÚ ±× Áß¿¡¼­ ƯÈ÷ ¼ÒÇü(small)°ú ´ëÇü(large) ¸ðµ¨¿¡ °üÇÏ¿© ÁýÁßÀûÀ¸·Î ¾Ë¾Æº¼ °ÍÀÌ´Ù. ´õºÒ¾î ±Ù°Å¸®/¿ø°Å¸® È£Ãâ(near/far call)ÀÇ Â÷ÀÌÁ¡¿¡ ´ë Çؼ­µµ ¼³¸íÇÒ °ÍÀÌ´Ù. ´ÙÀ½À¸·Î, ÇöÀç±îÁö À̹ø ¿¬Àç¿¡ °üÇÑ Âü°í ÀÚ·á·Î´Â Turbo C User's GuideÀÇ ¸¶Áö¸· ÀåÀÎ "Advanced Programming in Turbo C"°¡ °ÅÀÇ À¯ÀÏÇÑ ½ÇÁ¤À̹ǷΠ¿¬ÀçÀÇ ³»¿ëµµ ±× ÀÚ·á¿¡ ÁØÇÏ¿© ¼³¸íÇÒ °èȹÀÌ´Ù. ´Ù¸¸ °Å±â ¼­ ÇÊ¿ä¾ø´Â ³»¿ëµéÀ» ¼ÒÆø »èÁ¦ÇÏ°í ºó¾àÇÑ ³»¿ëÀº ´ëÆø º¸¿ÏÇÏ¿© µ¶ÀÚµé ÀÌ Åͺ¸ CÀÇ ±íÀº °÷±îÁö ÀÌÇØÇÏ´Â µ¥ º° ¾î·Á¿òÀÌ ¾øµµ·Ï ÇÒ °ÍÀÌ´Ù. ºÎ¿¬ÇÏ¿© À̹ø ¿¬Àç´Â ±× Ư¼º»ó ¹Ýµå½Ã 8086/8088ÀÇ °¢Á¾ ±¸Á¶¿Í ¾î ¼Àºí¸® ¾ð¾î¿¡ ´ëÇÏ¿© ²Ï ¾Ë°í ÀÖÀ¸¸ç, Åͺ¸ ¾î¼Àºí·¯³ª ¸ÅÅ©·Î ¾î¼Àºí·¯ ÀÇ »ç¿ë¹ýµµ ¿ª½Ã ¾î´À Á¤µµ±îÁö´Â ¾Ë°í ÀÖ´Ù°í °¡Á¤ÇÏ°í ÁøÇàÇÒ ¼ö¹Û¿¡ ¾øÀ» °Í °°´Ù. ±×¸®°í ¿©Å±îÁö´Â ÇÊÀÚ°¡ ±ÛÅõ¸¦ ´Ù¼Ò °¡º±°Ô Çß¾ú´Âµ¥ ÀÌ ¹ø ¿¬Àç´Â ³»¿ëÀÌ ¿ö³« ±â¼úÀûÀÌ¶ó¼­ ±ÛÀÇ ÁøÇà¿¡ ¹æÇØ°¡ µÇÁö ¾Êµµ·Ï ÇÏ ±â À§ÇØ °¡±ÞÀûÀÌ¸é ±×·± ±ÛÅõ¸¦ ÀÚÁ¦ÇÒ »ý°¢À¸·Î ÀÖ´Ù. --------------------------------------------------------------------- 2 iAPx86±º(family) --------------------------------------------------------------------- ´Ù ¾Ë´Ù½ÃÇÇ °¢Á¾ IBM-PC¿¡ ¾²ÀÌ´Â CPU´Â ÇÑ °¡Áö°¡ ¾Æ´Ï´Ù. 16ºñÆ® ·¹Áö½ºÅÍ¿¡ 20ºñÆ®(1M ¹ÙÀÌÆ®)ÀÇ ¹øÁö ÁöÁ¤ÀÌ °¡´ÉÇÑ 8086ºÎÅÍ ½ÃÀÛÇؼ­, °°Àº 16ºñÆ®±ÞÀÌÁö¸¸ 8ºñÆ® ¹ö½º¸¦ °¡Áö´Â 8088, ¿ª½Ã 16ºñÆ®ÀÌÁö¸¸ 24ºñ Æ®(16M ¹ÙÀÌÆ®)ÀÇ ¹øÁö ÁöÁ¤ÀÌ °¡´ÉÇÑ 80286, 32ºñÆ®±ÞÀÇ 80386, ±×¸®°í 8 0386ÀÇ ±â´É¿¡ ij½¬ ¸Þ¸ð¸®¿Í ¼öÄ¡ º¸Á¶ÇÁ·Î¼¼¼­¸¦ ³»Àå½ÃŲ °¡Àå ÃÖ±ÙÀÇ i486ÀÌ ÀÖ´Ù. ±× ¹Û¿¡ »ý¼ÒÇÑ 80186µµ ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ 6°³ÀÇ CPUµéÀº ¸ðµÎ ¿î¸íÀûÀ¸·Î 8086ÀÇ »óÀ§ ȣȯ¼ºÀ» °¡Áö °í ÀÖ°í ±×µéÀ» ÃÑĪÇÏ¿© iAPx86 ¶Ç´Â 80x86±º(family)¶ó°í ºÎ¸¥´Ù. ¶§¹® ¿¡ ¸ðµç CPU »ó¿¡¼­ µµ½º°¡ µ¹¾Æ°¥¼ö ÀÖ°í µû¶ó¼­ ¿ì¸®´Â ¿øÁ¶°ÝÀÎ 8086 ÀÇ ±¸Á¶¿¡ ´ëÇؼ­¸¸ ÁýÁßÀûÀ¸·Î ij´Â °ÍÀ¸·Î Á·ÇÏ´Ù. µ¡ºÙ¿©¼­ 80286±Þ ÀÌ »ó¿¡¼­´Â 8086°úÀÇ È£È¯¼ºÀ» À§ÇØ ½ÇÁ¦ ¸ðµå(real mode)¶ó´Â °ÍÀ» Áö¿øÇÑ ´Ù. ±×·¯¹Ç·Î ¾ÕÀ¸·ÎÀÇ ¸ðµç ³»¿ëÀº 8086 ȣȯÀÇ ½ÇÁ¦ ¸ðµå¿¡ °üÇÑ °ÍÀ̶ó ´Â °ÍÀ» ÀüÁ¦ÇÏ´Ï Âø¿À¾ø±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- 3 8086ÀÇ ±¸Á¶ --------------------------------------------------------------------- 8086 ¾î¼Àºí¸®¸¦ ¾Ë°í ÀÖÀ¸¸é 8086ÀÇ ±¸Á¶¾ß ´ç¿¬È÷ ¾Ë°í ÀÖ°ÚÁö¸¸ ³» ¿ë Àü°³ÀÇ ¼ö¼øÀ» ¸ÂÃß±â À§Çؼ­ °£·«ÇÏ°Ô³ª¸¶ 8086ÀÇ ±¸Á¶¿¡ ´ëÇÏ¿© ¾ð±Þ À» ¾È ÇÒ ¼ö°¡ ¾ø°Ú´Ù. 3.1 8086ÀÇ ·¹Áö½ºÅÍ 8086¿¡´Â 16ºñÆ® ´ÜÀ§·Î ¸ðµÎ 12°³ÀÇ ·¹Áö½ºÅÍ¿Í °Å±â¿¡ Ãß°¡·Î Ç÷¢ ·¹Áö½ºÅÍ¿Í IP°¡ ÀÖ´Ù. ÀÌ Áß¿¡¼­ IP¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö´Â Åͺ¸ C°¡ Á÷Á¢ Á¦ ¾îÇÒ ¼ö ÀÖ´Ù. Áï °ªÀ» ÀÐ¾î ³¾ ¼öµµ ÀÖ°í CS¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö¿¡´Â Á÷Á¢ °ªÀ» ÀúÀåÇÒ ¼öµµ ÀÖ´Ù. ÀÌµé ·¹Áö½ºÅÍÀÇ ±¸¼ºÀº <±×¸² 1>°ú °°´Ù. <±×¸² 1> 8086ÀÇ ·¹Áö½ºÅÍ --------------------------------------------------------------------- ÀÏ¹Ý ¸ñÀûÀÇ ·¹Áö½ºÅÍ +---------+---------+ AX | AH | AL | ´©»ê±â(accumulator) +---------+---------+ BX | BH | BL | º£À̽º(base) +---------+---------+ CX | CH | CL | °è¼ö(count) +---------+---------+ DX | DH | DL | µ¥ÀÌÅÍ(data) +---------+---------+ MSB LSB ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ +-------------------+ CS | | ÄÚµå ¼¼±×¸ÕÆ® +-------------------+ DS | | µ¥ÀÌÅÍ ¼¼±×¸ÕÆ® +-------------------+ SS | | ½ºÅà ¼¼±×¸ÕÆ® +-------------------+ ES | | ¿©ºÐ ¼¼±×¸ÕÆ® +-------------------+ (extra segment) Ư¼ö ¸ñÀûÀÇ ·¹Áö½ºÅÍ +-------------------+ SP | | ½ºÅà Æ÷ÀÎÅÍ +-------------------+ BP | | º£À̽º Æ÷ÀÎÅÍ +-------------------+ SI | | Àü¼Û¿ø »öÀÎ +-------------------+ (source index) DI | | Àü¼ÛÁö »öÀÎ +-------------------+ (destination index) Ç÷¢ ·¹Áö½ºÅÍ +-+-+-+-------+-+-+-+ | | | | o o o | | | | +-+-+-+-------+-+-+-+ MSB LSB --------------------------------------------------------------------- 3.2 Åͺ¸ C ³»ºÎ¿¡¼­ÀÇ °¢ ·¹Áö½ºÅÍÀÇ ¾²ÀÓ»õ --------------------------------------------------------------------- AX °¢Á¾ Á¤¼ö ¿¬»ê µî¿¡ ¾²ÀδÙ. BX ¿ø°Å¸® Æ÷ÀÎÅÍ(far pointer)ÀÇ ¿É¼Â(offset)À¸·Î ¾²ÀδÙ. CX 8086ÀÇ °¢Á¾ ¼øȯ ¸í·É(loop instruction)¿¡ ¾²ÀδÙ. DX µ¥ÀÌÅÍ Ã³¸®¿¡ °ü°èµÈ ¸î¸î ¸í·É¿¡ ¾²ÀδÙ. CS DS SS ES °¢°¢ ÄÚµå, µ¥ÀÌÅÍ, ½ºÅÃ, ¿©ºÐ ¼¼±×¸ÕÆ®ÀÇ ½ÃÀÛ ¹øÁö(Æз¯ ±×·¡ÇÁ ´ÜÀ§)°ªÀ» °¡Áø´Ù. ÀÌ 16ºñÆ®°ªµé°ú ÁöÁ¤µÈ 16ºñÆ® ÀÇ ¿É¼ÂÀÌ Á¶ÇյǾî 20ºñÆ®ÀÇ Àý´ë ¹øÁö°¡ ¸¸µé¾îÁø´Ù. SP ½ºÅà ¼¼±×¸ÕÆ®ÀÇ ¿É¼ÂÀ̸ç, ½ºÅû󿡼­ °¡Àå ²À´ë±â(°¡Àå ³·Àº ¹øÁö)ÀÇ ÇöÀç À§Ä¡¸¦ °¡¸®Å²´Ù. BP ¿ª½Ã ½ºÅà ¼¼±×¸ÕÆ®ÀÇ ¿É¼ÂÀ̸ç SP¿Í´Â º°µµÀÇ º¸Á¶ ¿ªÇÒÀ» °¡Áö´Â ¶Ç ÇϳªÀÇ ½ºÅà Æ÷ÀÎÅÍÀÌ´Ù. Åͺ¸ C ³»ºÎ¿¡¼­´Â ½º ÅÃ»ó¿¡ ÀúÀåµÇ¾î ÀÖ´Â ÇÔ¼öÀÇ ¸Å°³º¯¼ö ¹× ÀÚµ¿º¯¼ö(automa tic variable)¸¦ ÂüÁ¶Çϱâ À§ÇÏ¿© ¾²ÀδÙ. SI DI ¿ø·¡´Â ´Ù¸¥ ±â´ÉÀ» °¡ÁöÁö¸¸ Åͺ¸ C¿¡¼­´Â ·¹Áö½ºÅͺ¯¼ö¸¦ Áö¿øÇϱâ À§ÇØ ¾²ÀδÙ. --------------------------------------------------------------------- --------------------------------------------------------------------- 4 8086ÀÇ ¸Þ¸ð¸® °ü¸® ¹æ½Ä --------------------------------------------------------------------- 4.1 ¼¼±×¸ÕÆ®¿Í ¿É¼Â 8086 CPU´Â 20ºñÆ®, Áï ÃÖ´ë 1M¹ÙÀÌÆ®ÀÇ ¹øÁö °ø°£(address space)À» °¡Áø´Ù. ±×·¯³ª Á÷Á¢ÀûÀ¸·Î´Â Çѹø¿¡ 64k¹ÙÀÌÆ®±îÁö¹Û¿¡ Á¦¾îÇÒ ¼ö ¾øµµ·Ï ¼³°èµÇ¾î ÀÖ´Ù. ±× ÀÌÀ¯·Î´Â ¸Þ¸ð¸® °ü¸®»óÀÇ È¿À²°ú ó¸® ¼ÓµµÀÇ Áõ´ë¸¦ µé ¼ö ÀÖ°ÚÁö¸¸, ¿ø·¡´Â 8ºñÆ®±Þ 8080°úÀÇ »óÀ§ ȣȯ¼ºÀ» À¯ÁöÇϱâ À§Çؼ­ ±×·¯ÇÑ °³³äÀÌ µµÀÔµÈ °ÍÀÌ´Ù. 8080ÀÇ ¹øÁö °ø°£Àº 64k¹ÙÀÌÆ®·Î Á¦ÇѵǾî ÀÖÁö ¾ÊÀº°¡? µû¶ó¼­ 1M¹ÙÀÌÆ®ÀÇ °ø°£À» 64k¹ÙÀÌÆ®ÀÇ ¹øÁö °ø°£À¸·Î ³ª´© ¾î È¿°úÀûÀ¸·Î Á¦¾îÇϱâ À§ÇØ "¼¼±×¸ÕÆ®(segment)"¶ó´Â »õ·Î¿î °³³äÀÌ µµ ÀԵȴÙ. ±× °³³ä¿¡ ÀÇÇϸé 1M¹ÙÀÌÆ®ÀÇ °ø°£ Áß¿¡¼­ 4°³ÀÇ Æ¯Á¤ 64k¹ÙÀÌÆ® ºÎºÐ À» Á¤Çؼ­ °¢°¢ ÄÚµå, µ¥ÀÌÅÍ, ½ºÅÃ, ¿©ºÐ(extra) ¼¼±×¸ÕÆ®¶ó°í ºÎ¸¥´Ù. µû¶ó¼­ ÃÖ´ë 256k¹ÙÀÌÆ®ÀÇ °ø°£À» Á÷Á¢ ÂüÁ¶ÇÒ ¼ö°¡ ÀÖ°í ±× ¿ÜÀÇ °ø°£Àº Á÷Á¢ ÂüÁ¶ÇÒ ¼ö°¡ ¾ø´Ù. ¿©±â¼­ ÄÚµå ¼¼±×¸ÕÆ®´Â ±â°è¾î ¸í·É(machine instruction)ÀÌ ³õ¿© ÀÖ ´Â °÷ÀÌ°í µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®´Â °¢Á¾ µ¥ÀÌÅÍ(º¯¼ö µî)ÀÌ ³õÀÌ´Â °÷ÀÌ°í, ½º Åà ¼¼±×¸ÕÆ®´Â ¹°·Ð ½ºÅÃÀÌ´Ù. ±× ¹Û¿¡ ¿©ºÐ ¼¼±×¸ÕÆ®´Â Ãß°¡ÀûÀÎ µ¥ÀÌÅÍ °¡ ³õÀÌ´Â °÷ÀÌ¸ç ´ë°³ µ¥ÀÌÅÍ ¼¼±×¸ÕÆ® °ø°£ ¿ÜºÎÀÇ ´Ù¸¥ 64k¹ÙÀÌÆ® °ø°£ À» Á÷Á¢ ÂüÁ¶Çϱâ À§ÇÏ¿© ¾²ÀδÙ. ÀÌµé ¼¼±×¸ÕÆ®´Â °¢°¢ CS, DS, SS, ES¶ó´Â 16ºñÆ®ÀÇ ¼¼±×¸ÕÆ® ·¹Áö½º ÅÍ¿¡ ÀÇÇØ ±× ½ÃÀÛ ¹øÁö°¡ °áÁ¤µÈ´Ù. ±×·± ´ÙÀ½ ±× ½ÃÀÛ ¹øÁö¿¡ ¶Ç ´Ù¸¥ 1 6ºñÆ®ÀÇ ¿É¼ÂÀÌ Á¶ÇյǾî 20ºñÆ®ÀÇ Àý´ë ¹øÁö°¡ ¾ò¾îÁø´Ù. ÀÌ ¶§ °¢ ¼¼±×¸ÕÆ®ÀÇ ¿É¼ÂÀ¸·Î ¾²ÀÌ´Â ·¹Áö½ºÅ͵éÀº ¹Ì¸® °áÁ¤µÇ¾î ÀÖ ´Ù. ¸Ç ¸ÕÀú IP´Â CSÀÇ ¿É¼ÂÀÌ°í, SP¿Í BP´Â SSÀÇ ¿É¼ÂÀÌ´Ù. ±× ¿ÜÀÇ ¸ðµç ¹øÁö ÂüÁ¶ ¸í·ÉÀº Ưº°È÷ ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ DSÀÇ ¿É¼ÂÀ¸·Î °£ÁֵǸç, ESÀÇ ¿É¼ÂÀº Ưº°È÷ ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ º°µµ·Î Á¸ÀçÇÏÁö´Â ¾Ê´Â´Ù. 4.2 Àý´ë ¹øÁöÀÇ °è»ê 16ºñÆ®ÀÇ ¼¼±×¸ÕÆ®°ª°ú 16ºñÆ®ÀÇ ¿É¼ÂÀ» Á¶ÇÕÇÏ¿© 20ºñÆ®ÀÇ Àý´ë ¹øÁö ¸¦ ¾ò±â À§Çؼ­´Â Ưº°ÇÑ °è»ê ¹æ½ÄÀÌ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î µ¥ÀÌÅÍ ¼¼±×¸Õ Æ® ·¹Áö½ºÅÍ(ÀÌÇÏ °£´ÜÈ÷ DS)°¡ 0xb000ÀÌ°í ÀÏ¹Ý ¸ñÀûÀÇ BX°¡ 0x05a9¶ó°í ÇÏÀÚ. ÀÌ µÎ °ªÀ¸·Î Àý´ë ¹øÁö¸¦ ¾ò±â À§ÇØ CPU´Â ¿ì¼± DS¸¦ Á·Π4¹ø ½¬ ÇÁÆ®½ÃŲ´Ù. Áï DS¿¡ 16(0x10)À» °öÇÏ¿© 20ºñÆ®ÀÇ °ªÀ¸·Î ¸¸µç´Ù. ±×·± ´Ù À½ ¿É¼ÂÀ» °Å±â¿¡ ´õÇÑ´Ù. °á°úÀûÀ¸·Î 0xb0000 + 0x05a9 == 0xb05a9°¡ ¾ò ¾îÁø´Ù. <±×¸² 2>¸¦ º¸±â ¹Ù¶õ´Ù. Âü°í·Î ÀÌ ¹øÁö´Â ´Ü»ö ¸ð´ÏÅÍ¿¡¼­ È­¸é ÁÂÇ¥ (10, 10) À§Ä¡ÀÇ ¹®ÀÚ¿Í ±× ¼Ó¼ºÀÌ ÀúÀåµÇ¾î ÀÖ´Â °÷ÀÌ´Ù. <±×¸² 2> Àý´ë ¹øÁöÀÇ °è»ê --------------------------------------------------------------------- * ¼¼±×¸ÕÆ®°ª DS (1010 0000 0000 0000) ¿É¼Â BX (0000 0101 1010 1001) Á·Π4¹ø ½¬ÇÁÆ®µÈ °ª * À§ÀÇ °æ¿ì Àý´ë ¹øÁöÀÇ °è»ê ¹æ¹ýÀº... | | ½¬ÇÁÆ®µÈ ¼¼±×¸ÕÆ®°ª (1010 0000 0000 0000 0000) == 0xb000 * 0x10 ¿É¼Â +) (0000 0101 1010 1001) == 0x05a9 -------------------------------------------- (1010 0000 0101 1010 1001) == 0xb05a9 * CÀÇ ¼ö½ÄÀ¸·Î Çϸé (unsigned long)0xb000 << 4 + 0x05a9 -> 0xb05a9 | +----- ij½ºÆ® ¿¬»êÀÚ°¡ ¹Ýµå½Ã ÇÊ¿ä --------------------------------------------------------------------- ¿©±â¼­ ¾Ë ¼ö ÀÖµíÀÌ ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ´Â Ç×»ó 1M¹ÙÀÌÆ®ÀÇ ¹øÁö °ø°£ À» 16¹ÙÀÌÆ® ´ÜÀ§·Î °Ç³Ê¶Ù¸é¼­ °¡¸®Å°°Ô µÈ´Ù. Áï DS°¡ 0xb000ÀÌ¸é ½ÇÁ¦ ·Î DS°¡ °¡¸®Å°°í ÀÖ´Â ¹øÁö(µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ ½ÃÀÛ ¹øÁö)´Â 0xb0000ÀÌ µÈ´Ù. ½±°Ô ¸»Çؼ­ ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍÀÇ °ª¿¡ 16Áø¼ö·Î 0À» ¿À¸¥ÂÊ ³¡¿¡ µ¡ºÙÀÎ °ªÀÌ ½ÇÁ¦ÀÇ ¼¼±×¸ÕÆ® ½ÃÀÛ À§Ä¡°¡ µÈ´Ù. Âü°í·Î ÀÌ·¯ÇÑ 16¹ÙÀÌÆ® ÀÇ ´ÜÀ§¸¦ Æз¯±×·¡ÇÁ(paragraph)¶ó°í ºÎ¸¥´Ù. ÀÌ ¿ë¾î¿¡ ÀÇÇÏ¸é ¿ì¸®´Â " ¼¼±×¸ÕÆ®´Â Ç×»ó Æз¯±×·¡ÇÁ °æ°è¿¡¼­ ½ÃÀÛÇÑ´Ù"¶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥ Àý´ë ¹øÁö´Â CPU°¡ °è»êÇؼ­ ¾µ µû¸§ÀÌ°í ¿ì¸®°¡ ½ÇÁ¦·Î »ç¿ë ÇÏ´Â °ªÀº ¼¼±×¸ÕÆ®¿Í ¿É¼ÂÀÇ Á¶ÇÕÀ̱⠶§¹®¿¡ ±×¿¡ ´ëÇÑ Ç¥±â¹ýÀÌ ÇÊ¿äÇØ Áø´Ù. ¼¼±×¸ÕÆ®¿Í ¿É¼Â Á¶ÇÕÀÇ Ç¥ÁØ Ç¥±â¹ýÀº ´ÙÀ½°ú °°´Ù. +---------------+ +-----------+ | ¼¼±×¸ÕÆ®:¿É¼Â | ¿¹ | B000:05A9 | +---------------+ +-----------+ Áï ¼¼±×¸ÕÆ®¿Í ¿É¼ÂÀÇ °ªÀ» 4ÀÚ¸®ÀÇ 16Áø¼ö(º¸Åë ´ë¹®ÀÚ)·Î Ç¥±âÇÏ°í ±× »çÀÌ¿¡ ÄÝ·ÐÀ» Çϳª »ðÀÔÇϵµ·Ï ¾à¼ÓÀÌ µÇ¾î ÀÖ´Ù. ÇÑÆí ¼¼±×¸ÕÆ®´Â Æз¯±×·¡ÇÁ °æ°è¶ó¸é ¾î´À °÷¿¡¼­³ª ½ÃÀÛÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾î´À ÇÑ Àý´ë ¹øÁö¸¦ ÁöÁ¤Çϱâ À§ÇÑ ¼¼±×¸ÕÆ®:¿É¼Â Á¶ÇÕÀº À¯ÀÏÇÏ Áö ¾Ê´Ù. ¿¹¸¦ µé¾î¼­ ¾Æ·¡´Â ¸ðµÎ ¶È°°ÀÌ 0xb05a9 ¹øÁö¸¦ ÁöÁ¤ÇÏ´Â Á¶ÇÕ µéÀÌ´Ù. AFFE:05C9 -+ AFFF:05B9 | B000:05A9 | ¸ðµÎ µ¿ÀÏÇÑ 0xb05a9¹øÁö¸¦ ÁöÁ¤ÇÑ´Ù. B001:0599 | B002:0589 | ...... -+ ÀÌó·³ ÇÑ Àý´ë ¹øÁö¸¦ °¡¸®Å°´Â ¼¼±×¸ÕÆ®:¿É¼Â Á¶ÇÕÀº À¯ÀÏÇÏÁö ¾Ê±â ¶§¹®¿¡ ³ªÁß¿¡ ¼³¸íÇÒ ¿©·¯ °¡Áö ¹®Á¦°¡ ¹ß»ýÇÏ¸ç ±×¿¡ µû¶ó ¼¼½ÉÇÑ ÁÖÀÇ °¡ ÇÊ¿äÇØÁø´Ù. --------------------------------------------------------------------- 5 Æ÷ÀÎÅÍÀÇ ºÐ·ù --------------------------------------------------------------------- ÀÚ, ´Ù½Ã C·Î µÇµ¹¾Æ°¡ÀÚ. C¿¡¼­ Æ÷ÀÎÅÍ°¡ Â÷ÁöÇÏ´Â À§Ä¡´Â ½Ç·Î ¸·Áß ÇÏ´Ù. ±×·¯³ª Æ÷ÀÎÅÍ´Â ±íÀÌ ÆÄ°íµé¸é µé¼ö·Ï °³³ä Àâ±â°¡ ¿µ Èûµç °ÍÀÌ »ç½ÇÀÌ´Ù. ½ÇÁ¦·Î À۳⠸» °æ¿¡ ÇÊÀÚ´Â ¸¶¼Ò¸¦ ÅëÇØ Æ÷ÀÎÅͶó´Â ´Ü ÇÑ °¡ Áö °Ç¼ö¸¸ °®°í ÀåÀå 4ȸ¿¡ °ÉÃļ­ C °­Á¸¦ ¿¬ÀçÇÑ ÀûÀÌ ÀÖ´Ù. ¿©±â¼­´Â ±× ¿¬Àç¿¡ À̾î Åͺ¸ C°¡ Á¦°øÇÏ´Â Æ÷ÀÎÅ͸¦, º¸´Ù ±â¼úÀûÀÎ ¸é(Çϵå¿þ¾î ÀÇÁ¸ÀûÀÎ ¸é)¿¡¼­ ½ÉÃþÀûÀ¸·Î ÆÄÇØÄ¡°íÀÚ ÇÑ´Ù. Áö³­ Á¤º¹ Åͺ¸ C °­Á¿¡¼­´Â ÀüÇô ¾ð±ÞÀ» ¾È ÇßÁö¸¸, ½ÇÁ¦·Î Åͺ¸ C°¡ Á¦ °øÇÏ´Â Æ÷ÀÎÅÍ´Â 2°¡Áö ¹æ¹ý¿¡ ÀÇÇؼ­ ºÐ·ùÇÒ ¼ö ÀÖ´Ù. -------------------------------------------------- * Æ÷ÀÎÅÍÀÇ ´ë»óü(object)¿¡ µû¸¥ ±¸ºÐ (¿¹: ¹®ÀÚ¿­ Æ÷ÀÎÅÍ, ¹è¿­ Æ÷ÀÎÅÍ µîµî) * Æ÷ÀÎÅÍ°¡ ¹«½¼ ¼¼±×¸ÕÆ®ÀÇ ¿É¼ÂÀΰ¡¿¡ µû¸¥ ±¸ºÐ (¿¹: µ¥ÀÌÅÍ Æ÷ÀÎÅÍ, ÇÔ¼ö Æ÷ÀÎÅÍ) * Æ÷ÀÎÅÍÀÇ ¹ÙÀÌÆ® Å©±â¿Í Á¤±ÔÈ­ ¿©ºÎ¿¡ µû¸¥ ±¸ºÐ (¿¹: ±Ù°Å¸®/¿ø°Å¸®/°Å´ë Æ÷ÀÎÅÍ) -------------------------------------------------- ù¹ø° ºÐ·ù ¹æ¹ýÀº ÀϹÝÀûÀÎ °ÍÀÌ´Ï±î ³í¿Ü·Î ÇÏ°í, µÎ¹ø° ºÐ·ù ¹æ ¹ý¿¡ ÀÇÇϸé, ÇÔ¼ö¸¦ °£Á¢ÀûÀ¸·Î È£ÃâÇÏ´Â µ¥ ¾²ÀÌ´Â Æ÷ÀÎÅÍ´Â "ÇÔ¼ö Æ÷ÀÎ ÅÍ"¶ó°í ÇÏ°í ±× ¿ÜÀÇ ¸ðµç Æ÷ÀÎÅÍ, Áï º¯¼ö³ª ¹è¿­ µîÀ» °£Á¢ÀûÀ¸·Î Á¶ÀÛ Çϱâ À§ÇÑ Æ÷ÀÎÅ͵éÀº "µ¥ÀÌÅÍ Æ÷ÀÎÅÍ"¶ó°í ÃÑĪÇÑ´Ù. ¿©±â¼­´Â ¼¼¹ø° ºÐ·ù ¹æ¹ý¿¡ µû¶ó Æ÷ÀÎÅ͸¦ ±¸ºÐÇÏ°íÀÚ ÇÑ´Ù. ±× ¹æ ¹ý¿¡ µû¸£¸é Åͺ¸ C´Â <Ç¥ 1>°ú °°ÀÌ µµÇÕ 3Á¾·ùÀÇ Æ÷ÀÎÅ͸¦ Á¦°øÇÑ´Ù. ÀÌ ´Â ÀüÀûÀ¸·Î 8086ÀÇ ±¸Á¶¿¡¼­ ÆÄ»ýµÈ, Çϵå¿þ¾î ÀÇÁ¸ÀûÀÎ °ÍÀÌ´Ù. <Ç¥ 1> Åͺ¸ C°¡ Á¦°øÇÏ´Â Æ÷ÀÎÅÍÀÇ Á¾·ù ¼¼ °¡Áö ------------------------------------------------------ ¹ÙÀÌÆ® Å©±â ¹øÁö °ø°£ Á¤±ÔÈ­ ¿©ºÎ ------------------------------------------------------ ±Ù°Å¸® Æ÷ÀÎÅÍ 2(16ºñÆ®) 64k¹ÙÀÌÆ® ºÒÇÊ¿ä near pointer ¿ø°Å¸® Æ÷ÀÎÅÍ 4(32ºñÆ®) 1M¹ÙÀÌÆ® X far pointer °Å´ë Æ÷ÀÎÅÍ 4(32ºñÆ®) 1M¹ÙÀÌÆ® O huge pointer ------------------------------------------------------  #47 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷1-2: °¢Á¾ Æ÷ÀÎÅÍ 05/06 00:04 269 line --------------------------------------------------------------------- 6 ±Ù°Å¸®/¿ø°Å¸®/°Å´ë Æ÷ÀÎÅÍÀÇ Æ¯Â¡ --------------------------------------------------------------------- 6.1 ±Ù°Å¸® Æ÷ÀÎÅÍ(near pointer) IBM-PCÀÇ C¿¡¼­´Â ´ë°³ º°µµ·Î ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ Æ÷ÀÎÅÍ´Â 16ºñÆ®ÀÇ Å©±â¸¦ °¡Áø´Ù. Áï ¹Ì¸® ³»Á¤µÈ ¼¼±×¸ÕÆ®ÀÇ 16ºñÆ® ¿É¼ÂÀÌ´Ù. ±×·¯¹Ç·Î ÀÌ ³»Á¤µÈ Æ÷ÀÎÅÍ´Â ±Ù°Å¸® Æ÷ÀÎÅͶó°í ÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦·Î Áö³­ Á¤º¹ Åͺ¸ C °­Á¿¡¼­ ¼³¸íÇÑ Æ÷ÀÎÅ͵éÀº ¸ðµÎ ±Ù°Å¸® Æ÷ÀÎÅ͵é»ÓÀ̾ú´Ù. ÀÌ ¶§ ¹Ì¸® ³»Á¤µÈ ¼¼±×¸ÕÆ®´Â ±Ù°Å¸® Æ÷ÀÎÅÍ°¡ µ¥ÀÌÅÍ Æ÷ÀÎÅÍ(ÀϹÝÀûÀÎ Æ÷ÀÎÅÍ)ÀÌ³Ä ÇÔ¼ö Æ÷ÀÎÅÍÀ̳Ŀ¡ µû¶ó °¢°¢ DS, CS·Î °áÁ¤µÈ´Ù. ------------------------------------------ ±Ù°Å¸® µ¥ÀÌÅÍ Æ÷ÀÎÅÍ : DSÀÇ 16ºñÆ® ¿É¼Â ±Ù°Å¸® ÇÔ¼ö Æ÷ÀÎÅÍ : CSÀÇ 16ºñÆ® ¿É¼Â ------------------------------------------ ¿¹(¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­) char s[10], *ptr; double (*fp)(double); ptr = s; --- ptrÀº ±Ù°Å¸® µ¥ÀÌÅÍ Æ÷ÀÎÅÍ fp = sin; --- fp´Â ±Ù°Å¸® ÇÔ¼ö Æ÷ÀÎÅÍ À§ÀÇ ¿¹¿¡¼­ ptrÀº DS ³»ÀÇ ¹®ÀÚ ¹è¿­ s¸¦ °¡¸®Å°°í, fp´Â CS ³»ÀÇ ¼ö ÇÐ ÇÔ¼ö sinÀ» °¡¸®Å²´Ù. Âü°í·Î ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â Ç×»ó DS == SSÀÌ ¹Ç·Î s°¡ ½ºÅûóÀÇ ÀÚµ¿¹è¿­À̶ó Çصµ Åͺ¸ C´Â ÆíÀÇ»ó SS°¡ ¾Æ´Ñ DS ³»¿¡ ÀÖ´Â °ÍÀ¸·Î °£ÁÖÇÑ´Ù. ÀÌ Á¡ÀÌ Å¸¾ð¾î¿ÍÀÇ ¸µÅ©¿¡¼­´Â ½É°¢ÇÑ ¹®Á¦Á¡À¸·Î ´ëµÎµÈ´Ù. ±Ù°Å¸® Æ÷ÀÎÅÍÀÇ Æ¯Â¡À¸·Î´Â 16ºñÆ®¶ó´Â Á¡ ¿Ü¿¡µµ, ¿ì¼± »ç¿ëÇϱⰡ ½±´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ¿Ö³Ä ÇÏ¸é ¼¼±×¸ÕÆ®°¡ À§¿Í °°ÀÌ ³»Á¤µÇ¹Ç·Î ÇÁ·Î±× ·¡¸Ó°¡ ¼¼±×¸ÕÆ®¿¡ °üÇØ ½Å°æ ¾µ ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÌ´Ù. ´ÜÁ¡Àº¿ª½Ã ¼¼±× ¸ÕÆ®°¡ DS ¶Ç´Â CS·Î ³»Á¤µÇ±â ¶§¹®¿¡ 1M¹ÙÀÌÆ®ÀÇ ¹øÁö °ø°£À» ¸ðµÎ ÂüÁ¶ ÇÒ ¼ö ¾ø´Ù´Â »ç½ÇÀÌ´Ù. ±×·¯³ª ÀÌ ´ÜÁ¡Àº »ó¾÷¿ë ÆÐÅ°Áö¿Í °°Àº ´ëÇü ÇÁ ·Î±×·¥¿¡¼­³ª Áß¿ä½ÃµÉ »ÓÀÌ°í ¿ì¸®°¡ ÀÏ»óÀûÀ¸·Î ÀÛ¼ºÇÏ´Â 64k¹ÙÀÌÆ® ÀÌ ÇÏÀÇ ¼Ò±Ô¸ð ÇÁ·Î±×·¥¿¡¼­´Â ´ÜÁ¡ÀÌ µÉ ¼ö ¾ø´Ù. ÇÑÆí ±Ù°Å¸® Æ÷ÀÎÅÍÀÇ Ç¥ÁØ Ç¥±â¹ýÀº ´ÙÀ½°ú °°´Ù. º¸Åë ±Ù°Å¸® Æ÷ÀÎ ÅÍ´Â DS, CSÀÇ ¿É¼ÂÀÎ °æ¿ì°¡ ´ëºÎºÐÀÌÁö¸¸ ¸Å¿ì Ư¼öÇÑ °æ¿ì¿¡ SS¿Í ES ¿É¼ÂÀÇ ±Ù°Å¸® Æ÷ÀÎÅ͵µ ¸¸µé ¼ö´Â ÀÖ´Ù. +---------+ +---------+ | DS:¿É¼Â | | CS:¿É¼Â | +---------+ +---------+ +---------+ ¸¸¾à DS == 0xb000ÀÌ¸é ¿¹ | DS:05A9 | Àý´ë ¹øÁö 0xb05a9¸¦ °¡¸®Å°°Ô µÈ´Ù. +---------+ 6.2 ¿ø°Å¸® Æ÷ÀÎÅÍ(far pointer) ¿ø°Å¸® Æ÷ÀÎÅÍ´Â ¸» ±×´ë·Î ¸Ö¸® ÀÖ´Â ´ë»óüµµ °¡¸®Å³ ¼ö ÀÖ´Â Æ÷ÀÎ ÅÍÀÌ´Ù. Áï °¡¸®Å³ ¼ö ÀÖ´Â ¹øÁö °ø°£ÀÌ 64k¹ÙÀÌÆ®·Î Á¦ÇѵÇÁö ¾ÊÀ¸¹Ç·Î ÃÖ´ë 1M¹ÙÀÌÆ®ÀÇ °ø°£À» ¸ðµÎ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ¿ø°Å¸® Æ÷ÀÎÅÍ´Â ¾Æ·¡¿Í °°ÀÌ 32ºñÆ®, Áï 4¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °¡Áø´Ù. ¿©±â¼­ ¿ø°Å¸® Æ÷ÀÎÅÍ´Â ÀÚü ³»¿¡ ¼¼±×¸ÕÆ® Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ½¿¡ À¯ÀÇ Çϱ⠹ٶõ´Ù. 32ºñÆ® +---------------------+ +-----------+-----------+ MSB | ¼¼±×¸ÕÆ® | ¿É¼Â | LSB +-----------+-----------+ +---------+ +---------+ 16ºñÆ® 16ºñÆ® ¿ø°Å¸® Æ÷ÀÎÅÍ°¡ ¸Þ¸ð¸®¿¡ ÀúÀåµÉ ¶§¿¡´Â ¿ª¿öµå(reverse word) ¹æ½Ä ¿¡ ÀÇÇÏ¿© ÃÖÇÏÀ§ ¹ÙÀÌÆ®ºÎÅÍ ÃÖ»óÀ§ ¹ÙÀÌÆ®ÀÇ ¼øÀ¸·Î ÀúÀåµÈ´Ù´Â Á¡¿¡ À¯ ÀÇÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î B000:05A9¶ó¸é ¾Æ·¡¿Í °°ÀÌ ÀúÀåµÈ´Ù. ³·Àº ¹øÁö -> ³ôÀº ¹øÁö +----+----+----+----+ | A9 | 05 | 00 | B0 | +----+----+----+----+ 6.3 °ü°è ¿¬»ê½Ä¿¡ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¶§ ¹Ýµå½Ã ¿°µÎ¿¡ µÎ¾î¾ß ÇÒ ÁÖÀÇÁ¡ ¼¼ °¡Áö ¿ø°Å¸® Æ÷ÀÎÅ͸¦ °ü°è ¿¬»êÀÚ(==, !=, <, >, <=, >=)¿Í ´õºÒ¾î »ç¿ëÇÒ ¶§¿¡´Â ¸Å¿ì ½ÅÁßÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿ø°Å¸® Æ÷ÀÎÅÍÀÇ »ç¿ë¿¡ Àͼ÷Ä¡ ¸øÇÑ »ç ¶÷Àº ¹«ÀÇ½Ä Áß¿¡ Ä¡¸íÀûÀÎ ½Ç¼ö¸¦ ÀúÁö¸£±â°¡ ´ë´ÜÈ÷ ½¬¿ì¹Ç·Î Á¤½Å ¹Ù¦ Â÷¸®±â ¹Ù¶õ´Ù. ù¹ø°, ==¿Í != ¿¬»êÀÚ´Â ¾çº¯ÀÇ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ´Ü¼øÈ÷ 32ºñÆ®ÀÇ u nsigned longÇü°ªÀ¸·Î °£ÁÖÇÏ°í ºñ±³ °á°ú¸¦ ±¸ÇÑ´Ù. ±×·¡µµ º° ÀÏ ¾ø°Ú´Â °¡? ¿©±â¼­ ¹«½¼ ¹®Á¦Á¡À» ¹ß°ßÇÏÁö ¸øÇÑ »ç¶÷Àº ³ªÁß¿¡ Å«Àϳ¯ °¡´É¼ºÀÌ ³óÈÄÇÑ »ç¶÷ÀÌ´Ù. Á» Àü¿¡ ¸»ÇÑ ¹Ù¿Í °°ÀÌ ÇϳªÀÇ Àý´ë ¹øÁö¸¦ ÁöÁ¤ÇÏ´Â ¼¼±×¸ÕÆ®:¿É¼Â ÀÇ Á¶ÇÕÀº ¹«¼öÈ÷ ¸¹´Ù. ±×·¸±â ¶§¹®¿¡ ¸¸¾à µÎ °³ÀÇ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ´Ü ¼øÈ÷ 32ºñÆ®°ªÀ¸·Î °£ÁÖÇÏ°í ºñ±³¸¦ ÇàÇÑ´Ù¸é, ½É°¢ÇÑ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î pa, pb, pc°¡ °¢°¢ AFFF:05B9, B000:05A9, B001:0599ÀÇ °ª À» °¡Áö°í ÀÖ´Ù°í Ä¡ÀÚ. ±×·¯¸é pa, pb, pc´Â ¸ðµÎ µ¿ÀÏÇÑ Àý´ë ¹øÁö 0xb0 5a9¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ°¡ µÈ´Ù. ÇÏÁö¸¸ ´ÙÀ½ ºñ±³ °á°ú´Â ¿Ç°Ô ¾ò¾îÁú±î? if (pa == pb) ...... if (pb == pc) ...... if (pc == pa) ...... °á·ÐºÎÅÍ ¸»Çϸé À§ÀÇ if¹® ÀÌÈÄÀÇ ¹®Àå(......ºÎºÐ)Àº Àý´ë·Î ½ÇÇàµÇ Áö ¾Ê´Â´Ù. ¿Ö³Ä Çϸé == ¿¬»ê¿¡¼­ C´Â ¾çº¯ÀÇ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ unsigned longÇüÀ¸·Î °£ÁÖÇϹǷΠÀ§ÀÇ ¿¬»ê½ÄµéÀº °¢°¢ 0xafff05b9, 0xb00005a9, 0x b0010599¸¦ ºñ±³ÇÑ °á°ú°¡ µÇ¾î, ÀüºÎ °°Áö ¾Ê´Ù(³í¸®Àû °ÅÁþ)´Â °á°ú¸¦ ³»±â ¶§¹®ÀÌ´Ù. À§ÀÇ ºñ±³°¡ ¿Ã¹Ù¸¥ °á°ú¸¦ ³»´Â °æ¿ì´Â µü ÇÑ °¡Áö»ÓÀÌ ´Ù. Áï pa, pb, pcÀÇ ¼¼±×¸ÕÆ®(»óÀ§ 2¹ÙÀÌÆ®) ºÎºÐÀÌ ¸ðµÎ µ¿ÀÏÇÒ °æ¿ìÀÌ ´Ù. µ¡ºÙ¿©¼­ Åͺ¸ C¿¡¼­´Â unsigned longÇü°ú ¿ø°Å¸® Æ÷ÀÎÅÍÀÇ ¹ÙÀÌÅ© ±¸ Á¶°¡ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù´Â Á¡À» Âü°í·Î ¾Ë¾Æ µÎ±â ¹Ù¶õ´Ù. µÎ¹ø°, <, >, <=, >= ¿¬»êÀÚ´Â ¾çº¯ÀÇ ¿ø°Å¸® Æ÷ÀÎÅÍ°¡ °¡Áö´Â ¼¼±× ¸ÕÆ®°ªÀ» ¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù. ±× ´ë½Å ¿É¼Â¸¸ °¡Áö°í ºñ±³¸¦ ÇàÇÑ´Ù. ÀÌ ¿¬ »êÀÚ´Â ÇѼú ´õ ¶ß°í ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. Áï ¼¼±×¸ÕÆ®°ªÀÌ¾ß ¾î·µç °£¿¡ ¿É¼Â¸¸ ºñ±³ Á¶°ÇÀ» ¸¸Á·ÇÑ´Ù¸é ³í¸®Àû ÂüÀ» ±¸ÇÑ´Ù. ¿¹¸¦ µé ¾î pa´Â B000:05A9ÀÌ°í pb´Â B800:05A8À̶ó¸é ºÐ¸íÈ÷ Àý´ë ¹øÁö»óÀ¸·Î´Â p a < pbÀÌÁö¸¸ ¾Æ·¡ÀÇ if¹® ÀÌÈÄ´Â Àý´ë·Î ½ÇÇàµÇÁö ¾Ê´Â´Ù. if (pa < pb) ...... ¿Ö³Ä ÇÏ¸é ¿É¼Â¸¸ ³õ°í º¼ ¶§ paÀÇ ¿É¼ÂÀº pbÀÇ ¿É¼Âº¸´Ù Å©±â ¶§¹®ÀÌ ´Ù. À̻󿡼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ °ü°è ¿¬»ê½Ä¿¡ ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ °ü°è ¿¬»ê ÀÚ¸¦ »ç¿ëÇÒ ¶§¿¡´Â ¹Ýµå½Ã ¾Æ·¡ÀÇ °ü·Ê 1À» ¸í½ÉÇØ¾ß ÇÑ´Ù. ¸¸¾à ÀÌ °ü·Ê ¸¦ ¹«½ÃÇÏ¸é ³ªÁß¿¡ ´ë´ÜÈ÷ Ä¡¸íÀûÀÌ°í ã±â Èûµç ¿¡·¯¸¦ ÃÊ·¡ÇÏ°Ô µÇ¹Ç·Î ¹Ì¸®¹Ì¸® ÁÖÀÇÇϱ⠹ٶõ´Ù. --------------------------------------------------------------------- °ü·Ê 1: °ü°è ¿¬»ê½Ä¿¡ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¶§¿¡´Â ¹Ýµå½Ã ´ÙÀ½ ÀüÁ¦°¡ ¸¸Á·µÇ¾î¾ß ÇÑ´Ù. +---------------------------------------+ | °ü°è ¿¬»êÀÚ ¾çº¯ÀÇ ¿ø°Å¸® Æ÷ÀÎÅÍ´Â | | ¹Ýµå½Ã ±× ¼¼±×¸ÕÆ®°ªÀÌ µ¿ÀÏÇØ¾ß ÇÑ´Ù. | +---------------------------------------+ ¾çº¯ÀÇ ¿ø°Å¸® Æ÷ÀÎÅÍÀÇ ¼¼±×¸ÕÆ®°ªÀÌ µ¿ÀÏÇÏ´Ù´Â ÀüÁ¦°¡ ¼º¸³µÈ´Ù´Â º¸ÀåÀÌ ¾øÀ» ¶§, ¿ø°Å¸® ¿¬»êÀÚ¸¦ "Á÷Á¢" °ü°è ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ·Î »ç¿ëÇϸé Å«Àϳ­´Ù. (°Å´ë Æ÷ÀÎÅ͸¦ ½á¾ß¸¸ ÇÑ´Ù.) --------------------------------------------------------------------- ¼¼¹ø°, ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ ¾î¶² Á¤¼ö °ªÀ» ´õÇϰųª »¬ ¶§¿¡´Â "¿É¼Â¸¸ ÀÌ º¯°æµÊ"¿¡ ÁÖÀÇÇϱ⠹ٶõ´Ù. Áï ¼¼±×¸ÕÆ®°ªÀº µ¡¼À, »¬¼À °úÁ¤¿¡¼­ Àý ´ë·Î º¯°æµÇÁö ¾Ê´Â´Ù. ¹¹ ´À³¢´Â °Í ¾ø´ÂÁö ¸ð¸£°Ú´Ù. ´À³¢´Â °Ô ÀüÇô ¾ø ´Â »ç¶÷Àº ¾Æ±î ¸»ÇÑ ¹Ù¿Í °°ÀÌ Å«Àϳ¯ »ç¶÷ÀÌ´Ù. ¿¹¸¦ µé¾î º¸ÀÚ. ¸¸¾à ¿ø°Å¸® Æ÷ÀÎÅÍ pa°¡ B000:FFFFÀÇ °ªÀ» °¡Áö°í ÀÖ´Ù°í Ä¡ÀÚ. ±×·³ pa++À̶ó´Â ¿¬»êÀ» ¼öÇàÇÑ µÚÀÇ pa°ªÀ» ¾î¶»°Ô µÉ±î? »ó½ÄÀûÀ¸·Î º¼ ¶§ pa´Â Àý´ë ¹øÁö 0xbffff¸¦ °¡¸®Å°¹Ç·Î pa++¸¦ ¼öÇàÇÑ µÚ ¿¡´Â Àý´ë ¹øÁö·Î 0xc0000¿¡ »ó´çÇÏ´Â ¼¼±×¸ÕÆ®:¿É¼Â Á¶ÇÕÀÌ pa¿¡ ÀúÀåµÇ ¸®¶ó°í »ý°¢ÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ °üÇÑ ÇÑ ±×°ÍÀº Å« ¿À »êÀÌ´Ù. ¿Ö³Ä Çϸé paÀÇ ¿É¼Â¸¸ÀÌ Áõ°¡µÇ±â ¶§¹®ÀÌ´Ù. paÀÇ ¿É¼ÂÀº 0xffffÀÌ´Ù. ÀÌ °ªÀ» 1 Áõ°¡½ÃÅ°¸é ¾î¶»°Ô µÉ±î? Ȥ½Ã 0 x10000ÀÌ µÈ´Ù°í »ý°¢ÇÑ »ç¶÷ÀÌ Àִ°¡? ¸¸¿¡ Çϳª ±×·¸´Ù¸é ºñÆ®, ¹ÙÀÌ Æ®¶ó´Â ¿ë¾îºÎÅÍ °øºÎ¸¦ ´Ù½ÃÇØ¾ß ÇÒ °ÍÀÌ´Ù. paÀÇ ¿É¼ÂÀº 16ºñÆ®ÀÇ °ªÀÌ´Ù. ÀÌ °ªÀ» 1 Áõ°¡½ÃÅ°¸é ºñ·Ï »ó½ÄÀûÀ¸·Î ´Â 0x10000ÀÌ µÇÁö¸¸ 16ºñÆ®ÀÎ ±î´ß¿¡ ±× ¹üÀ§¸¦ ÃÊ°úÇÏ´Â ÃÖ»óÀ§ 1ºñÆ®°¡ Àß·Á³ª°£´Ù. µû¶ó¼­ °á°ú´Â 0x0000ÀÌ µÈ´Ù. °á±¹ pa++ÀÇ °á°ú´Â B0000:0000ÀÌ µÇ¾î Àý´ë ¹øÁö·Î´Â 0xc0000ÀÌ ¾Æ´Ï ¶ó 0xb0000À̶ó´Â ¾öû³­ Â÷À̸¦ °¡Á®¿Â´Ù. ÀÌ´Â ½ÅÁß¿¡ ½ÅÁßÀ» ±âÇÏÁö ¾Ê À¸¸é ÀÚÄ© ½Ç¼öÇϱⰡ ¸Å¿ì ½¬¿î »çÇ×À̹ǷΠÁÖÀÇ¿¡ ÁÖÀǸ¦ ¿äÇÑ´Ù. ÁÖÀÇ »çÇ×À» ¿ä¾àÇÏ¸é ´ÙÀ½ °ü·Ê 2¿Í °°´Ù. --------------------------------------------------------------------- °ü·Ê 2: ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ ¾î¶² Á¤¼ö°ªÀ» °¡°¨ÇÒ ¶§¿¡´Â ¹Ýµå½Ã ´ÙÀ½ Á¶°ÇÀÌ ¸¸Á·µÇ¾î¾ß ÇÑ´Ù. +------------------------------------------------+ | ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ ¾î¶² Á¤¼ö°ªÀ» ´õÇÑ °á°ú´Â | | Àý´ë·Î ¼¼±×¸ÕÆ®ÀÇ °æ°è¸¦ ¹þ¾î³ªÁö ¾Ê¾Æ¾ß ÇÑ´Ù. | +------------------------------------------------+ Áï ¿É¼ÂÀÌ 0x0000º¸´Ù ÀÛ¾ÆÁö°Å³ª 0xffffº¸´Ù Ä¿Áú °¡´É¼ºÀÌ ÀÖÀ¸¸é, Àý´ë·Î ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ "Á÷Á¢" Á¤¼ö°ªÀ» ´õÇϰųª »©¼­´Â ¾È µÈ´Ù. (°Å´ë Æ÷ÀÎÅ͸¦ ½á¾ß¸¸ ÇÑ´Ù.) --------------------------------------------------------------------- 6.4 °Å´ë Æ÷ÀÎÅÍ(huge pointer) ¿ø°Å¸® Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ ¶§¿¡´Â À̻󿡼­ ¼³¸íÇÑ ¹Ù°ú °°Àº ¼¼ °¡Áö ¹®Á¦Á¡ÀÌ ¹ß»ýÇϱ⠶§¹®¿¡ ±×¿¡ µû¶ó °ü·Ê 1, 2¿¡¼­ Á¦½ÃÇÑ ¹Ù¿Í °°ÀÌ »ç ¿ë»ó¿¡ ¸î¸î Á¦¾àÀÌ µû¸¥´Ù. ±×·±µ¥ º¸Åë Çѹø¿¡ 64k¹ÙÀÌÆ® ÀÌÇÏÀÇ µ¥ÀÌÅÍ ¸¦ ó¸®ÇÒ °æ¿ì¶ó¸é ±×·± ¹®Á¦Á¡Àº ¿ø°Å¸® Æ÷ÀÎÅÍ ÀÚü¸¸À¸·Îµµ ±Øº¹ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÏ´Â ´ë¿ë·®ÀÇ µ¥ÀÌÅ͸¦ ó¸®Çؾ߸¸ ÇÒ °æ¿ì ³ª ÀÓÀÇÀÇ Å©±âÀÇ µ¥ÀÌÅ͸¦ ó¸®ÇØ¾ß ÇÒ °æ¿ì¿¡´Â ±×·± ¹®Á¦Á¡µé ¶§¹®¿¡ ¿øÄ¢ÀûÀ¸·Î ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ¾µ ¼ö°¡ ¾ø´Ù. ±×·± °æ¿ì¸¦ ´ëºñÇÏ¿© Åͺ¸ C ´Â °Å´ë Æ÷ÀÎÅÍ(huge pointer)¶ó´Â ƯÀÌÇÑ Æ÷ÀÎÅ͸¦ Á¦°øÇÑ´Ù. °Å´ë Æ÷ÀÎÅÍ´Â Æ÷ÀÎÅÍ°¡ °Å´ëÇÏ´Ù´Â ¶æÀÌ ¾Æ´Ï¶ó Á¤±ÔÈ­µÈ Æ÷ÀÎÅÍ(nor malized pointer)¸¦ ¶æÇÑ´Ù. °á·ÐºÎÅÍ ¸»Çؼ­, Á¤±ÔÈ­µÈ °Å´ë Æ÷ÀÎÅ͸¦ »ç ¿ëÇÏ¸é ¿ø°Å¸® Æ÷ÀÎÅÍ°¡ °¡Áö´Â ¼¼ °¡Áö ¹®Á¦Á¡ÀÌ ÀÏ°Å¿¡ ÇؼҵǹǷΠÀÌ·Ð »ó ÃÖ´ë 1M¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅͱîÁö 󸮰¡ °¡´ÉÇÏ´Ù. ±×·¸´Ù¸é Á¤±ÔÈ­°¡ ¹«¾ùÀ̳Ä? ¿©Å²¯ ¾ê±âÇÑ ¹Ù¿Í °°ÀÌ ÇϳªÀÇ Àý´ë ¹øÁö¸¦ ÁöÁ¤ÇÏ´Â ¼¼±×¸ÕÆ®:¿É¼Â Á¶ÇÕÀº ¹«¼öÈ÷ ¸¹´Ù. Á¤±ÔÈ­(normalizatio n)¶õ ¾î¶² ±ÔÄ¢À» Á¤ÇÏ¿© ±×·¯ÇÑ ¹«¼öÇÑ Á¶ÇÕÀ» Çϳª·Î ÅëÀÏÇÔÀ¸·Î½á "ÇÏ ³ªÀÇ Àý´ë ¹øÁö¿¡´Â ´Ü Çϳª¸¸ÀÇ ¼¼±×¸ÕÆ®:¿É¼Â Á¶ÇÕÀÌ ´ëÀÀµÇµµ·Ï ÇÏ´Â °Í"ÀÌ´Ù. ±× ±ÔÄ¢Àº °£´ÜÇÏ´Ù. ¾Ë´Ù½ÃÇÇ ¼¼±×¸ÕÆ®´Â 16¹ÙÀÌÆ® ´ÜÀ§·Î Àý´ë ¹øÁö ¸¦ °¡¸®Å²´Ù. µû¶ó¼­ ¿É¼ÂÀº ½ÇÁ¦·Î 0-15ÀÇ °ª¸¸ °¡Á®µµ ÃæºÐÇÏ´Ù. ±×·¯¹Ç ·Î ¾î¶² ¼¼±×¸ÕÆ®¿Í ¿É¼ÂÀÌ ÁÖ¾îÁ® ÀÖÀ» ¶§ ¿É¼ÂÀÇ ÇÏÀ§ 4ºñÆ®¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö ºñÆ® 12ºñÆ®¸¦ ¼¼±×¸ÕÆ®¿¡ ´õÇØ ÁÜÀ¸·Î½á ¿É¼ÂÀÇ »óÀ§ 12ºñÆ®¸¦ 0 À¸·Î ¸¸µé¸é Á¤±ÔÈ­°¡ ³¡³­´Ù. ¿¹¸¦ µé¾î B000:05A9¶ó´Â Á¶ÇÕÀÌ ÀÖÀ» ¶§ Á¤±ÔÈ­´Â ¾Æ·¡ ±×¸² 3°ú °° Àº °úÁ¤À» °ÅÃÄ ÀÌ·ç¾îÁø´Ù. <±×¸² 3> °Å´ë Æ÷ÀÎÅÍÀÇ Á¤±ÔÈ­ °úÁ¤ --------------------------------------------------------------------- ¼¼±×¸ÕÆ® ¿É¼Â B000 05A9 --- Àý´ë ¹øÁö 0xb05a9¸¦ °¡¸®Å²´Ù. | | | +---+---+ | | | | 05A 9 --- ÇÏÀ§ 4ºñÆ®¸¸À» µû·Î ¶¼¾î³½´Ù. | | | +---+---+ | | ¼­·Î | | ´õÇÑ´Ù | B05A 0009 --- Á¤±ÔÈ­µÈ ÈÄ¿¡µµ | | Àý´ë ¹øÁö 0xb05a9¸¦ °¡¸®Å²´Ù. | | Á¤±ÔÈ­µÈ Á¤±ÔÈ­µÈ ¼¼±×¸ÕÆ®°ª ¿É¼Â --------------------------------------------------------------------- °Å´ë Æ÷ÀÎÅÍ´Â ¿ø°Å¸® Æ÷ÀÎÅÍ¿Í ´Þ¸® ¸Å ¿¬»ê¸¶´Ù ±× Á÷ÈÄ¿¡ Á¤±ÔÈ­µÈ ´Ù´Â Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ Åͺ¸ C´Â <, >, <=, >=°°Àº °ü°è ¿¬»êÀÚÀÇ ¾çº¯ ÀÌ °Å´ë Æ÷ÀÎÅÍÀÏ °æ¿ì¿¡ ¿ø°Å¸® Æ÷ÀÎÅÍ¿Í ´Þ¸® 32ºñÆ®°ªÀ» ÀüºÎ ºñ±³ÇÑ ´Ù. Áï ¿É¼ÂÀº ¹°·ÐÀÌ°í ¼¼±×¸ÕÆ®°ª±îÁö ºñ±³ÇÑ´Ù. µû¶ó¼­ °Å´ë Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ¸é ¿ø°Å¸® Æ÷ÀÎÅÍ »ç¿ë½Ã ¹ß»ýÇÏ´Â ¼¼ °¡ Áö ¹®Á¦Á¡À» ÀÏ°Å¿¡ ÇؼÒÇÒ ¼ö ÀÖ´Ù. Áï °ü°è ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¶§¿¡³ª Á¤ ¼ö°ªÀ» ´õÇÒ ¶§ »ó½ÄÀ» ¹þ¾î³ª´Â ¾î¶°ÇÑ ¹®Á¦Á¡µµ ¾øÀÌ ¿Ã¹Ù¸¥ °á°ú°¡ ¾ò ¾îÁø´Ù. 6.5 ¿ø°Å¸® Æ÷ÀÎÅÍ¿Í °Å´ë Æ÷ÀÎÅÍÀÇ ¼±Åà °Å´ë Æ÷ÀÎÅÍ°¡ ±×·¯ÇÏ´Ù¸é ¿ø°Å¸® Æ÷ÀÎÅÍ´Â °áÄÚ ¾µ ÇÊ¿ä°¡ ¾øÁö ¾Ê´À ³Ä°í ¹Ý¹®ÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ °Å´ë Æ÷ÀÎÅÍ´Â Ä¡¸íÀûÀÎ ´ÜÁ¡ÀÌ Çϳª ÀÖ ´Ù. ±×°ÍÀº ¿ø°Å¸® Æ÷ÀÎÅÍ¿¡ ºñÇØ ¿¬»ê ½ÇÇà ¼Óµµ°¡ ÇöÀúÇÏ°Ô ÀúÇϵȴٴ Á¡ÀÌ´Ù. ÀÌ°ÍÀº ¼Óµµ°¡ »ý¸íÀÎ, ƯÈ÷ ´ë¿ë·®ÀÇ µ¥ÀÌÅÍ Ã³¸®¿¡¼­´Â ´õ´õ¿í Àý½ÌÇÑ ÄÄÇ»ÅÍ ÇÁ·Î±×·¥¿¡¼­´Â ¿ë³³Çϱâ Èûµç Á¡ÀÌ´Ù. ±×·¡¼­ ¿ø°Å¸® Æ÷ÀÎÅÍ°¡ »ç¿ëÇϱ⿡ ´ë´ÜÈ÷ Á¶½É½º·´´Ù ÇÏ´õ¶óµµ °Å´ë Æ÷ÀÎÅÍ¿¡ ºñÇØ ±× ó¸® ¼Óµµ°¡ ¿ö³« ºü¸£±â ¶§¹®¿¡ C ÇÁ·Î±×·¡¸ÓµéÀº À§Çè ºÎ´ãÀ» ¹«¸¨¾²°í ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ¾²´Â °ÍÀÌ´Ù. ´Ù¸¸ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ·Á¸é ¹Ýµå½Ã Çѹø¿¡ ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö ÀÇ µ¥ÀÌÅ͹ۿ¡ ó¸®ÇÏÁö ¸øÇÑ´Ù´Â Á¡À» °¨¾ÈÇØ¾ß ÇÑ´Ù. ±×°ÍÀº ¿ø°Å¸® Æ÷ ÀÎÅÍ ¿¬»ê °úÁ¤¿¡¼­ ¼¼±×¸ÕÆ®°ªÀº °íÁ¤µÇ°í ¿É¼Â¸¸ÀÌ ¹Ù²î±â ¶§¹®ÀÌ´Ù. µû ¶ó¼­ 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÏ´Â µ¥ÀÌÅ͸¦ Çѹø¿¡ ó¸®ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù¸é ¹Ýµå½Ã °Å´ë Æ÷ÀÎÅ͸¦ ½á¾ß ÇÑ´Ù. ±×·¯³ª ±×·¸°Ô Å« µ¥ÀÌÅ͸¦ ó¸®ÇÒ ±âȸ°¡ µ¶ÀÚ¿¡°Ô ÁÖ¾îÁú °¡´É¼ºÀº ±ØÈ÷ Èñ¹ÚÇϹǷΠ¾Æ¸¶µµ °Å´ë Æ÷ÀÎÅ͸¦ ¾µ ÀÏÀº Á»Ã³·³ ¾øÀ» °ÍÀ¸·Î º»´Ù. ÇÏÁö¸¸ Á¤±ÔÈ­¸¦ ÇØ¾ß ÇÒ ¶§´Â ½É½ÉÄ¡ ¾Ê°Ô »ý±æ°ÍÀÌ´Ù. ¿Ö³Ä ÇÏ¸é ¼¼±× ¸ÕÆ®°ªÀÌ µ¿ÀÏÇÏÁö ¾ÊÀº µÎ °³ÀÇ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ºñ±³ÇØ¾ß ÇÒ ¶§¿¡´Â ¹Ý µå½Ã Á¤±ÔÈ­¸¦ ½ÃŲ µÚ¿¡¾ß °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. Â÷ÈÄ¿¡ ´Ù½Ã ¼³¸íÇÏ°ÚÁö¸¸ ±×·± ÀǵµÀûÀÎ Á¤±ÔÈ­´Â Ưº°ÇÑ Ä³½ºÆ® ¿¬»êÀÚ¸¦ ½á¼­ ÀÌ·ç¾îÁø´Ù. --------------------------------------------------------------------- 7 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- À̹ø ´Þ¿¡´Â 8086ÀÇ ±¸Á¶, ±Ù°Å¸®/¿ø°Å¸®/°Å´ë µî 3°¡Áö Æ÷ÀÎÅÍÀÇ Æ¯ ¡°ú Â÷ÀÌÁ¡, ±×¸®°í ¿ø°Å¸® Æ÷ÀÎÅÍ »ç¿ë½ÃÀÇ ÁÖÀÇÇÒ »çÇ× µîÀ» ¾Ë¾Æº¸¾Ò ´Ù. »ç½Ç À̹ø ´Þ¿¡ Åͺ¸ C°¡ Á¦°øÇÏ´Â ¸Þ¸ð¸® ¸ðµ¨±îÁö ¼³¸íÇÏ·Á ÇßÁö¸¸ Áö¸é »çÁ¤°ú ÇÊÀÚ °³ÀÎ »çÁ¤ÀÌ °ãÃļ­ ºÎµæÀÌÇÏ°Ô ´ÙÀ½ ´Þ·Î ¹Ì·ç°Ô µÆ´Ù. ´ÙÀ½ ´Þ¿¡´Â °è¼ÓÇؼ­ Åͺ¸ C°¡ Á¦°øÇÏ´Â 6°³ÀÇ ¸Þ¸ð¸® ¸ðµ¨¿¡ °üÇÏ¿© ¼³ ¸íÇÏ°í ±Ù°Å¸®/¿ø°Å¸®/°Å´ë Æ÷ÀÎÅ͸¦ ¼±¾ðÇÏ´Â ¹æ¹ý¿¡ ´ëÇÏ¿© º¸´Ù ¾ËÂù ¼³¸íÀ¸·Î À̾߱⸦ À̲ø¾î ³ª°¡°Ú´Ù. <Á¦1ȸ ³¡>  #48 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷2-1: ¸Þ¸ð¸® ¸ðµ¨°ú ±× ±¸Á¶ 05/06 00:08 484 line ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1990.6 HWP/TXT º¯È¯: 1993.5.5 >>> Åͺ¸ CÀÇ ±íÀº °÷ <<< Á¦2ȸ Åͺ¸ CÀÇ °¢Á¾ ¸Þ¸ð¸® ¸ðµ¨°ú ±× ±¸Á¶ ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú4) --------------------------------------------------------------------- 1 º»¹®¿¡ ¾Õ¼­ --------------------------------------------------------------------- Áö³­ ´Þ¿¡´Â Åͺ¸ C°¡ Á¦°øÇÏ´Â ¼¼ Á¾·ùÀÇ Æ÷ÀÎÅÍ, Áï ±Ù°Å¸®/¿ø°Å¸®/ °Å´ë Æ÷ÀÎÅÍÀÇ Æ¯Â¡°ú »ç¿ë½Ã ÁÖÀÇ »çÇ׿¡ ´ëÇÏ¿© ¼³¸íÇß´Ù. À̹ø¿¡´Â ±× Æ÷ÀÎÅ͵éÀ» ÀÌÇØÇÏ´Â µ¥¿¡ ÇʼöÀûÀÎ »çÇ×ÀÎ "¸Þ¸ð¸® ¸ðµ¨(memory model)" ÀÇ ±¸Á¶/Ư¡/Â÷ÀÌÁ¡¿¡ °üÇÏ¿© ¼³¸íÇÏ°Ú´Ù. ¹Ì¸® ¸»ÇÏÁö¸¸ À̹ø ±ÛÀº »ó´ç È÷ ±â¼úÀûÀÎ ³»¿ë ÀÏ»öÀÌ¶ó¼­ ¸¼Àº Á¤½ÅÀ¸·Î ÀÓÇؾßÁö¸¸ ³¡±îÁö ¼º°øÀûÀ¸ ·Î ¿Ïµ¶ÇØ ³¾ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °áÄÚ °¡º±°Ô ÈȾ ¸¸ÇÑ ³»¿ëÀº ¾Æ´Ï´Ù. ±×¸®°í ÇÑ ¹ø Àаí ÀÌÇØÇÏ·Á°í ³Ê¹« ¼º±ÞÇÏ°Ô ´ýºñÁöµµ ¸»±â ¹Ù¶õ´Ù. ÃÖ¼Ò ÇÑ ¼­³Ê¹øÀº Àоî¾ß °¨ÀÌ ÀâÈú °ÍÀ¸·Î º»´Ù. --------------------------------------------------------------------- 2 Åͺ¸ CÀÇ ¸Þ¸ð¸® ¸ðµ¨ °³¿ä --------------------------------------------------------------------- Åͺ¸ C´Â µµÇÕ 6 Á¾·ùÀÇ ¸Þ¸ð¸® ¸ðµ¨À» Á¦°øÇÑ´Ù. ÃʼÒÇü(tiny), ¼Ò Çü, ÁßÇü, Áß¼ÒÇü, ´ëÇü, °Å´ë ¸ðµ¨ µîÀÌ ±×°ÍÀÌ´Ù. À̵éÀÇ ±¸ºÐÀº CS, D S, SS, ES µî ³× °³ÀÇ ¼¼±×¸ÕÆ®¸¦ ¾î¶»°Ô °ü¸®ÇÏ´À³Ä¿¡ ´Þ·Á ÀÖ´Ù. ÇÁ·Î±× ·¡¸Ó´Â ÀÚ½ÅÀÇ »óȲ¿¡ ¾Ë¸Â°Ô À̵é Áß¿¡¼­ ¸Þ¸ð¸® ¸ðµ¨À» ¼±ÅÃÇÏ¿© ÇÁ·Î±× ·¥À» ÀÛ¼ºÇÏ°Ô µÈ´Ù. ÀÌµé ¸ðµ¨ÀÇ °³·«ÀûÀÎ ¼³¸íÀ» ÇÏÀÚ¸é ´ÙÀ½°ú °°´Ù. ³ªÁß¿¡ ´Ù½Ã ±ò²û ÇÏ°Ô ºñ±³/Á¤¸®ÇØ ³õÀ» Å×´Ï Áö±ÝÀº ±×³É ±×·Á·Á´Ï ÇÏ°í ´ëÃæ ÈȾ±â¸¸ Çϱ⠹ٶõ´Ù. ¹«½¼ ¸»ÀÎÁö ¾ð¶æ °¡½¿¿¡ ¿Í ´êÁö ¾Ê´õ¶óµµ ¸»ÀÌ´Ù. 2.1 ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨ [1] ÃʼÒÇü ¸ðµ¨(tiny model) ¸» ±×´ë·Î °¡Àå ÀÛÀº ¸Þ¸ð¸® ¸ðµ¨ÀÌ´Ù. ÀÌ ¸ðµ¨¿¡¼­´Â ¸ðµç ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ°¡ µ¿ÀÏÇÑ ¹øÁö¿¡ À§Ä¡Çϸç ÇÁ·Î±×·¥ ½ÇÇàÀÇ Àü°úÁ¤À» ÅëÅÐ¾î °í Á¤ÀûÀÌ´Ù. Áï "Ç×»ó CS == DS == SS == ES"ÀÌ´Ù. µû¶ó¼­ ÀÌ ¸ðµ¨¿¡¼­´Â ÃÑ 64k¹ÙÀÌÆ®(Ãà¼Ò °¡´É)ÀÇ ¸Þ¸ð¸® °ø°£¸¸ÀÌ ÄÚµå, µ¥ÀÌÅÍ, ½ºÅÃÀ» À§ÇØ ÇÒ´ç µÈ´Ù. ³ª¸ÓÁö 640k¹ÙÀÌÆ® °ø°£Àº Á÷Á¢ÀûÀ¸·Î Á¦¾îÇÒ ¼ö ¾ø´Ù. ±× ¹Û¿¡ "¸ð µç Æ÷ÀÎÅÍ´Â ±Ù°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤"µÇ´Â Ư¡ÀÌ ÀÖÀ¸¸ç, À¯ÀÏÇÏ°Ô ÀÌ ¸ðµ¨ ¸¸ÀÌ .COM È­ÀÏÀ» »ý¼ºÇØ ³¾ ¼ö ÀÖ´Ù. ±×°ÍÀº exe2bin.exe À¯Æ¿¸®Æ¼¸¦ »ç ¿ëÇϰųª Åͺ¸ ¸µÄ¿¿¡ /t ¿É¼ÇÀ» ÁöÁ¤ÇÔÀ¸·Î½á °¡´ÉÇÏ´Ù. ·¥»óÁÖ ÇÁ·Î±×·¥ À» Á¦ÀÛÇÒ ¶§¿¡´Â ÀÌ ¸ðµ¨À» ¾²´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. [2] ¼ÒÇü ¸ðµ¨(small model) ÀÌ ¸ðµ¨¿¡¼­´Â DS == SS == ESÀÌÁö¸¸ CS != DSÀÌ´Ù. Áï ÄÚµå ¼¼±×¸ÕÆ® ¿Í µ¥ÀÌÅÍ ¹× ½ºÅà ¼¼±×¸ÕÆ®°¡ ºÐ¸®µÈ´Ù. µû¶ó¼­ ÃʼÒÇü ¸ðµ¨¿¡¼­¿Í´Â ´Þ ¸® ½ºÅà ¶Ç´Â µ¥ÀÌÅÍ°¡ ÄÚµå ¿µ¿ªÀ» ħ¹üÇÒ ¿°·Á°¡ (Á¤»óÀûÀÎ °æ¿ì) Àý´ë ¾ø´Ù. ÀÌ ¸ðµ¨¿¡¼­´Â ÃÖ´ë 64k¹ÙÀÌÆ®ÀÇ ÄÚµå ¿µ¿ª°ú ÃÑ 64k¹ÙÀÌÆ®(Ãà¼Ò °¡ ´É)ÀÇ µ¥ÀÌÅÍ/½ºÅà ¿µ¿ªÀÌ Á¸ÀçÇϸç, °á°úÀûÀ¸·Î ÃÖ¼Ò 64k(Ãà¼Ò °¡´É), ÃÖ ´ë 128kÀÇ ¸Þ¸ð¸®¸¦ Á÷Á¢ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. "¸ðµç Æ÷ÀÎÅÍ´Â ±Ù°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤"µÇ¸ç, ´ëºÎºÐÀÇ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ÀÌ ¸ðµ¨Àº Àû´çÇÑ Å©±â ¸¦ °¡Áø´Ù. ½ÇÁ¦·Î Åͺ¸ C¿¡¼­´Â º°µµÀÇ ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» ÁöÁ¤(º¯°æ)ÇÏÁö ¾Ê´Â ÇÑ ¼ÒÇü ¸ðµ¨ÀÌ ³»Á¤µÈ´Ù. [3] ÁßÇü ¸ðµ¨(medium model) ÇÔ¼ö Æ÷ÀÎÅÍ´Â ¿ø°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤µÈ´Ù. µû¶ó¼­ ÄÚµå´Â 64k¹ÙÀÌÆ®¸¦ °¡»ÓÈ÷ ÃÊ°úÇÒ ¼ö ÀÖ´Ù. ´Ü, ¸ðµâº° ºÐÇÒ ÄÄÆÄÀÏÀ» Çؾ߸¸ ÃÊ°ú°¡ °¡´ÉÇÏ ´Ù´Â ÀüÁ¦°¡ ÀÖ±â´Â ÇÏ´Ù. ÇÏÁö¸¸ µ¥ÀÌÅÍ Æ÷ÀÎÅÍ´Â ±Ù°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤ µÇ¹Ç·Î µ¥ÀÌÅÍ ¹× ½ºÅÃÀº ÃÑ 64k¹ÙÀÌÆ®(Ãà¼Ò °¡´É)ÀÇ °ø°£À» Â÷ÁöÇÑ´Ù. ÀÌ ¸ðµ¨Àº µ¥ÀÌÅ͸¦ º°·Î ¾²Áö ¾Ê´Â ´ëÇü ÇÁ·Î±×·¥¿¡ Àû´çÇÏ´Ù(½ÇÁ¦·Î´Â º°·Î ¾È ¾²ÀÓ). Âü°í·Î ÇÔ¼ö Æ÷ÀÎÅÍ°¡ ¿ø°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤µÈ´Ù´Â ¸»Àº ¸ðµç ÇÔ¼ö È£ÃâÀÌ ¿ø°Å¸® È£Ãâ(far call)·Î ³»Á¤µÈ´Ù´Â ¶æµµ Æ÷ÇÔÇÑ´Ù. 2.2 ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨ [4] Áß¼ÒÇü ¸ðµ¨(compact model) ÀÌ ¸ðµ¨Àº ÁßÇü ¸ðµ¨ÀÇ ¹Ý´ëÀÌ´Ù. Áï µ¥ÀÌÅÍ Æ÷ÀÎÅÍ·Î ¿ø°Å¸® Æ÷ÀÎÅÍ °¡ ³»Á¤µÇ°í, ÇÔ¼ö Æ÷ÀÎÅÍ´Â ±Ù°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤µÈ´Ù. ±×¸®°í ÇÔ¼ö È£Ãâ Àº ¿ø°Å¸® È£Ãâ·Î ³»Á¤µÈ´Ù. µû¶ó¼­ ÄÚµå´Â ÃÖ´ë 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÒ ¼ö ¾øÀ¸¸ç, µ¥ÀÌÅÍ Æ÷ÀÎÅÍ·Î 1M¹ÙÀÌÆ® °ø°£(Èü Æ÷ÇÔ)À» Á÷Á¢ÀûÀ¸·Î ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ Á¤Àû µ¥ÀÌÅÍ´Â ÃÖ´ë 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÒ ¼ö ¾ø´Ù. ÇÑÆí ÄÚ µå, µ¥ÀÌÅÍ, ½ºÅà ¼¼±×¸ÕÆ®´Â °¢°¢ µ¶¸³ÀûÀ¸·Î Á¸ÀçÇÏ¸ç °ãÃÄÁöÁö ¾Ê´Â´Ù. ÀÌ ¸ðµ¨Àº ÄÚµå´Â ÀÛÀº ¹Ý¸é µ¥ÀÌÅÍ°¡ ´ë´ÜÈ÷ ¸¹Àº ÇÁ·Î±×·¥¿¡ À¯¿ëÇÏ´Ù (½ÇÁ¦·Î´Â º°·Î ¾È ¾²ÀÓ). [5] ´ëÇü ¸ðµ¨(large model) ÇÔ¼ö Æ÷ÀÎÅÍ¿Í µ¥ÀÌÅÍ Æ÷ÀÎÅÍ·Î ¿ø°Å¸® Æ÷ÀÎÅÍ°¡ ³»Á¤µÈ´Ù. ±×¸®°í ÇÔ ¼ö È£ÃâÀº ¿ø°Å¸® È£Ãâ·Î ³»Á¤µÈ´Ù. µû¶ó¼­ ÄÚµåÀÇ ºÐ·®Àº ¸ðµâº° ºÐÇÒ ÄÄ ÆÄÀÏÀ» ÅëÇØ (À̷лó) ÃÖ´ë 1M¹ÙÀÌÆ®±îÁö °¡´ÉÇÏ°í, µ¥ÀÌÅÍ Æ÷ÀÎÅ͵µ ¿ª½Ã 1M¹ÙÀÌÆ® °ø°£(Èü Æ÷ÇÔ)À» Á÷Á¢ÀûÀ¸·Î ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ Á¤Àû µ¥ÀÌ ÅÍ´Â ÃÖ´ë 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÒ ¼ö ¾ø´Ù. ÇÑÆí ÄÚµå, µ¥ÀÌÅÍ, ½ºÅà ¼¼±×¸Õ Æ®´Â °¢°¢ µ¶¸³ÀûÀ¸·Î Á¸ÀçÇϸç°ãÃÄÁöÁö ¾Ê´Â´Ù. ÀÌ ¸ðµ¨Àº ´ë´ÜÈ÷ Å« ÇÁ ·Î±×·¥¿¡ ¾²À̸ç, ½ÇÁ¦·Î ½ÇÇà È­ÀÏÀÇ Å©±â°¡ ´ë·« 64k¹ÙÀÌÆ® ÀÌ»óÀÎ ´ëºÎ ºÐÀÇ C ÀÀ¿ë ÇÁ·Î±×·¥Àº ÀÌ ¸ðµ¨À̶ó°í º¸¸é °ÅÀÇ Æ²¸²¾ø´Ù. [6] °Å´ë ¸ðµ¨(huge model) 64k¹ÙÀÌÆ® ÀÌ»óÀÇ Á¤Àû µ¥ÀÌÅ͸¦ °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀ» Á¦¿ÜÇÏ°í´Â ´ë Çü ¸ðµ¨°ú ¶È°°´Ù. 64k¹ÙÀÌÆ® ÀÌ»óÀÇ Á¤Àû µ¥ÀÌÅ͸¦ °¡Áú ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ ÇÔ¼ö È£ÃâÀº °Å´ë È£Ãâ(huge call)·Î ³»Á¤µÈ´Ù. ÇÏÁö¸¸ ÇÔ¼ö Æ÷ÀÎÅÍ ¿Í µ¥ÀÌÅÍ Æ÷ÀÎÅÍ´Â ½ÇÇà ¼Óµµ¸¦ °í·ÁÇÏ¿© ´ëÇü ¸ðµ¨Ã³·³ ¿ø°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤µÈ´Ù´Â µ¥ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ÀÌ ¸ðµ¨Àº, ¿¹ÄÁµ¥ ´ë¿ë·®ÀÇ ÀÚÇü(font) µ¥ ÀÌÅ͸¦ ½ÇÇà È­ÀÏ ÀÚü ³»¿¡ Æ÷ÇÔ½ÃÅ°°íÀÚ ÇÒ °æ¿ì µî¿¡³ª ¾²ÀÌ°í º¸ÅëÀÇ °æ¿ì¿¡´Â °ÅÀÇ ¾²ÀÌÁö ¾Ê´Â´Ù. --------------------------------------------------------------------- 3 °¢ ¸ðµ¨µéÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- ´ÙÀ½ÀÇ <±×¸² 1>~<±×¸² 6>Àº °¢ ¸ðµ¨µéÀÇ ¸Þ¸ð¸® Áöµµ(memory map)ÀÌ ´Ù. ¿©±â¼­ ÁÖÀÇÇؼ­ »ìÆ캼 °ÍÀº ¾Æ·¡¿Í °°´Ù. * CS, DS, SSÀÇ »óµî ¿©ºÎ ¹× °íÁ¤ÀûÀΰ¡ÀÇ ¿©ºÎ * °¢ ¼¼±×¸ÕÆ®ÀÇ ³õÀÎ ¼ø¼­ (Ç×»ó CS <= DS <= SSÀÇ ¼ø¼­ÀÓ) * °¢ ¼¼±×¸ÕÆ® Å©±âÀÇ ÃÖ´ë ÇÑ°è * Á¤Àû µ¥ÀÌÅÍ ¿µ¿ªÀÇ ±¸Á¶ (Ç×»ó ÃʱâÈ­µÈ µ¥ÀÌÅÍ -> ºñÃʱâÈ­µÈ µ¥ÀÌÅÍÀÇ ¼ø¼­) * ½ºÅà ¿µ¿ªÀÇ ±¸Á¶ * ±Ù°Å¸®/¿ø°Å¸® ÈüÀÇ À§Ä¡ * ½ºÅà ¹× ÈüÀÇ ¼ºÀå ¹æÇâ, Áï À§(ÇÏÀ§ ¹øÁö)ÂÊÀÌ³Ä ¾Æ·¡(»óÀ§ ¹øÁö)ÂÊÀ̳Ä. ÇÑÆí, ±×¸²¿¡¼­ À§ÂÊÀº ÇÏÀ§ ¹øÁöÀÌ°í ¾Æ·¡ÂÊÀº »óÀ§ ¹øÁöÀÌ´Ù. ¶ÇÇÑ °ãÀ¸·Î µÈ ¼öÆò¼±Àº µ¶¸³µÈ ¼¼±×¸ÕÆ®ÀÇ °æ°è¸¦ ³ªÅ¸³¿¿¡ ƯÈ÷ ÁÖ¸ñÇÏ¿© º¸ ±â ¹Ù¶õ´Ù. ±× ¿ÜÀÇ ¼öÆò¼±Àº ÇØ´ç¼¼±×¸ÕÆ® ³» °¢ ¿µ¿ªÀÇ °æ°è¸¦ ³ªÅ¸³¾ »ÓÀÌ´Ù. ÀÌ´Â °¢ ¸Þ¸ð¸® ¸ðµ¨ÀÇ ±¸Á¶¸¦ ÀÌÇØÇÏ´Â µ¥ »ó´çÈ÷ Áß¿äÇÑ »çÇ×ÀÌ ¹Ç·Î °¡´ÉÇÑ ÇÑ »ý°¢ÇÏ´Â ÀÚ¼¼·Î ±×¸²À» º¸¾Æ ÁáÀ¸¸é ½Í´Ù. Âü°í·Î Á¤Àû µ¥ÀÌÅÍ(static data)¶õ ¸ðµç Á¾·ùÀÇ ¿ÜºÎº¯¼ö, Á¤Àûº¯¼ö ¹× ¹®ÀÚ¿­ »ó¼ö µîÀ» ÃÑĪÇÏ´Â ¸»ÀÌ´Ù. ÀÌ ¶§ ¿ø½Ã ÄÚµå»ó¿¡¼­ ±× ÃʱâÄ¡ ¸¦ ¸í½ÃÇÑ Á¤Àû µ¥ÀÌÅʹ Ưº°È÷ "ÃʱâÈ­µÈ µ¥ÀÌÅÍ(initialized data)"¶ó ºÎ¸£°í ¸í½ÃÀûÀ¸·Î ÃʱâÈ­µÇÁö ¾ÊÀº µ¥ÀÌÅÍ´Â "ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ(uniniti alized data)"¶ó°í ºÎ¸¥´Ù. µÑ »çÀÌÀÇ Â÷ÀÌÁ¡Àº ÀÌ·¸´Ù. Áï ÃʱâÈ­µÈ µ¥ÀÌÅÍÀÇ °ªÀº ½ÇÇà È­ÀÏ ³» ¿¡ Æ÷ÇԵǴ ¹Ý¸é¿¡, ºñÃʱâÈ­µÈ µ¥ÀÌÅÍÀÇ °ªÀº ½ÇÇà È­ÀÏ ³»¿¡ Æ÷ÇÔµÇÁö ¾ÊÀ¸¸ç ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÊ°ú µ¿½Ã¿¡ ±âµ¿ ÄÚµå(startup code)¿¡ ÀÇÇØ 0À¸ ·Î ÃʱâÈ­µÈ´Ù(´Ü, °Å´ë ¸ðµ¨¿¡¼­´Â ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ ¿µ¿ªÀÌ º°µµ·Î Á¸ ÀçÇÏÁö ¾ÊÀ¸¸ç ¸ðµÎ ÃʱâÈ­µÈ µ¥ÀÌÅÍ·Î °£ÁÖÇÑ´Ù). <±×¸² 1> ÃʼÒÇü ¸ðµ¨(tiny model)ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- CS, DS, SS ---> +-------------------+-+ (ES == DS)(1)| | | | ÄÚµå | | | | | +-------------------+ |-+ | ÃʱâÈ­µÈ µ¥ÀÌÅÍ | | | |-------------------| | |(2) | ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ | | | +-------------------+ |-+ | ±Ù°Å¸® Èü(4) | | |-------------------| | Á¤È®È÷ 64k¹ÙÀÌÆ®(3) | | | | ¿©À¯ °ø°£ | | | | | |-------------------| | <--- SP(°¡º¯) | ½ºÅà | | +-------------------+-+ <--- SP ÃʱâÄ¡ (1) ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ÀüÇô ¾²Áö ¾ÊÀ» °æ¿ì¿¡¸¸. (2) µÎ ¿µ¿ªÀ» ÇÕÇØ "Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª"À̶ó ºÎ¸¥´Ù. (3) ¸Þ¸ð¸®°¡ ¸ðÀÚ¶ó¸é ±×¿¡ ¸Â°Ô ÀÚµ¿ÀûÀ¸·Î Ãà¼ÒµÇ¸ç ¿ÜºÎº¯¼ö _stklen, _heaplenÀÇ ÃʱâÄ¡¸¦ º¯°æÇÏ¿© ÀǵµÀûÀ¸·Î 64k¹ÙÀÌÆ® ÀÌÇÏ·Î Ãà¼Ò½Ãų ¼ö ÀÖ´Ù. (·¥»óÁÖ ÇÁ·Î±×·¥ µî¿¡¼­) (4) malloc, calloc/free ÇÔ¼ö¸¦ ½á¼­ ÇÒ´ç/ÇØÁ¦ÇÑ´Ù. * ÃʼÒÇü ¸Þ¸ð¸®¿¡¼­µµ ¿ø°Å¸® ÈüÀÌ ÀÖÀ» ¼ö ÀÖÁö¸¸ ½ÇÁ¦ »çÁ¤»ó °ÅÀÇ ¾²ÀÌÁö ¾ÊÀ¸¹Ç·Î ±×¸²¿¡ ³ªÅ¸³»Áö ¾Ê¾Ò´Ù. --------------------------------------------------------------------- <±×¸² 2> ¼ÒÇü ¸ðµ¨(small model)ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- CS ---> +-------------------+-+ | | | | ÄÚµå | | ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö | | | +-------------------+-+-+ (ES == DS) | ÃʱâÈ­µÈ µ¥ÀÌÅÍ | | | (1) |-------------------| | |(2) | ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ | | | +-------------------+ |-+ | ±Ù°Å¸® Èü(4) | | | near heap | | |-------------------| | Á¤È®È÷ 64k¹ÙÀÌÆ®(3) | | | | ¿©À¯ °ø°£ | | | | | |-------------------| | <--- SP(°¡º¯) | ½ºÅà | | +-------------------+-+ <--- SP ÃʱâÄ¡ | ¿ø°Å¸® Èü(5) | | | far heap | | |-------------------| | | | | | ¿©À¯ °ø°£ | | | free space | | ³²´Â ¸Þ¸ð¸® ³¡±îÁö +-------------------+-+ (1)(2)(3)(4) ÃʼÒÇü ¸ðµ¨ Âü°í (5) farmalloc/farfree ÇÔ¼ö ¶Ç´Â allocmem/freemem ÇÔ¼ö¸¦ ½á¼­ ÇÒ´ç/ÇØÁ¦ÇÑ´Ù. --------------------------------------------------------------------- <±×¸² 3> ÁßÇü ¸ðµ¨(medium model)ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- +- ÇÔ¼ö È£Ãâ(¿ø°Å¸® È£Ãâ)½Ã¿¡¸¸ | ±× ÇÔ¼ö°¡ Á¸ÀçÇÏ´Â ¸ðµâÀÇ | ¼¼±×¸ÕÆ® ¼±µÎ¸¦ °¡¸®Å°µµ·Ï º¯°æµÇ¸ç | ±× ¿Ü¿¡´Â °íÁ¤ÀûÀÌ´Ù. | CS -+-> +-------------------+-+ | | ¸ðµâ1 | | +-> +-------------------+-+ | | ¸ðµâ2 | | +-> +-------------------+-+ °¢ ¸ðµâ ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö | | ......| | +-> +-------------------+-+ | ¸ðµân | | DS, SS ---> +-------------------+-+-+ (ES == DS) | ÃʱâÈ­µÈ µ¥ÀÌÅÍ | | | (1) |-------------------| | |(2) | ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ | | | +-------------------+ |-+ | ±Ù°Å¸® Èü(4) | | |-------------------| | Á¤È®È÷ 64k¹ÙÀÌÆ®(3) | | | | ¿©À¯ °ø°£ | | | | | |-------------------| | <--- SP(°¡º¯) | ½ºÅà | | +-------------------+-+ <--- SP ÃʱâÄ¡ | ¿ø°Å¸® Èü(5) | | |-------------------| | | | | | ¿©À¯ °ø°£ | | ³²´Â ¸Þ¸ð¸® ³¡±îÁö +-------------------+-+ (1)(2)(3)(4)(5) ÃʼÒÇü ¸ðµ¨ Âü°í * Áöµµ¿¡¼­ º¹¼±Àº µ¶¸³µÈ ¼¼±×¸ÕÆ®ÀÇ °æ°è¸¦ ³ªÅ¸³»¸ç ´Ü¼±, ¶Ç´Â Á¡¼±Àº µ¿ÀÏÇÑ ¼¼±×¸ÕÆ® ³»¿¡¼­ °¢ ¿µ¿ªÀÇ °æ°è¸¦ ³ªÅ¸³½´Ù. (´Ù¸¥ ±×¸²¿¡¼­µµ ¸¶Âù°¡Áö) --------------------------------------------------------------------- <±×¸² 4> Áß¼ÒÇü ¸ðµ¨(compact model)ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- CS ---> +-------------------+-+ | | | | ÄÚµå | | ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö | | | DS ---> +-------------------+-+ (ES == ??) | ÃʱâÈ­µÈ µ¥ÀÌÅÍ | | (1) |-------------------| | ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö(2) | ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ | | SS ---> +-------------------+-+ | ¿©À¯ °ø°£ | | 4k¹ÙÀÌÆ®(3) |-------------------| | <--- SP(°¡º¯) | ½ºÅà | | +-------------------+-+ <--- SP ÃʱâÄ¡ | (¿ø°Å¸®) Èü(4) | | |-------------------| | | | | | ¿©À¯ °ø°£ | | ³²´Â ¸Þ¸ð¸® ³¡±îÁö +-------------------+-+ (1) ES´Â ¿ø°Å¸® Æ÷ÀÎÅ͸¦ À§ÇØ ¾²ÀÌ¸ç ±×¶§±×¶§ °ªÀÌ º¯ÇÑ´Ù. (2) µÎ ¿µ¿ªÀ» ÇÕÇØ "Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª"À̶ó ºÎ¸¥´Ù. (3) ¿ÜºÎº¯¼ö _stklenÀ» ÀçÁ¤ÀÇÇÏ¿© º¯°æÇÒ ¼ö ÀÖ´Ù. (4) ±Ù°Å¸® ÈüÀÌ µû·Î Á¸ÀçÇÏÁö ¾ÊÀ¸¹Ç·Î ±×³É ÈüÀ̶ó°í ºÎ¸¥´Ù. malloc,calloc/free ÇÔ¼ö¿¡ ÀÇÇØ ÇØÁ¦/¼³Á¤ÇÑ´Ù. --------------------------------------------------------------------- <±×¸² 5> ´ëÇü ¸ðµ¨(large model)ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- +- ÇÔ¼ö È£Ãâ(¿ø°Å¸® È£Ãâ)½Ã¿¡¸¸ | ±× ÇÔ¼ö°¡ Á¸ÀçÇÏ´Â ¸ðµâÀÇ | ¼¼±×¸ÕÆ® ¼±µÎ¸¦ °¡¸®Å°µµ·Ï º¯°æµÇ¸ç | ±× ¿Ü¿¡´Â °íÁ¤ÀûÀÌ´Ù. | CS -+-> +-------------------+-+ | | ¸ðµâ1 | | +-> +-------------------+-+ | | ¸ðµâ2 | | +-> +-------------------+-+ °¢ ¸ðµâ ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö | | ...... | | +-> +-------------------+-+ | ¸ðµân | | DS ---> +-------------------+-+ (ES == ??) | ÃʱâÈ­µÈ µ¥ÀÌÅÍ | | (1) |-------------------| | ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö(2) | ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ | | SS ---> +-------------------+-+ | | | 4k¹ÙÀÌÆ®(3) |-------------------| | <--- SP(°¡º¯) | ½ºÅà | | +-------------------+-+ <--- SP ÃʱâÄ¡ | (¿ø°Å¸®) Èü(4) | | | heap | | |-------------------| | | | | | ¿©À¯ °ø°£ || | free space | | ³²´Â ¸Þ¸ð¸® ³¡±îÁö +-------------------+-+ (1)(2)(3)(4) Áß¼ÒÇü ¸ðµ¨ Âü°í --------------------------------------------------------------------- <±×¸² 6> °Å´ë ¸ðµ¨(huge model)ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- +- ´ëÇü ¸ðµ¨ ÂüÁ¶ | CS -+-> +-------------------+-+ | | ¸ðµâ1 | | +-> +-------------------+ | | | ¸ðµâ2 | | +-> +-------------------+ | °¢ ¸ðµâÀÇ ÄÚµå | | ...... | | ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö +-> +-------------------+ | | ¸ðµân | | DS -+-> +-------------------+-+ | | ¸ðµâ1ÀÇ µ¥ÀÌÅÍ | | (ES == ??) +-> +-------------------+ | (1) | | ¸ðµâ2ÀÇ µ¥ÀÌÅÍ | | +-> +-------------------+ | °¢ ¸ðµâÀÇ µ¥ÀÌÅÍ | | ...... | | ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö +-> +-------------------+ | (2) | ¸ðµânÀÇ µ¥ÀÌÅÍ | | SS ---> +-------------------+-+ | | | 4k¹ÙÀÌÆ®(3) |-------------------| | <--- SP(°¡º¯) | ½ºÅà | | +-------------------+-+ <--- SP ÃʱâÄ¡ | (¿ø°Å¸®) Èü(4) | | |-------------------| | | | | | ¿©À¯ °ø°£ | | ³²´Â ¸Þ¸ð¸® ³¡±îÁö +-------------------+-+ (1)(3)(4) Áß¼ÒÇü ¸ðµ¨ Âü°í (2) ÃʱâÈ­µÈ µ¥ÀÌÅ͸¸À» ÀǹÌÇÑ´Ù. ºñÃʱâÈ­µÈ µ¥ÀÌÅÍ ¿µ¿ªÀº º°µµ·Î Á¸ÀçÇÏÁö ¾Ê´Â´Ù. --------------------------------------------------------------------- --------------------------------------------------------------------- 4 ¸Þ¸ð¸® ¸ðµ¨ÀÇ ºÐ·ù --------------------------------------------------------------------- <Ç¥ 1> ¸Þ¸ð¸® ¸ðµ¨ÀÇ ºÐ·ù -------------+--------------------------------------------------- | ÄÚµå Å©±â(code size) µ¥ÀÌÅÍ Å©±â +---------------------+----------------------------- (data size) | 64k ÀÌÇÏ | 1M ÀÌÇÏ -------------+---------------------+----------------------------- | ÃʼÒÇü | 64k ÀÌÇÏ | (ÄÚµå, µ¥ÀÌÅÍ Áßø) | | ¼ÒÇü | ÁßÇü | (ÄÚµå, µ¥ÀÌÅͺи®) | -------------+---------------------+----------------------------- | Áß¼ÒÇü | ´ëÇü 1M ÀÌÇÏ | | (Á¤Àû µ¥ÀÌÅÍ 64k ÀÌÇÏ) | | °Å´ë | | (Á¤Àû µ¥ÀÌÅÍ 64k ÃÊ°ú °¡´É) -------------+---------------------+----------------------------- <Ç¥ 1>¿¡ °¢Á¾ ¸Þ¸ð¸® ¸ðµ¨À» ±× ´ëÇ¥ÀûÀΠƯ¡¿¡ µû¶ó ºÐ·ùÇØ ³õ¾Ò ´Ù. ÀÌ¿Í °°ÀÌ Äڵ峪 µ¥ÀÌÅÍ Å©±âÀÇ ÇÑ°è¿¡ µû¶ó¼­ ¸Þ¸ð¸® ¸ðµ¨À» ºÐ·ùÇÏ ´Â °ÍÀÌ °¡Àå ÀϹÝÀûÀÌ´Ù. ±×·±µ¥ »ì´Ù º¸¸é Äڵ峪 µ¥ÀÌÅÍ Å©±â¿¡ µû¶ó À̵éÀ» ÃÑĪÇÏ´Â ¿ë¾î°¡ ÀÚÁÖ ÇÊ¿äÇØÁö´Âµ¥, ÀÌ¿¡ µû¶ó ±×·¯ÇÑ ¿ë¾îµéÀ» ¾Æ·¡¿Í °°ÀÌ Á¤ÀÇÇؼ­ ¾²°í ÀÖ´Ù. * µ¥ÀÌÅÍ Å©±â¿¡ µû¸¥ ºÐ·ù - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: ÃʼÒÇü, ¼ÒÇü, ÁßÇü - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: Áß¼ÒÇü, ´ëÇü, °Å´ë * ÄÚµå Å©±â¿¡ µû¸¥ ºÐ·ù - ¼ÒÇü ÄÚµå ¸ðµ¨: ÃʼÒÇü, ¼ÒÇü, Áß¼ÒÇü - ´ëÇü ÄÚµå ¸ðµ¨: ÁßÇü, ´ëÇü, °Å´ë --------------------------------------------------------------------- 5 °¢ ¸Þ¸ð¸® ¸ðµ¨ÀÇ Æ¯Â¡ --------------------------------------------------------------------- ¾Õ ÀýÀÇ ¿ë¾î¸¦ ½á¼­ °¢Á¾ ¸Þ¸ð¸® ¸ðµ¨ÀÇ Æ¯Â¡À» »ç¾Èº°·Î ºñ±³/¼³¸í ÇÏ¸é ´ÙÀ½°ú °°´Ù. <±×¸² 1>~<±×¸² 6>À» Âü°íÇϸ鼭 ¼¼½ÉÇÏ°Ô µûÁ® º¸±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- * ³»Á¤µÈ Æ÷ÀÎÅÍ - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: ±Ù°Å¸® Æ÷ÀÎÅÍ(near pointer) - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: ¿ø°Å¸® Æ÷ÀÎÅÍ(far pointer) (°Å´ë ¸ðµ¨¿¡¼­µµ ¿ø°Å¸® Æ÷ÀÎÅÍ°¡ ³»Á¤µÊ¿¡ ÁÖÀÇ!) * ³»Á¤µÈ Æ÷ÀÎÅÍÀÇ ¹ÙÀÌÆ® Å©±â - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: 2¹ÙÀÌÆ® - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: 4¹ÙÀÌÆ® * ³»Á¤µÈ ÇÔ¼ö È£Ãâ ¹æ½Ä - ¼ÒÇü ÄÚµå ¸ðµ¨: ±Ù°Å¸® È£Ãâ(near call) - ÁßÇü/´ëÇü ¸ðµ¨: ¿ø°Å¸® È£Ãâ(far call) - °Å´ë ¸ðµ¨: °Å´ë È£Ãâ(huge call) (°Å´ë È£ÃâÀº ÇÔ¼ö È£Ãâ Á÷Àü¿¡ ±× ÇÔ¼ö°¡ Á¸ÀçÇÏ´Â ¸ðµâ¿¡ µþ¸° µ¶¸³ÀûÀÎ µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ¸¦ DS°¡ °¡¸®Å°µµ·Ï ±× °ªÀ» º¯°æÇÔÀ» ¶æÇÑ´Ù. <±×¸² 6> Âü°í) --------------------------------------------------------------------- * µ¥ÀÌÅÍ(Èü Æ÷ÇÔ)ÀÇ ÃÑ Å©±â - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö(±Ù°Å¸® Èü Æ÷ÇÔ) - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: (À̷лó) ÃÖ´ë 1M¹ÙÀÌÆ®±îÁö(Èü Æ÷ÇÔ) * Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª(¿ÜºÎº¯¼ö/Á¤Àûº¯¼ö/¹®ÀÚ¿­ »ó¼ö)ÀÇ Å©±â - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö - ÁßÇü/´ëÇü ¸ðµ¨: ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö(¿äÁÖÀÇ!!!) - °Å´ë ¸ðµ¨: (À̷лó) ÃÖ´ë 1M¹ÙÀÌÆ®±îÁö (´Ü, °¢ ¸ðµâÀÇ Á¤Àû µ¥ÀÌÅÍ Å©±â´Â 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÒ ¼ö ¾ø´Ù!!) * ÄÚµåÀÇ ÃÑ Å©±â - ¼ÒÇü ÄÚµå ¸ðµ¨: ÃÖ´ë 64k¹ÙÀÌÆ®±îÁö -´ëÇü ÄÚµå ¸ðµ¨: (À̷лó) ÃÖ´ë 1M¹ÙÀÌÆ®±îÁö (´Ü, °¢ ¸ðµâÀÇ ÄÚµå Å©±â´Â 64k¹ÙÀÌÆ®¸¦ ÃÊ°úÇÒ ¼ö ¾ø´Ù!!) --------------------------------------------------------------------- * °¢ ¼¼±×¸ÕÆ®ÀÇ ¹èÄ¡ - ÃʼÒÇü ¸ðµ¨: CS == DS == SS == ES - ¼ÒÇü ¸ðµ¨: CS < DS == SS == ES - ÁßÇü ¸ðµ¨: CS < DS == SS == ES - Áß¼ÒÇü ¸ðµ¨: CS < DS < SS ES == ?? - ´ëÇü ¸ðµ¨: CS < DS < SS ES == ?? - °Å´ë ¸ðµ¨: CS < DS < SS ES == ?? * ÄÚµå/µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Áßø(overlap) ¿©ºÎ - ÃʼÒÇü ¸ðµ¨¸¸ °ãÄ¡°í(CS == DS) ³ª¸ÓÁö´Â ¸ðµÎ µ¶¸³ÀûÀ¸·Î ºÐ¸®µÊ(CS < DS) * µ¥ÀÌÅÍ/½ºÅà ¼¼±×¸ÕÆ®ÀÇ Áßø ¿©ºÎ - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: DS == SS - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: DS < SS, Áï µ¶¸³ÀûÀ¸·Î ºÐ¸®µÊ * CS °ªÀÇ °¡º¯ ¿©ºÎ - ¼ÒÇü ÄÚµå ¸ðµ¨: CS == ÄÚµå ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ == °íÁ¤ ºÒº¯ - ´ëÇü ÄÚµå ¸ðµ¨: CS´Â ¼­·Î ´Ù¸¥ ¸ðµâ¿¡ ÀÖ´Â ÇÔ¼ö¸¦ (¿ø°Å¸®) È£ÃâÇÒ ¶§¸¶´Ù ÇØ´ç ¸ðµâÀÇ ¼¼±×¸ÕÆ® ¼±µÎ¸¦ °¡¸®Å°µµ·Ï º¯°æµÈ´Ù. ±× ¿Ü¿¡´Â °íÁ¤Àû. * DS °ªÀÇ °¡º¯ ¿©ºÎ - °Å´ë ¸ðµ¨: ¼­·Î ´Ù¸¥ ¸ðµâ¿¡ ÀÖ´Â ÇÔ¼ö¸¦ (¿ø°Å¸®) È£ÃâÇÒ ¶§¸¶´Ù ÇØ´ç ¸ðµâ¿¡ ¼ÓÇÏ´Â Á¤Àû µ¥ÀÌÅÍ ¿µ¿ªÀÇ ¼¼±×¸ÕÆ® ¼±µÎ¸¦ °¡¸®Å°µµ·Ï º¯°æµÈ´Ù(-> °Å´ë È£Ãâ). ±× ¿Ü¿¡´Â °íÁ¤Àû. - ±× ¿ÜÀÇ ¸ðµ¨: DS == Á¤Àû µ¥ÀÌÅÍ ¿µ¿ªÀÇ ¼¼±×¸ÕÆ® ¼±µÎ == °íÁ¤ ºÒº¯ * ES °ªÀÇ °¡º¯ ¿©ºÎ - ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨: ES == DS == °íÁ¤ ºÒº¯ (´Ü, ¿ø°Å¸® Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾Ê¾ÒÀ» °æ¿ì) - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: ES == ?? == °¡º¯ (¿ø°Å¸® Æ÷ÀÎÅ͸¦ À§ÇØ ¾²ÀδÙ) --------------------------------------------------------------------- * ±Ù°Å¸® Èü(near heap)ÀÇ Å©±â - ÃʼÒÇü ¸ðµ¨: (µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â) - (ÄÚµå Å©±â) - (Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª) - (»ç¿ëµÈ ½ºÅà ũ±â) - ¼ÒÇü/ÁßÇü ¸ðµ¨: (µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â) - (Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª) - (»ç¿ëµÈ ½ºÅà ũ±â) (µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â´Â ¿ÜºÎº¯¼ö _heaplenÀÌ 0(³»Á¤Ä¡)ÀÏ °æ¿ì Á¤È®È÷ 64k(65536)¹ÙÀÌÆ®ÀÌ°í, ¸¸¾à ¿ÜºÎº¯¼ö _stklen°ú _heaplenÀÇ ÃʱâÄ¡¸¦ ÇÁ·Î±×·¥¿¡¼­ ÁöÁ¤ÇÑ °æ¿ì 64k¹ÙÀÌÆ® ÀÌÇÏ·Î ÁÙÀÏ ¼ö ÀÖ´Ù. ´õºÒ¾î ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ ¶§¿¡µµ µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â°¡ ±×¿¡ ¾Ë¸Â°Ô ÁÙ¾îµç´Ù. Turbo C Reference Guide ¸Å´º¾ó ÂüÁ¶) - ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨: ±Ù°Å¸® ÈüÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. --------------------------------------------------------------------- * Ưº°È÷ ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» º¯°æÇÏÁö ¾Ê¾ÒÀ» ¶§ ³»Á¤µÇ´Â ¸Þ¸ð¸® ¸ðµ¨ - ¼ÒÇü ¸ðµ¨ÀÌ ³»Á¤µÈ´Ù. µû¶ó¼­ ÀϹÝÀûÀÎ °æ¿ì ±Ù°Å¸® Æ÷ÀÎÅÍ/±Ù°Å¸® È£ÃâÀÌ ³»Á¤µÇ¸ç ÄÚµå¿Í µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®´Â ºÐ¸®µÈ´Ù. ---------------------------------------------------------------------  #49 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷2-2: ¸Þ¸ð¸® ¸ðµ¨°ú ±× ±¸Á¶ 05/06 00:09 288 line --------------------------------------------------------------------- 6 ¹øÁöÁöÁ¤ ¼ö½ÄÀÚ(addressing modifier) --------------------------------------------------------------------- Åͺ¸ C´Â ANSI C »ç¾ç¿¡ ±âÃÊÇÏÁö ¾ÊÀº 7°³ÀÇ ¼ö½ÄÀÚ(modifier)¸¦ Ãß °¡·Î Á¦°øÇÑ´Ù. near, far, huge, _cs, _ds, _es, _ss ¿©±â¼­ µÚÀÇ 4°³´Â ´Ù¸¥ ¾ð¾î(ƯÈ÷ ÆĽºÄ®)°úÀÇ ¸µÅ©¿¡¼­³ª ÇÊ¿äÇÑ °Í À̹ǷΠ¼³¸íÀ» »ý·«ÇÏ°í, ´ë½Å ¾ÕÀÇ 3°³¿¡ °üÇؼ­ ÁßÁ¡ÀûÀ¸·Î ¼³¸íÇÏ°Ú´Ù. Åͺ¸ C¿¡¼­´Â Æ÷ÀÎÅͳª ÇÔ¼ö È£ÃâÀÇ ³»Á¤µÈ ¹æ½ÄÀ» ÇÁ·Î±×·¡¸Ó°¡ ÀÓÀÇ·Î º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹ÄÁµ¥ ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â ±Ù°Å¸® Æ÷ÀÎÅÍ°¡ ³»Á¤µÇ Áö¸¸ ÇÁ·Î±×·¡¸Ó´Â ¿ø°Å¸® Æ÷ÀÎÅ͸¦ ¾²±â À§ÇØ Æ÷ÀÎÅÍÀÇ µ¥ÀÌÅÍÇüÀ» º¯°æ ÇÒ ¼ö ÀÖ´Ù. ÀÌó·³ ³»Á¤µÈ Æ÷ÀÎÅÍÇüÀ̳ª ÇÔ¼ö È£Ãâ ¹æ½ÄÀ» º¯°æ½ÃÅ°°íÀÚ ÇÒ ¶§ (ÁÖ·Î) near, far, huge ¼ö½ÄÀÚ°¡ ¾²ÀδÙ. ¿©±â¼­ near, far µîµîÀ» ¼ö½ÄÀÚ¶ó ºÎ¸£´Â ÀÌÀ¯´Â Æ÷ÀÎÅÍÇüÀÓÀ» ³ªÅ¸³»´Â ±¸µÎÁ¡ *¸¦ ¹®¹ýÀûÀ¸·Î ¼ö ½ÄÇÏ´Â ¿ªÇÒÀ» Çϱ⠶§¹®ÀÌ´Ù. --------------------------------------------------------------------- 7 ±Ù°Å¸®/¿ø°Å¸®/°Å´ë Æ÷ÀÎÅÍÀÇ Á¤ÀÇ --------------------------------------------------------------------- ¿¹¸¦ µé¾î¼­, (char *)Çü Æ÷ÀÎÅÍ(¹®ÀÚ¿­ Æ÷ÀÎÅÍ) strÀÌ ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­ ¾Æ·¡¿Í °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù°í Ä¡ÀÚ. ±×·¯¸é strÀº ±Ù°Å¸® Æ÷ÀÎÅÍ ·Î ³»Á¤µÈ´Ù. char *str; ÀÌ ¶§ strÀ» ¿ø°Å¸® Æ÷ÀÎÅÍ·Î ¹Ù²Ù·Á¸é "*"¸¦ "far *"·Î ġȯÇÏ¸é µÈ ´Ù. Áï ¼ö½ÄÀÚ far¸¦ ±¸µÎÁ¡ * ¾Õ¿¡ ³õÀ¸¸é µÈ´Ù. char far *str; ¸¸¾à ´ëÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­ strÀ» ±Ù°Å¸® Æ÷ÀÎÅÍ·Î Á¤ÀÇÇÏ°í ½Í´Ù¸é, char near *str; À̶ó°í ±â¼úÇÏ¸é µÈ´Ù. °Å´ë Æ÷ÀÎÅ͸¦ ¿øÇÑ´Ù¸é near ´ë½Å¿¡ huge¸¦ ¾²´Â °ÍÀ¸·Î Á·ÇÏ´Ù. ÀϹÝÀûÀ¸·Î ¾î¶² µ¥ÀÌÅÍÇü T°¡ ÀÖ°í TÇü µ¥ÀÌÅ͸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ pt rÀÌ ¾Æ·¡¿Í °°ÀÌ Á¤ÀǵǾî ÀÖÀ» ¶§(ptrÀº ²À º¯¼ö¸íÀÏ ÇÊ¿ä°¡ ¾ø´Ù), T *ptr; ptrÀÇ ³»Á¤µÈ Æ÷ÀÎÅÍÇüÀ» º¯°æ½ÃÅ°°íÀÚ Çϸé "*ptr"À» "near *ptr", "far *ptr", "huge *ptr"·Î ±×´ë·Î ġȯÇϱ⸸ ÇÏ¸é µÈ´Ù. ÀÌ ¶§ (ptrÀÌ º¯¼ö¸í ÀÌ ¾Æ´Ò ¶§) ÇÊ¿äÇÏ¸é ¾Æ·¡¿Í °°ÀÌ ptr¿¡ °ýÈ£¸¦ µÎ¸§À¸·Î½á *³ª [ ], ( ) µîÀÇ ±¸µÎÁ¡ÀÇ ¿ì¼± ¼øÀ§¿¡ º¯µ¿ÀÌ »ý±â±â ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ±× ¿ÜÀÇ ´Ù ¸¥ ºÎºÐÀº °Çµå¸®¸é ¾È µÈ´Ù. T near *ptr; T far *ptr; T huge *ptr; T near *(ptr); T far *(ptr); T huge *(ptr); ¿¹¸¦ µé¾î ¼ÒÇü ¸ðµ¨¿¡¼­ ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ py°¡ ¾Æ·¡¿Í °°ÀÌ Á¤ÀÇ µÇ¾î ÀÖÀ» ¶§, int ss[3][10]; int (*py)[10]; py = ss; py¸¦ ¿ø°Å¸® Æ÷ÀÎÅÍ·Î µ¥ÀÌÅÍÇüÀ» º¯°æÇÏ·Á¸é ¾Æ·¡¿Í °°ÀÌ ÇÑ´Ù. int (far *py)[10]; ´ÙÀ½Àº Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ(Æ÷ÀÎÅ͸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ)¸¦ Á¤ÀÇÇÑ ¿¹ÀÌ´Ù. char **pps; ppx¸¦ ¿ø°Å¸® Æ÷ÀÎÅ͸¦ °¡¸®Å°´Â ¿ø°Å¸® Æ÷ÀÎÅÍ·Î ¹Ù²Ù¸é ¾Æ·¡¿Í °° ´Ù. char far *(far *pps); ¶Ç´Â °ýÈ£¸¦ Á¦°ÅÇÏ¿© char far *far *pps; ¸¸¾à À§ÀÇ Á¤ÀǸ¦ "char far **ppx"¶ó°í ÇÏ¸é ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â "char far *near *ptr"ÀÌ µÇ¾î °á°úÀûÀ¸·Î "¿ø°Å¸® Æ÷ÀÎÅ͸¦ °¡¸®Å°´Â ±Ù °Å¸® Æ÷ÀÎÅÍ"°¡ µÇ¹Ç·Î ÁÖÀÇÇϱ⠹ٶõ´Ù. ´ÙÀ½Àº °¢Á¾ ¿ø°Å¸®/°Å´ë Æ÷ÀÎÅ͸¦ Á¤ÀÇÇÑ ¿¹ÀÌ´Ù. Æ÷ÀÎÅÍ º¯¼öÀÇ ¿ø ·¡ µ¥ÀÌÅÍÇüÀº "far *"À̳ª "huge *"¸¦ "*"·Î ÀçġȯÇÏ¸é ½±°Ô ÆľÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. int far *px; ¡ç ÀÏÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ(¿ø°Å¸®) char huge *px; ¡ç ¹®ÀÚ¿­ ¹è¿­ Æ÷ÀÎÅÍ(°Å´ë) int (far *fp)(double x); ¡ç ÇÔ¼ö Æ÷ÀÎÅÍ(¿ø°Å¸®) double (far *py)[100]; ¡ç ÀÌÂ÷¿ø ¹è¿­ Æ÷ÀÎÅÍ(¿ø°Å¸®) void far *ptr; ¡ç voidÇü ¿ø°Å¸® Æ÷ÀÎÅÍ --------------------------------------------------------------------- 8 ³¡À¸·Î --------------------------------------------------------------------- À̹ø ´ÞÀÇ ±ÛÀº µ¶Àڵ鿡°Ô Áö·çÇÔ ³»Áö ´çȤÇÑ °¨ÀÌ ¾øÁö ¾Ê¾ÒÀ» ÁÙ ·Î ¾È´Ù. ¾ÆÁ÷±îÁöµµ ¾ê±â°¡ ½ÇÁúÀûÀÎ ºÎºÐ¿¡ Á¢¾îµéÁö ¸øÇ߱⠶§¹®¿¡, ¿¹ Á¦µµ ¾øÀÌ ¼³¸íÀ» °­ÇàÇØ ³ª°¥ ¼ö¹Û¿¡ ¾ø¾ú´Ù. °Ô´Ù°¡ ±ÛÀÌ ¿ö³« ±â¼úÀûÀÌ ¶ó¼­ Çѹø¿¡ ¸¹Àº ºÐ·®ÀÇ ±ÛÀ» °ÔÀçÇϱ⵵ ¹¹ÇÑ Å¿µµ ÀÖ¾ú´Ù. ´ÙÀ½ ´Þ¿¡´Â ±Ù°Å¸®/¿ø°Å¸®/°Å´ë È£Ãâ ¹æ½ÄÀÇ Æ¯Â¡ ¹× Â÷ÀÌÁ¡¿¡ ´ëÇØ ¾Ë¾Æº¸°í, ´õºÒ¾î ¼ÒÇü ¸ðµ¨°ú ´ëÇü ¸ðµ¨¿¡ ±¹ÇÑÇÏ¿© ½ºÅà ¿µ¿ªÀ» 64k¹ÙÀÌ Æ® ÀÌÇÏ·Î Ãà¼Ò½ÃÅ°´Â ¹æ¹ý°ú ¼¼±×¸ÕÆ® °¢ ºÎºÐÀÇ À§Ä¡(°¡·É µ¥ÀÌÅÍ ¼¼±× ¸ÕÆ®ÀÇ Å©±â, ÈüÀÇ ¼±µÎ ¹øÁö µîµî)¸¦ ¾Ë¾Æ³»´Â ºñ¹ýÀ» ¼Ò°³ÇÏ°Ú´Ù. ¹°·Ð ´ÙÀ½ ´ÞºÎÅÍ´Â Á¶±ÝÀº ½ÇÁúÀûÀÎ ¼³¸í°ú ¿¹Á¦°¡ À̾îÁú °ÍÀ̹ǷΠÁö·çÇÏÁö ¾Ê°Ô ´«À¸·Î È®ÀÎÇϸ鼭 Åͺ¸ CÀÇ ±íÀº °÷À» ÆÄÇìÃÄ ³ª°¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù. --------------------------------------------------------------------- 9 ´ýÀ¸·Î --------------------------------------------------------------------- ¾Æ¹«·± ¿¹Á¦µµ ¾øÀÌ ±×³É ±ÛÀ» ¸¶Ä¡·Á´Ï±î ¾Æ¹«·¡µµ ¶³¶°¸§Çؼ­ ´ýÀ¸ ·Î ÃÖ°í±Þ ³­À̵µÀÇ ¿¹Á¦¸¦ Çϳª ¼Ò°³ÇÑ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦ memmodel.c´Â ¼Ò Çü ¸ðµ¨¿¡¼­ÀÇ ½ÇÁ¦ÀûÀÎ ¸Þ¸ð¸® Áöµµ¸¦ º¸¿© ÁØ´Ù. Åͺ¸ CÀÇ ±íÀº °÷À» ´« À¸·Î Á÷Á¢ È®ÀÎÇÒ ¼ö ÀÖ´Â ÁÁÀº ±âȸ°¡ ¾Æ´Ò±î »ý°¢ÇÑ´Ù. ¸Þ¸ð¸® Áöµµ¸¦ ¾ò±â À§Çؼ­´Â ¸Þ¸ð¸® °¢ ¿µ¿ªÀÇ ½ÃÀÛ°ú ³¡ ¹øÁö(¶Ç´Â ¼¼±×¸ÕÆ® °æ°è)¸¦ ¾Ë¾Æ¾ß Çϴµ¥ ÀÌ ¿¹Á¦¿¡¼­´Â ½ÃÀÛ°ú ³¡ ¹øÁö¸¦ ±¸Çϱâ À§ÇÏ¿© ÇÑ °¡Áö ÀÌ»óÀÇ ¹æ¹ýÀ» »ç¿ëÇÏ°í ÀÖ´Ù. ½ÇÇà °á°ú¸¦ º¸¸é ¿©·¯ °¡ Áö ¹æ¹ý¿¡ ÀÇÇØ ±¸ÇÑ ¹øÁö°ªµéÀÌ ¼­·Î ¿ÏÀüÇÏ°Ô Àß ÀÏÄ¡ÇÏ°í ÀÖÀ½À» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¿¹Á¦´Â ¹Ýµå½Ã Åͺ¸ C 2.0¿¡¼­ ¼ÒÇü ¸ðµ¨(³»Á¤Ä¡ ±×´ë·Î)·Î ÄÄÆÄÀÏ /¸µÅ©ÇØ¾ß ÇÑ´Ù. ´ÙÀ½ÀÇ ½ÇÇà °á°ú´Â Åͺ¸ C 2.0 ÅëÇÕ °³¹ß ȯ°æÇÏ¿¡¼­ ÄÄ ÆÄÀÏ·¯ ¿É¼ÇÀ» ÀüÇô º¯°æÇÏÁö ¾ÊÀº ä(µð¹ö±ë ¸ðµå »óÅÂ)·Î ±× °á°ú¸¦ Ãâ ·ÂÇÑ °ÍÀÌ´Ù. Âü°í·Î ÀÌ ¿¹Á¦´Â µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â¸¦ ³»Á¤Ä¡ÀÎ 64k¹ÙÀÌÆ®º¸´Ù Ãà¼Ò½ÃÅ°±â À§ÇÏ¿©, ½ºÅÃÀÇ Å©±â¸¦ ¼³Á¤ÇÏ´Â ¿ÜºÎº¯¼ö _stklenÀÇ ÃʱâÄ¡¸¦ 0x0250À¸·Î, ±Ù°Å¸® ÈüÀÇ Å©±â¸¦ ¼³Á¤ÇÏ´Â ¿ÜºÎº¯¼ö _heaplenÀÇ ÃʱâÄ¡¸¦ 0x0001·Î Àâ¾Æ, ±âµ¿ ÄÚµå(startup code)·Î ÇÏ¿©±Ý µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å© ±â¸¦ ´ëÆø Ãà¼Ò½ÃÅ°µµ·Ï Çß´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº Turbo C 2.0 Reference Guid e ¸Å´º¾ó 28ÂÊ, 30ÂÊÀ» Âü°íÇϱ⠹ٶõ´Ù. Áö¸é »çÁ¤»ó, ½Ã°£ °ü°è»ó ÀÌ ¿¹Á¦ÀÇ ºÐ¼®Àº ´ÙÀ½ ´Þ·Î ¹Ì·ê ¼ö¹Û¿¡ ¾øÀ» °Í °°´Ù. ±×·¯³ª ¼­Åõ¸¥ ¿µ¾îÁö¸¸ ÁÖ¼®À» ÃæºÐÈ÷ ´Þ¾Æ µÎ¾úÀ¸¹Ç·Î ÀÇ ¿å¸¸ ÀÖ´Ù¸é ¿¹Á¦¸¦ ºÐ¼®ÇÏ´Â °Ô ¾î·ÆÁö¸¸µµ ¾ÊÀ» °ÍÀÌ´Ù. ´Ù¸¸ go_up_sta ck ÇÔ¼ö´Â ½ºÅÃÀ» ²¨²Ù·Î °Å½½·¯ ¿Ã¶ó°¡¼­ SPÀÇ ÃʱâÄ¡(½ºÅÃÀÇ ÃÖ»óÀ§ ¹ø Áö°ª)¸¦ ±¸ÇØ ÁÖ´Â ÇÔ¼ö·Î¼­, ÀÌ ÇÔ¼ö´Â Åͺ¸ C ÆÐÅ°Áö¿¡ µþ·Á ÀÖ´Â ±âµ¿ ÄÚµå c0.asmÀÇ ¾î¼Àºí¸® ¿ø½Ã È­ÀÏÀ» ºÐ¼®ÇÏÁö ¾Ê°í´Â ÀüÇô ÀÌÇØÇÒ ¼ö°¡ ¾ø±â ¶§¹®¿¡, Áö±ÝÀº ±×³É ±×·Á·Á´Ï Çϱ⠹ٶõ´Ù. ±× ¿ÜÀÇ ³ª¸ÓÁö ºÎºÐÀº µ¶ÀÚ ½º½º·Î ºÐ¼®ÇØ ³¾ ¼ö ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù. ¹ßµîÀÌ ÂïÈúÁö´Â ¸ð¸£°ÚÁö ¸¸... <¿¹Á¦ MEMMODEL.C> ¼ÒÇü ¸ðµ¨¿¡¼­ÀÇ ½ÇÁ¦ÀûÀÎ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- /* File MEMMODEL.C */ #include #include #include #pragma warn -par /* off warning */ unsigned _heaplen = 0x0001; /* minimum value */ /* if _heaplen == 0 or _heaplen is too large, this program will output wrong results */ unsigned _stklen = 0x0250; /* minimum value is 0x0200 when the software emulation for the floating point operation */ extern unsigned _psp; /* program segment prefix */ /* declared in dos.h */ extern void *__heapbase; /* a pointer to the near heap base */ extern void *__heaptop; extern void far *_heapbase; /* a pointer to the far heap base */ extern void far *_heaptop; void *go_up_stack(unsigned BP, int argc, char *argv[]) { int i; BP += 2; /* for "push bp" in the main function */ BP += 2; /* for return address when quit the main function (small code model) */ BP += 6; /* for argc, argv, envp(6 byte) */ BP += argc * 2; /* for argv[0], ..., argv[argc - 1] */ BP += 2; /* for argv[argc](== NULL) */ for (i = 0; i < argc; i++) /* for strings pointed by argv[i]s */ BP += strlen(argv[i]) + 1; if ((BP & 0x0001) != 0) BP++; /* for word alignment(dummy 0x00 byte)*/ BP += 2; /* for dummy return address(== 0x00fb) */ return (void *)BP; /* BP is the initial value of SP */ /* sometimes BP == StartingSP - 2 because of the additional dummy return address(2 byte) */ } void main(int argc, char *argv[], char *env[]) { unsigned CSsize; /*code segment size in paragraph(small model) */ unsigned DSsize; /* data segment size in paragraph */ unsigned StartingSP; /* initial value of SP */ unsigned farheap; /* segment of the far heap base pointer */ unsigned keepsize; /* calculated keep size in paragraph, i.e. total program size */ void *ptr; void far *topofmem; /* far pointer to the top of the memory */ CSsize = _DS - _CS; /* when small model */ ptr = (char *)__heapbase + _stklen + _heaplen; DSsize = ((unsigned)ptr >> 4) + 1; StartingSP = DSsize << 4; farheap = FP_SEG(_heapbase); /* get segment of the _heapbase */ keepsize = farheap - _psp; /* print the structure of the small memory model */ printf("Porgram segment prefix == %#06x\n", _psp); printf("Code segment == %#06x\n", _CS); printf("Data segment == %#06x\n", _DS); printf("Stack segment == %#06x\n", _SS); printf("Extra segment == %#06x\n", _ES); printf("Offset of static data area to DS == 0x0000\n"); printf("Offset of near heap base to DS == %#06x\n", __heapbase); printf("Offset of near heap top to DS == %#06x\n", __heaptop); printf("Current stack pointer == %#06x\n", _SP); /* print the initial value of SP calculated by three different methods */ printf("Initial value of SP == %#06x\n", StartingSP); printf(" == %#06x(other method)\n", (farheap - _DS) << 4); printf(" == %#06x(other method)\n", go_up_stack(_BP, argc, argv)); /* print the map of the far heap */ topofmem = MK_FP(*(unsigned far *)MK_FP(_psp, 0x0002), 0x0000); printf("Far heap base == %Fp\n", _heapbase); printf("Far heap top == %Fp\n", _heaptop); printf("Top of memory == %Fp\n\n", topofmem); /* print sizes */ printf("CS size == %#06x paragraph\n", CSsize); printf("DS size == %#06x paragraph(including stack)\n", DSsize); printf("Keep size == %#06x paragraph\n", keepsize); printf(" == %#06x(other method)\n", 0x10 + CSsize + DSsize); printf("Free space in near heap == %#06x byte(including stack area)\n", _SP - (unsigned)__heaptop + 1); printf("Free space in far heap == %ld byte\n", (unsigned long)(FP_SEG(_heaptop) - FP_SEG(_heapbase)) << 4); printf(" == %ld byte(other method)\n", (unsigned long)(FP_SEG(topofmem) - FP_SEG(_heapbase)) << 4); /* for a TSR program "keep(0, keepsize);" is required before quit program */ } --------------------------------------------------------------------- ½ÇÇà °á°ú (Åͺ¸ C 2.0 ÅëÇÕ °³¹ß ȯ°æÇÏ¿¡¼­ ¼ÒÇü ¸ðµ¨·Î ÄÄÆÄÀÏ/¸µÅ©/½ÇÇà. PSPÀÇ ¼¼±×¸ÕÆ®°ª µîÀ̳ª ¿ø°Å¸® ÈüÀÇ Å©±â µîÀº ½Ã½ºÅÛ »óȲ¿¡ µû¶ó °¡º¯ÀûÀÌ´Ù. ±×·¯³ª »ó´ëÀûÀÎ °ªÀº ½Ã½ºÅÛ¿¡ »ó°ü¾øÀÌ ÀÏÁ¤Çϸ®¶ó º»´Ù.) Porgram segment prefix == 0x847e Code segment == 0x848e Data segment == 0x85e6 Stack segment == 0x85e6 Extra segment == 0x85e6 Offset of static data area to DS == 0x0000 Offset of near heap base to DS == 0x079a Offset of near heap top to DS == 0x079a Current stack pointer == 0x09ba Initial value of SP == 0x09f0 == 0x09f0(other method) == 0x09f0(other method) Far heap base == 8685:0000 Far heap top == A000:0000 Top of memory == A000:0000 CS size == 0x0158 paragraph DS size == 0x009f paragraph(including stack) Keep size == 0x0207 paragraph == 0x0207(other method) Free space in near heap == 0x0221 byte(including stack area) Free space in far heap == 104368 byte == 104368 byte(other method) --------------------------------------------------------------------- <Á¦2ȸ ³¡>  #50 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷3-1: ÇÔ¼ö È£Ãâ/C È£Ãâ °üÇà 05/06 00:11 361 line ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1990.7 HWP/TXT º¯È¯: 1993.5.5 >>> Åͺ¸ CÀÇ ±íÀº °÷ <<< Á¦3ȸ ÇÔ¼ö È£ÃâÀÇ ½ÇÁ¦¿Í C È£Ãâ °üÇà ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú4) --------------------------------------------------------------------- 1 º»¹®¿¡ ¾Õ¼­ --------------------------------------------------------------------- Áö³­ ´Þ¿¡´Â Åͺ¸ C°¡ Á¦°øÇÏ´Â 6°³ ¸Þ¸ð¸® ¸ðµ¨(memory model)ÀÇ ±¸ Á¶/Ư¡/Â÷ÀÌÁ¡¿¡ °üÇÏ¿© ¼³¸íÇß´Ù. À̹ø¿¡´ÂÀ̾ Åͺ¸ C°¡ Á¦°øÇÏ´Â 3 °¡Áö ÇÔ¼ö È£Ãâ ¹æ½Ä°ú ´õºÒ¾î ÇÔ¼ö¿¡ ¸Å°³º¯¼ö¸¦ Àü´ÞÇÏ´Â ¼ø¼­¿¡ ´ëÇÏ¿© ÀÚ¼¼È÷ ¼³¸íÇÏ°Ú´Ù. --------------------------------------------------------------------- 2 ÀÏ´Ü °¨ºÎÅÍ Àâ°í º¸ÀÚ - C ÇÔ¼ö È£ÃâÀÇ ¼û°ÜÁø ³»¸· --------------------------------------------------------------------- ´ÙÀ½ÀÇ <¿¹Á¦ 1>Àº ¼Ò½ÃÀûÀÇ ÆĽºÄ®ÀÌ ÄÚ¿ôÀ½Ä¥ ¸¸ÇÑ, ±¸¼®±â ½Ã´ëÀû ÀÎ Á¤¼ö ÇÕ»ê ÇÁ·Î±×·¥ÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼­ main ÇÔ¼ö´Â sumÀ̶ó´Â ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ÀÌ ¶§ sum ÇÔ¼ö´Â intÇü ¸Å°³º¯¼ö¸¦ 2°³ ÃëÇÏ°í, intÇü °ªÀ» µÇ µ¹·ÁÁØ´Ù. ±×¸®°í sum ÇÔ¼ö´Â 2°³ÀÇ intÇü ÀÚµ¿º¯¼ö¸¦ ¸¶·ÃÇÏ¿© ³»ºÎÀûÀ¸ ·Î ¾²°í ÀÖ´Ù. ¿©±â¼­ ÁÖÀÇÇÒ »çÇ×Àº ¾î¶² ÇÔ¼öÀ̵çÁö ±× ¼±¾ð¹®¿¡ ³ªÅ¸³ª´Â ÃÖÃÊÀÇ 2¹ÙÀÌÆ® Å©±â(intÇü, unsignedÇü, ±Ù°Å¸® Æ÷ÀÎÅÍ)ÀÇ ÀÚµ¿º¯¼ö 2°³´Â Åͺ¸ CÀÇ ÃÖÀûÈ­(optimizing)¿¡ ÀÇÇØ ·¹Áö½ºÅͺ¯¼ö·Î ÀÚµ¿ º¯È¯µÈ´Ù´Â Á¡ÀÌ´Ù. ÀÌ ¶§ ·¹Áö½ºÅͺ¯¼ö´Â Åͺ¸ C ³»ºÎÀûÀ¸·Î SI¿Í DI ·¹Áö½ºÅ͸¦ ÀǹÌÇÑ´Ù. ÀÌ Á¡À» ÆľÇÇÏÁö ¸øÇϸé <¿¹Á¦ 2>¸¦ ÀÌÇØÇÒ ¼ö ¾ø°Ô µÈ´Ù. ¹°·Ð ±×·¯ÇÑ ÃÖÀûÈ­´Â´Ù¸¥ ·¹Áö½ºÅͺ¯¼öÀÇ Á¤ÀÇ°¡ ¾øÀ» ¶§¿¡ ÇÑÇϸç, ¶ÇÇÑ ¹øÁö ¿¬»êÀÚ &ÀÇ ÇÇ¿¬»êÀÚ·Î ´Ü ÇÑ ¹øÀÌ¶óµµ ¾²ÀÌ´Â 2¹ÙÀÌÆ® Å©±âÀÇ ÀÚµ¿º¯¼ö´Â ¼ø¼­»ó ºñ·Ï ÃÖÃÊÀÏÁö¶óµµ ·¹Áö½ºÅͺ¯¼ö·Î ÀÚµ¿ º¯È¯µÇÁö ¾Ê´Â ´Ù. ±×°ÍÀº ·¹Áö½ºÅͺ¯¼öÀÇ °æ¿ì ±× ¹øÁö¸¦ ÃëÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. <¿¹Á¦ 1> ¾ÆÁÖ °£´ÜÇÑ ¿¹Á¦ --------------------------------------------------------------------- #include int sum(int n1, int n2) { +--+------------ ÃÖÀûÈ­¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î int n; | ·¹Áö½ºÅÍ º¯¼ö(SI¿ÍDI)°¡ µÈ´Ù. int sum = 0; --- ÇÔ¼ö¸í°ú ÀÚµ¿º¯¼ö¸íÀº Áߺ¹µÇµµ ¹«¹æÇÏ´Ù. for (n = n1; n <= n2; n++) sum += n; return sum; } void main(void) { int result; result = sum(0, 10); printf("Result = %d\n", result); } --------------------------------------------------------------------- ´ÙÀ½ÀÇ <¿¹Á¦ 2>´Â tcc.exe¸¦ ½á¼­ <¿¹Á¦ 1>À» ¾î¼Àºí¸®·Î ÄÄÆÄÀÏÇÑ µÚ¿¡ Áß¿äÇÑ ºÎºÐ¸¸ ¹ßÃé/ÆíÁýÇÑ °ÍÀ¸·Î¼­, Åͺ¸ C¿¡¼­ ÇÔ¼ö¸¦ È£ÃâÇÏ°í °ªÀ» º¹±Í(return)ÇÏ´Â À̸¥¹Ù "È£Ãâ °üÇà(calling convention)"ÀÇ Àü¸»À» º¸¿© ÁÖ°í ÀÖ´Ù. Áï ÇÔ¼ö È£Ãâ/ÇÇÈ£Ãâ ±ÔÄ¢ ¹× ¸Å°³º¯¼öÀÇ Àü´Þ ¼ø¼­ µîÀÌ Àû³ª¶óÇÏ°Ô µå·¯³ª ÀÖ´Ù. ÀÌ¹Ì ¾î¼Àºí¸®¿¡¼­ÀÇ ÇÔ¼ö(ÇÁ·Î½ÃÁ®) È£Ãâ ¹æ½Ä µî¿¡ Àͼ÷ÇØ ÀÖ´Â µ¶ÀÚ´Â <¿¹Á¦ 2>¸¸À¸·Îµµ ¸î ´Þ ºÐ·®ÀÇ ¿ø°í¸¦ ´Ù ÀÐÀº ¼ÀÀÌ µÉ °ÍÀÌ´Ù. <¿¹Á¦ 2> <¿¹Á¦ 1>À» ¾î¼Àºí¸®·Î ÄÄÆÄÀÏÇÑ ÄÚµå --------------------------------------------------------------------- ...... ; ; sum ÇÔ¼ö(PUBLIC ¼±¾ðÀº ´Ù¸¥ °÷¿¡ ¸ð¾ÆÁ® ÀÖ´Ù) ; _sum PROC near --- ±Ù°Å¸® ÇÔ¼öÀÓÀ» ³ªÅ¸³½´Ù. ÁøÀÔ +-push bp --- BP¸¦ ´ëÇǽÃŲ´Ù. ÄÚµå +-mov bp,sp --- BP´Â ¸Å°³º¯¼ö¿Í ÀÚµ¿º¯¼ö¸¦ ÂüÁ¶Çϱâ À§ÇÑ Æ÷ÀÎÅÍ·Î ¾²ÀδÙ. push si -+- ÇÔ¼ö ³»¿¡¼­ SI¿Í DI¸¦ ¾²·Á¸é ¹Ýµå½Ã push di -+ SI¿Í DIÀÇ ÀÌÀü °ªÀ» ´ëÇǽÃÄÑ¾ß ÇÑ´Ù. xor di,di --+ mov si,word ptr [bp+4] | jmp short @5 ¸Å°³º¯¼ön1 | @4: | sum ÇÔ¼ö ºí·° ³»ÀÇ add di,si | ¹®ÀåµéÀ» ÄÄÆÄÀÏÇÑ @3: | ¾î¼Àºí¸® ÄÚµå inc si | @5: | cmp si,word ptr [bp+6] | jle @4 ¸Å°³º¯¼ön2 -+ @2: mov ax,di --- 2¹ÙÀÌÆ® Å©±âÀÇ µ¥ÀÌÅÍÇüÀº jmp short @1 AX¿¡ ³Ö¾î º¹±ÍÇÑ´Ù. @1: pop di -+- SI¿Í DIÀÇ ÀÌÀü °ªÀ» º¹±¸ pop si -+ Å»Ãâ +-pop bp--- BPÀÇ ÀÌÀü °ªÀ» º¹±¸ ÄÚµå +-ret _sum ENDP ; ; main ÇÔ¼ö ; _main PROC near +-- ÇÔ¼ö ³»ºÎ¿¡¼­ SI¸¦ ¾²¹Ç·Î push si ----+ ÀÌÀü °ªÀ» ´ëÇǽÃŲ´Ù. (main ÇÔ¼öµµ ±âµ¿ Äڵ忡 ´ëÇÑ ÇÇÈ£Ãâ ÇÔ¼öÀÓ) +-mov ax,10 | push ax ------- µÎ¹ø° ½Ç¸Å°³º¯¼ö 10ÀÇ ÀúÀå sum | xor ax,ax ---- ù¹ø° ½Ç¸Å°³º¯¼ö 0ÀÇ ÀúÀå È£Ãâ | push ax ------- ±Ù°Å¸® È£Ãâ(near call) | call near ptr _sum | pop cx -+----- SPÀÇ ¿ø»ó º¹±Í +-pop cx -+ (pop ¸í·ÉÀ» ½èÀ½¿¡ ÁÖ¸ñ) mov si,ax --- ¹Ýȯ°ªÀ» result(Áï SI)¿¡ ´ëÀÔ +-push si ¹®ÀÚ¿­ "Result = %d\n"À» °¡¸®Å°´Â printf| mov ax,offset DGROUP:s@ --+ Æ÷ÀÎÅÍ È£Ãâ | push ax +--- ´ÙÀ½ ´Þ¿¡ ¼³¸íÇÒ ¿¹Á¤ | call near ptr _printf | pop cx +-pop cx pop si -------- ÀÌÀü °ªÀ» º¹±¸ ret --------------- ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» Á¾·áÇÑ´Ù _main ENDP (½ÇÁ¦·Î´Â ±âµ¿ ÄÚµåÀÇ Á¾·á ·çƾÀ¸·Î ÇÁ·Î±×·¥ Á¦¾î¸¦ ³Ñ±ä´Ù) ...... --------------------------------------------------------------------- --------------------------------------------------------------------- 3 È£Ãâ ÇÔ¼ö¿Í ÇÇÈ£Ãâ ÇÔ¼öÀÇ ÀÇ¹Ì --------------------------------------------------------------------- º»·Ð¿¡ µé¾î°¡±â Àü¿¡ ¿ì¼± »õ·Î¿î ¿ë¾î µÎ °¡Áö¸¸ È®½ÇÈ÷ ÇÏ°í ³Ñ¾î °¡ÀÚ. <¿¹Á¦ 1>¸¦ º¸¸é main ÇÔ¼ö°¡ sum ÇÔ¼ö¸¦ È£ÃâÇÏ°í ÀÖ´Ù. ¿©±â¼­ ±× È£ÃâÇÑ ½ÃÁ¡¿¡¼­¸¸ ±¹ÇÑÇÏ¿© º¼ ¶§, main ÇÔ¼ö¸¦ "È£Ãâ ÇÔ¼ö"¶ó°í ÇÏ°í su m ÇÔ¼ö¸¦ "ÇÇÈ£Ãâ ÇÔ¼ö"·Î ºÎ¸£±â·Î ÇÏÀÚ. ±»ÀÌ ¿µ¾î·Î ÇÏÀÚ¸é °¢°¢ "call ing function", "called function"ÀÌ µÇ°Ú´Ù. À¯ÀÇÇÒ Á¡Àº È£Ãâ ÇÔ¼ö¿Í ÇÇÈ£Ãâ ÇÔ¼öÀÇ °ü°è°¡ ±× È£ÃâÇÏ´Â ½ÃÁ¡¿¡ ±¹ÇÑµÇ¾î °áÁ¤Áö¾îÁø´Ù´Â °ÍÀÌ´Ù. ±×·¡¼­ ½ÃÁ¡À» ¹Ù²Ù¸é ±× °ü°èµµ ´Þ¶óÁø ´Ù. ¿¹¸¦ µé¾î ¸¸¾à sum ÇÔ¼ö°¡ ¶Ç ´Ù¸¥ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù¸é ±× ½ÃÁ¡¿¡¼­´Â sumÀÌ È£Ãâ ÇÔ¼ö°¡ µÈ´Ù. ±×¸®°í main ÇÔ¼öµµ ÇÁ·Î±×·¥ ½ÇÇà Á÷ÈÄ·Î ½ÃÁ¡ À» ´Þ¸® ÇÏ¸é ±âµ¿ ÄÚµå(startup code)¿¡¼­ È£ÃâµÇ´Â ÇÇÈ£Ãâ ÇÔ¼öÀÌ´Ù. ±× ¹Û¿¡ º¹±Í(return), ´ëÇÇ(push), º¹±¸(pop), ¹Ýȯ°ª(¸®ÅÏ°ª; retur n value) µîÀÇ ¿ë¾îµµ »ý¼ÒÇÑ µ¶ÀÚ´Â ÀÍÇô µÎ±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- 4 ±Ù°Å¸®/¿ø°Å¸®/°Å´ë ÇÔ¼ö --------------------------------------------------------------------- 4.1 C¿Í ¾î¼Àºí¸®ÀÇ ¸µÅ©¿¡ ¾Õ¼­ ÇÑÆí, <¿¹Á¦ 2>¸¦ ÈȾ°í "´ëÃæ ±×·±°Å±¸³ª!"ÇÏ°í ÀÌÇØ°¡ °£´Ù¸é °ð ¹Ù·Î ÀÌ ±ÛÀÇ ÃÖÁ¾ ¸ñÇ¥ÀÎ C¿Í ¾î¼Àºí¸®ÀÇ ¸µÅ©¿¡ °üÇÑ À̾߱⸦ Ç®¾îµµ ¹«¸®°¡ ¾ø°ÚÁö¸¸, ³í¸®ÀÇ È帧À» À§ÇØ ÀÏ´ÜÀº ÇÔ¼ö È£Ãâ ¹æ½ÄÀ» ºñ·ÔÇÑ Á¦ ¹Ý »çÇ׿¡ ´ëÇÑ ¼³¸íÀÌ ¸ÕÀú ÀÖ¾î¾ß ÇÒ °Í °°´Ù. ¿ì¸®´Â C·Î ÇÁ·Î±×·¥À» © ¶§ ÇÔ¼ö¸í ´ÙÀ½¿¡ °ýÈ£¸¦ µÎ¸£°í ½Ç¸Å°³º¯ ¼öµéÀ» ³ª¿­Çϸé C ÄÄÆÄÀÏ·¯°¡ ±× ÇÔ¼ö¸¦ ¾Ë¾Æ¼­ Àû´çÇÑ ¹æ¹ýÀ¸·Î È£ÃâÇØ ÁֹǷΠ½ÇÁ¦·Î(¾î¼Àºí¸®¾î ¼öÁØ¿¡¼­) ÇÔ¼ö°¡ ¾î¶»°Ô È£ÃâµÇ´ÂÁö´Â »ç½Ç»ó ¾Ë ÇÊ¿ä°¡ ¾ø¾ú´Ù. ÇÏÁö¸¸ C¿Í ¾î¼Àºí¸®¸¦ ¸µÅ©ÇÏ·Á¸é ±× È£Ãâ ¹æ¹ýÀ» ¸ð ¸£°í¼­´Â ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö°¡ ¾ø´Ù. ¿Ö³Ä ÇÏ¸é ¾î¼Àºí¸® ·çƾÀº C ÄÄÆÄÀÏ ·¯¿Í º°°³ÀÇ Á¸ÀçÀ̱⠶§¹®ÀÌ´Ù. ¿©´ãÀÌÁö¸¸... ¿ì¸®°¡ ¼ù°¡¶ôÀ¸·Î ¹ä ÇÑ ¼úÀ» ¶ã ¶§ °ú¿¬ ¾î¶»°Ô ÇÏ°í ÀÖ´ÂÁö »ý°¢ÇØ º¸°í ¸Ô´Â »ç¶÷ÀÌ Àִ°¡? ¼ù°¡¶ôÀ» Áæ ¶§¿¡ ¾ó¸¶¸¶ÇÑ ¾Ð ·ÂÀ» °¡ÇØ¾ß ¼ù°¡¶ôÀÌ ¹Ì²ô·¯ ¶³¾îÁöÁö ¾Ê°í, ¼ù°¡¶ôÀ» ¸î ´ºÆ°ÀÇ ÈûÀ¸·Î ¾î¶² ¹æÇâ¿¡¼­ ¹äÇ® ´õ¹Ì¿¡ ¾¥¼Å ³Ö¾î¾ß ¼ù°¡¶ôÀÌ ¹äÇ® ´õ¹ÌÀÇ ÀúÇ×À¸·Î À̱â°í ÆÄ°íµé ¼ö Àִ°¡, ±×¸®°í ¼Õ¸ñ¿¡ ¾ó¸¶ ¸¸ÇÑ ¸ð¸àÆ®¸¦ °¡ÇØ¾ß ¼ù°¡ ¶ôÀÌ ¹äÀ» ÆÛ³¾ ¼ö ÀÖÀ¸¸ç, ÆÈ°ú ¼Õ¸ñÀ» ¸î ÀÚÀ¯µµ·Î ¾î¶°ÇÑ °æ·Î·Î ¾ó¸¶ ¸¸ÇÑ ¼Óµµ·Î À̵¿½ÃÄÑ¾ß ÃÖ´Ü ½Ã°£ ³»¿¡ ÆÛ³½ ¹äÀ» ´Ü ÇÑ Åç È긮Áö ¾Ê°í ¸ñÀûÁöÀÎ ÀÔ¿¡ Á¢±Ù½Ãų ¼ö Àִ°¡... °Ô´Ù°¡ ±×·± µ¿ÀÛÀ» ÃëÇϱâ À§ÇØ ´ë ³ú¿¡¼­ °¢ Á¶Á÷ÀÇ ½Å°æ ¼¶À¯¿¡ ¾î¶°ÇÑ Àü±âÀû ÆÞ½º¸¦ °¡ÇØ¾ß ÇÏ´À³Ä¿¡±îÁö ´Ù´Ù¸£¸é Á¤¸» ¹Øµµ ³¡µµ ¾ø´Ù. ÀÌ·± °É »ý°¢ÇØ º» ÀûÀÌ Àִ°¡ ¸»ÀÌ´Ù. ¹°·Ð °ÅÀÇ Àü¹«ÇÏ°ÚÁö. »ç¶÷À̶ó¸é ±×·± °Ç º»´ÉÀûÀ¸·Î "ÀÚ¿¬½º·´°Ô" ó¸® ÇÒ ¼ö ÀÖÀ» Å×´Ï ´ç¿¬ÇÏ´Ù. ÇÏÁö¸¸ ¸¸¾à¿¡ ¹ä ÇÑ ¼úÀ» ¶ß´Â ·Îº¸Æ® ÆÈÀ» ¸¸µç´Ù°í Çغ¸¶ó. ¾Æ´Ï¸é ½Ã¹Ä·¹À̼ǵµ ÁÁ´Ù. ±×·¸´Ù¸é ¾ê±â´Â ÀüÇô ´Þ¶óÁú °ÍÀÌ´Ù. ¿Ö³Ä ÇÏ¸é ·Îº¸ Æ®´Â º»´ÉÀ̶õ °Ô ¾øÀ¸´Ï±ñ. ±×·¯¹Ç·Î Á» Àü¿¡ ¾ð±ÞÇÑ ¸ðµç °ÍÀÌ ½É°¢ÇÑ °í·Á ´ë»óÀÌ µÈ´Ù. °á·ÐÀûÀ¸·Î ºÁ¼­ ±× ¹ä ÇÑ ¼ú ¶ß´Â ¾îÂ¸é ÇÏÂú°í °£ ´ÜÇÑ µ¿ÀÛÀ» Çؼ®Çϱâ À§ÇÏ¿© ¼ö½Ê ¼ö¹é¸íÀÇ ÃµÀç°¡ µ¿¿øµÇ¾î¾ß ÇÒ °ÍÀÌ ´Ù. ÀÌ°ÍÀ» C¿Í ¾î¼Àºí¸®ÀÇ °ü°è¿¡¼­µµ ±×·² µíÇÏ°Ô ºñÀ¯µÈ´Ù. C ¾ð¾î·Î ÇÁ·Î±×·¡¹ÖÇÒ ¶§¿¡´Â ³»ºÎÀûÀÎ º¹ÀâÇÑ Ã³¸®¸¦ C ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ "ÀÚ¿¬ ½º·´°Ô ÇØ°á(ÄÄÆÄÀÏ)"ÇØ ÁֹǷΠÀüÇô ´ë¼ö·ÓÁö ¾Ê°Ô »ý°¢µÇ´ø °ÍÀÌ, ¾î¼À ºí¸®·Î ÇÒ ¶§¿¡´Â ÇϳªºÎÅÍ ¿­±îÁö ¸ðµç °ÍÀ» ÇÁ·Î±×·¡¸Ó°¡ Ã¥ÀÓÁö°í ÇØ ³ª°¡¾ß ÇÑ´Ù. µû¶ó¼­ ¹ß»ýÇÏ´Â ¾î·Á¿î ÀÏÀÌ ÇѵΠ°¡Áö°¡ ¾Æ´Ï´Ù. ¹Ýµå½Ã ÁؼöÇØ¾ß ÇÒ ±ÔÄ¢µµ ºÎÁö±â¼öÀÌ°í, ¶ÇÇÑ ¹ú·¹Àâ´Â µ¥(µð¹ö±ë) µå´Â °íÃæµµ À̸¸Àú¸¸ÀÌ ¾Æ´Ï´Ù. ÀÌ·± Á¡À» ¿°µÎ¿¡ µÎ°í, C¿Í ¾î¼Àºí¸®ÀÇ ¸µÅ©¿¡´Â ÀÌó·³ ¾î·Á¿î ÀÏÀÌ »êÀûÇØ ÀÖ´Ù´Â °ÍÀ» ¹Ì¸® ÆľÇÇÑ µÚ¿¡ ÀÌ ±ÛÀ» ÀÐ¾î ³ª°£´Ù¸é, ¼¼¼¼ÇÏ°í ÂÉÁ¸ÇÑ ¼ö¸¹Àº ±ÔÄ¢µéÀ» ÀÍÈ÷´Â µ¥ µå´Â ºÎ´ã°¨Àº ¾î´À Á¤µµ ÁÙÀÏ ¼ö ÀÖÀ¸ ¸®¶ó º»´Ù. 4.2 ±Ù°Å¸® È£Ãâ(near call) ¸ÕÀú °¡Àå °£´ÜÇÏ°í °¡Àå ÀϹÝÀûÀÎ ±Ù°Å¸® È£Ãâ¿¡ °üÇÏ¿© ¾Ë¾Æº¸ÀÚ. ±Ù°Å¸® È£ÃâÀÇ °¡Àå Ư¡ÀûÀÎ Á¡Àº ÇÇÈ£Ãâ ÇÔ¼ö(±Ù°Å¸® ÇÔ¼ö)°¡ º»¿¬ÀÇ ÀÓ ¹«¸¦ ¼º°ø¸®¿¡ ¸¶Ä¡°í ¿ø·¡ ÀÚ½ÅÀ» È£ÃâÇß´ø ÇÔ¼ö·Î º¹±Í(¸®ÅÏ)ÇÒ ¶§, ½º ÅÃÀ¸·ÎºÎÅÍ "2¹ÙÀÌÆ®ÀÇ º¹±Í ¹øÁö"¸¦ ÃëÇÑ´Ù´Â °ÍÀÌ´Ù. ¾î¼Àºí¸® ÄÚµå·Î À̸¦ ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù. * ±Ù°Å¸® ÇÔ¼ö(near function)ÀÇ Á¤ÀÇ PUBLIC _func _func PROC near ¡ç ±Ù°Å¸® ÇÔ¼öÀÓÀ» Ç¥½Ã ...... ret --- 2¹ÙÀÌÆ®ÀÇ º¹±Í ¹øÁö(IP)¸¦ ÃëÇÑ´Ù. _func ENDP * ±Ù°Å¸® È£Ãâ(near call) call near ptr _func | +-- ½ºÅÿ¡ 2¹ÙÀÌÆ®ÀÇ º¹±Í ¹øÁö¸¸À», Áï IP¸¸À» ´ëÇǽÃŲ´Ù. 4.3 ¿ø°Å¸® È£Ãâ(far call) ±× ´ÙÀ½À¸·Î ¿ø°Å¸® È£ÃâÀÇ °¡Àå Ư¡ÀûÀÎ Á¡Àº ÇÇÈ£Ãâ ÇÔ¼ö(¿ø°Å¸® ÇÔ¼ö)°¡ ÀÏÀ» ¸ðµÎ ³¡¸¶Ä¡°í º¹±ÍÇÒ ¶§, ½ºÅÃÀ¸·ÎºÎÅÍ "4¹ÙÀÌÆ®ÀÇ º¹±Í ¹ø Áö"¸¦ ÃëÇÑ´Ù´Â °ÍÀÌ´Ù. ¾î¼Àºí¸® ÄÚµå·Î À̸¦ ³ªÅ¸³»¸é ´ÙÀ½°ú °°´Ù. * ¿ø°Å¸® ÇÔ¼ö(far function)ÀÇ Á¤ÀÇ PUBLIC _func _func PROC far --- ¿ø°Å¸® ÇÔ¼öÀÓÀ» Ç¥½Ã ...... ret ---4¹ÙÀÌÆ®ÀÇ º¹±Í ¹øÁö(CS:IP)¸¦ ÃëÇÑ´Ù. _func ENDP * ¿ø°Å¸® È£Ãâ(far call) °°Àº ¸ðµâ ³»ÀÇ ÇÔ¼ö È£Ãâ½Ã ¡ç ÀÛÀº ±ÛÀÚü!! push cs call near ptr _func ´Ù¸¥ ¸ðµâ ³»ÀÇ ÇÔ¼ö È£Ãâ½Ã ¡ç ÀÛÀº ±ÛÀÚü call far ptr _func | +-- ½ºÅÿ¡ 4¹ÙÀÌÆ®ÀÇ º¹±Í ¹øÁö¸¦, Áï CS:IP¸¦ ´ëÇǽÃŲ´Ù. (ÁÖÀÇ)À§ÀÇ È£Ãâ ¹æ½ÄÀÌ ¾Æ·¡º¸´Ù ó¸® ¼Óµµ°¡ ºü¸§. ±×·¯³ª °á°ú´Â ¿ÏÀüÈ÷ µ¿µîÇÔ. 4.4 °Å´ë È£Ãâ(huge call) °Å´ë È£ÃâÀº ÇÔ¼ö È£Ãâ ¹æ¹ý¿¡ °üÇÑ ÇÑ »ç½Ç»ó ¿ø°Å¸® È£Ãâ°ú ¿ÏÀüÈ÷ µ¿ÀÏ(identical)ÇÏ´Ù. ´õ¿íÀÌ ¾î¼Àºí¸® ¼öÁØ¿¡¼­´Â "¹®¹ýÀûÀ¸·Î" ¿ø°Å¸® È£Ãâ°ú °Å´ë È£ÃâÀÌ ÀüÇô ±¸º°µÇÁö ¾Ê´Â´Ù. ´Ù¸¸ ¿ø°Å¸® È£Ãâ°úÀÇ Â÷ÀÌÁ¡À̶ó¸é ÇÇÈ£Ãâ ÇÔ¼ö(°Å´ë ÇÔ¼ö)°¡ ±× ¼± µÎ¿¡¼­ DSÀÇ °ªÀ» ÀÏ´Ü ´ëÇǽÃŲ ÈÄ¿¡, ÀÚ½ÅÀÌ ¼ÓÇØ ÀÖ´Â ¸ðµâÀÇ Á¤Àû µ¥ ÀÌÅÍ ¿µ¿ª ¼±µÎ·Î DS¸¦ º¯°æÇÑ´Ù´Â °ÍÀÌ´Ù. ±×·± ÈÄ ÀÏÀ» ¸ðµÎ ³¡¸¶Ä¡¸é ¿ø·¡ÀÇ DS °ªÀ» º¹±¸ÇÑ ´ÙÀ½ 4¹ÙÀÌÆ®ÀÇ º¹±Í ¹øÁö(CS:IP)¸¦ ÃëÇÏ¿© µÇµ¹¾Æ °£´Ù. ÀÌó·³ DS°¡ °íÁ¤ÀûÀÌÁö ¾Ê±â ¶§¹®¿¡ Åͺ¸ CÀÇ 6°³ ¸Þ¸ð¸® ¸ðµ¨ Áß ¿¡¼­ À¯ÀÏÇÏ°Ô 64k ÀÌ»óÀÇ Á¤Àû µ¥ÀÌŸ¸¦ ÃëÇÒ ¼ö ÀÖ´Â ¸ðµ¨ÀÌ µÇ´Â °ÍÀÌ ´Ù. ¾î¼Àºí¸® ÄÚµå·Î À̸¦ ³ªÅ¸³»¸é ´ë·« ´ÙÀ½°ú °°Àºµ¥, °Å´ë ÇÔ¼ö´Â ¾î ¼Àºí¸®¿ÍÀÇ ¸µÅ©¿¡¼­´Â ½ÇÁ¦·Î °ÅÀÇ ¾²ÀÌÁö ¾ÊÀ» °ÍÀ̹ǷΠ±×·±µ¥ ÀÖ±¸³ª ÇÏ´Â Á¤µµ·Î¸¸ ¾Ë¾Æ µÎ¸é µÉ °Í °°´Ù. * °Å´ë ÇÔ¼öÀÇ Á¤ÀÇ(ÀÛ¼º) PUBLIC _func _func PROC far ...... push ds mov ax, ¸ðµâ¸í_DATA mov ds,ax | ...... +-- ÇØ´ç ¸ðµâÀÇ Á¤Àû µ¥ÀÌÅÍ ¿µ¿ªÀÇ pop ds ¼±µÎ¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍ. ...... ret _func ENDP * °Å´ë È£Ãâ(¿ø°Å¸® È£Ãâ°ú ¿ÏÀüÈ÷ µ¿ÀÏ) °°Àº ¸ðµâ ³»ÀÇ ÇÔ¼ö È£Ãâ½Ã push cs call near ptr _func ´Ù¸¥ ¸ðµâ ³»ÀÇ ÇÔ¼ö È£Ãâ½Ã call far ptr _func --------------------------------------------------------------------- 5 ±Ù°Å¸®/¿ø°Å¸®/°Å´ë ÇÔ¼öÀÇ ¼±¾ð(Á¤ÀÇ) --------------------------------------------------------------------- 5.1 ÇÔ¼ö ¼ö½ÄÀÚ near/far/huge Áö±Ý±îÁö´Â ¾î¼Àºí¸® ÄÚµå·Î ¿¹¸¦ µé¾ú´Âµ¥ C ¹®¹ýÀûÀ¸·Îµµ ±Ù°Å¸®/¿ø °Å¸®/°Å´ë ÇÔ¼ö¸¦ ¼±¾ð ¹× Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ±× ¹æ¹ýµµ °£´ÜÇؼ­, ÇÔ¼ö ¼± ¾ð ¶Ç´Â Á¤ÀÇ¿¡¼­ void, int, double µûÀ§ÀÇ ÇÔ¼öÇü ÁöÁ¤ÀÚ(type specifie r)¿Í ÇÔ¼ö¸í »çÀÌ¿¡ near/far/huge¶ó´Â ÇÔ¼ö ¼ö½ÄÀÚ(function modifier) ÁßÀÇ Çϳª¸¦ »ðÀÔÇÏ´Â °ÍÀ¸·Î ³¡³­´Ù. ¿¹¸¦ µé¾î <¿¹Á¦ 1>ÀÇ sum ÇÔ¼ö¸¦ ¿ø°Å¸® ÇÔ¼ö·Î Á¤ÀÇÇÏ·Á¸é ¾Æ·¡¿Í °°ÀÌ ¹Ù²Ù¸é µÈ´Ù. ´Ù¸¥ ¸ðµç»çÇ×Àº Æò»ó½Ã¿Í ¶È°°´Ù. * ¿ø°Å¸® ÇÔ¼öÀÇ Á¤ÀÇ int far sum(int n1, int n2) { ...... } * ¿ø°Å¸® ÇÔ¼öÀÇ ¼±¾ð int far sum(int n1, int n2); ÀϹÝÀûÀÎ °æ¿ì¿¡ near/far/huge µîÀÇ ÇÔ¼ö ¼ö½ÄÀÚ´Â ¾µ ÀÏÀÌ °ÅÀÇ ¾ø´Ù. ±×°ÍÀº ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó¼­ ÀûÀýÇÑ ÇÔ¼ö È£Ãâ ¹æ½ÄÀÌ ³»Á¤µÇ±â ¶§¹®ÀÌ ´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº Àú¹ø ´Þ¿¡ Áö·çÇϵµ·Ï ÀÚ¼¼È÷ ¼³¸íÇÑ ¹Ù ÀÖÀ¸¹Ç·Î »õ»ï ½º·´°Ô Àç·ÐÇÏÁö´Â ¾Ê°Ú´Ù. ´Ù¸¸ ´ëÇü ÄÚµå ¸ðµ¨¿¡¼­ ¼Óµµ»óÀÇ ¹®Á¦·Î ÀÎÇØ Æ¯º°È÷ ±Ù°Å¸® ÇÔ¼ö°¡ ÇÊ¿äÇÒ ÇÒ ¶§ near¸¦ ¾²±âµµ ÇÏ°í, ¹Ý¸é¿¡ Åͺ¸ C°¡ Á¦°øÇÏ´Â ±×·¡ÇÈ ÇÔ¼ö µé°ú °°ÀÌ ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­µµ ¹Ýµå½Ã ¿ø°Å¸® È£ÃâÀ» Çؾ߸¸ ÇÏ´Â °æ¿ì ¿¡ ±× ¼±¾ð¹® µî¿¡ far¸¦ ±â¼úÇϱ⵵ ÇÔÀ» Âü°íÇϱ⠹ٶõ´Ù. Áö±Ý ´çÀå ÅÍ º¸ C ÂüÁ¶ ¾È³»¼­(¸Å´º¾ó)¸¦ º¸±â ¹Ù¶õ´Ù. ¾Æ¸¶ ±×·¡ÇÈ ÇÔ¼ö´Â ¸ù¶¥ ±× ¿ø Çü¿¡ far ¼ö½ÄÀÚ¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ» °ÍÀÌ´Ù. µ¡ºÙ¿©¼­ ±×·¡ÇÈ ÇÔ¼ö´Â ¸Þ¸ð¸® ¸ðµ¨¿¡ »ó°ü¾øÀÌ ´Ü ÇÑ ¹ú¸¸ÀÌ ¸¶·ÃµÇ ¾î Àֱ⠶§¹®¿¡ ȣȯ¼ºÀ» À§ÇØ ¸ðµÎ ¿ø°Å¸® ÇÔ¼ö·Î¼­ ÀÛ¼ºµÇ¾î ÀÖ´Ù. 5.2 ¼±¾ð/Á¤ÀÇÇÒ ¶§ ÁÖÀÇÇÒ Á¡ ÇÑÆí, ÁÖÀÇÇÒ Á¡Àº ¹Ýµå½Ã ÇÔ¼ö¸í Á÷Àü¿¡ near/far/huge¸¦ »ðÀÔÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ´Ù¸¥ °÷¿¡ »ðÀÔÇÏ¸é ¼ö½ÄÀÚÀÇ Àǹ̰¡ ÀüÇô Ʋ·ÁÁø´Ù. ¿¹¸¦ µé¾î ¾Æ·¡ÀÇ ¼¼ ¼±¾ð¹®Àº ¼­·Î ¿ÏÀüÈ÷ ´Ù¸¥ Àǹ̸¦ °¡Áö°í ÀÖ´Ù. [1] char *far func1(void); [2] char far *func2(void); [3] char far *far func3(void); | | | +-- func3°¡ ¿ø°Å¸® ÇÔ¼öÀÓÀ» ³ªÅ¸³»´Â | ÇÔ¼ö ¼ö½ÄÀÚ(function modifier) +-- func3ÀÇ ¹Ýȯ°ªÀÌ ¿ø°Å¸® Æ÷ÀÎÅÍÀÓÀ» ³ªÅ¸³»´Â ¹øÁöÁöÁ¤ ¼ö½ÄÀÚ(addressing modifier) À§ÀÇ ¼±¾ðµéÀº °¢°¢ ¾Æ·¡¿Í °°Àº Àǹ̸¦ °¡Áö°í ÀÖ´Ù. [1] (³»Á¤µÈ Å©±âÀÇ) char *Çü Æ÷ÀÎÅ͸¦ º¹±ÍÇÏ´Â ¿ø°Å¸® ÇÔ¼ö func1À» ¼± ¾ð [2] char far *Çü Æ÷ÀÎÅ͸¦ º¹±ÍÇÏ´Â (³»Á¤µÈ È£Ãâ ¹æ½ÄÀÇ) ÇÔ¼ö func2¸¦ ¼±¾ð [3] char far *ÇüÀÇ Æ÷ÀÎÅ͸¦ º¹±ÍÇÏ´Â ¿ø°Å¸® ÇÔ¼ö func3¸¦ ¼±¾ð ¿©±â¼­ "³»Á¤µÈ Å©±â"¶õ ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­´Â ±Ù°Å¸® Æ÷ÀÎÅÍ, ±× ¹Û¿¡´Â ¿ø°Å¸® Æ÷ÀÎÅÍ·Î ³»Á¤µÊÀ» ¶æÇÏ°í, "³»Á¤µÈ È£Ãâ ¹æ½Ä"À̶õ ¼ÒÇü ÄÚµå ¸ðµ¨¿¡¼­´Â ±Ù°Å¸® ÇÔ¼ö, °Å´ë ¸ðµ¨¿¡¼­´Â °Å´ë ÇÔ¼ö, ±× ¹Û¿¡´Â ¿ø °Å¸® ÇÔ¼öÀÓÀ» ¶æÇÑ´Ù. ¼¼ °¡Áö ¼±¾ðÀÌ Àß ±¸º°µÇÁö ¾Ê´Â´Ù¸é, Ã¥À» Àá½Ã µ¤¾î µÎ°í À帶·Î ¿ìÁßÃæÇÑ ÇÏ´ÃÀ̳ª¸¶ Çѹø ¹°²ô·¯¹Ì ÃÄ´Ùº» µÚ¿¡ Àú¹ø ´Þ ±ÛºÎÅÍ Â÷ºÐÈ÷ ´Ù½Ã ÀÐ¾î º¸¸é ÀÚ¿¬½º·´°Ô ÀÌÇØ°¡ µÇ¸®¶ó º»´Ù.  #51 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷3-2: ÇÔ¼ö È£Ãâ/C È£Ãâ °üÇà 05/06 00:13 437 line --------------------------------------------------------------------- 6 ¸Å°³º¯¼ö Àü´Þ ¹æ½Ä 2°¡ÁöÀÇ °³¿ä --------------------------------------------------------------------- À̻󿡼­´Â ÇÔ¼öÀÇ È£Ãâ/º¹±Í¶ó´Â °üÁ¡¿¡¼­ ÁÖ·Î ¼³¸íÀ» ÁøÇàÇß´Ù. ÀÌ ¹ø¿¡´Â ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ °ú¿¬ ½Ç¸Å°³º¯¼ö(actual parameter ¶Ç´Â argumen t)¸¦ ¾î¶°ÇÑ ¼ø¼­·Î ½ºÅÿ¡ ´ëÇÇ(ÀúÀå)½ÃÅ°´À³Ä ÇÏ´Â °üÁ¡¿¡¼­ ¼³¸íÀ» ÇÏ °Ú´Ù. Âü, ÇÔ¼ö¿¡ ¸Å°³º¯¼ö¸¦ Àü´ÞÇÏ´Â ¹æ¹ýÀ¸·Î¼­ °ÅÀÇ ´ëºÎºÐÀÇ °í±Þ ¾ð ¾î¿¡¼­ ½ºÅÃÀÌ È°¿ëµÈ´Ù´Â °ÍÂëÀº ÀÍÈ÷ ¾Ë°í ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù. ÇÇÈ£Ãâ ÇÔ¼ö¿¡ ¸Å°³º¯¼ö¸¦ Àü´ÞÇÏ´Â ¼ø¼­´Â ¾Æ·¡¿Í °°ÀÌ µü 2°¡Áö ¹æ ¹ý¿¡ ÀÇÇÑ´Ù. +----------------------------------------+ | [1] C ¹æ½Ä ¸Å°³º¯¼ö Àü´Þ ¼ø¼­ | | C Parameter-Passing Sequence | | ¶Ç´Â C È£Ãâ °üÇà | | C Calling Convention | | | | [2] ÆĽºÄ®½Ä ¸Å°³º¯¼ö Àü´Þ ¼ø¼­ | | Pascal Parameter-Passing Sequence| | ¶Ç´Â ÆĽºÄ® È£Ãâ °üÇà | | Pascal Calling Convention | +----------------------------------------+ ÀÌ Áß¿¡¼­ ÈÄÀÚ´Â Åͺ¸ ÆĽºÄ®°°Àº °í±Þ ¾ð¾î¿ÍÀÇ ¸µÅ©¿¡¼­³ª ÇÊ¿äÇÑ °ÍÀ̹ǷΠÁö±Ý ´çÀåÀº ¾Ë¾Æ µÑ ÇÊ¿ä°¡ ¾ø´Ù. ¹Ý¸é¿¡ ÀüÀÚ´Â Åͺ¸ C(»ç½Ç»ó IBM-PC¿¡¼­ µ¹¾Æ°¡´Â ´ëºÎºÐÀÇ C)°¡ Ç¥ÁØ ¶óÀ̺귯¸® ÇÔ¼öµéÀ» ºñ·ÔÇÑ ¸ð µç ÇÔ¼öÀÇ È£ÃâÇÒ ¶§ÀÇ ³»Á¤(default)µÈ ¹æ½ÄÀ̹ǷÎ, C¿Í ¾î¼Àºí¸®ÀÇ ¸µÅ© ¸¦ À§Çؼ± ÀüÀÚÀÇ ¹æ½ÄÀ» ÇнÇÇÏ°Ô ÆľÇÇØ µÑ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ µÎ ¹æ½Ä°£ÀÇ °¡Àå Å« Â÷ÀÌÁ¡Àº ù°, ½Ç¸Å°³º¯¼ö¸¦ ½ºÅÿ¡ ÀúÀåÇÏ ´Â ¼ø¼­ÀÌ°í µÑ°, º¹±Í ÈÄ¿¡ ½ºÅà Æ÷ÀÎÅÍ SP°ªÀÇ º¹±¸¸¦ È£Ãâ ÇÔ¼ö¿Í ÇÇ È£Ãâ ÇÔ¼ö Áß ¾î´À ÂÊÀÌ ´ã´çÇÏ´À³Ä ÇÏ´Â °ÍÀÌ´Ù. µÎ¹ø° »çÇ×Àº °ð ¸Å°³ º¯¼öÀÇ °¹¼ö°¡ ÇÊ¿ä¿¡ µû¶ó °¡º¯ÀûÀÏ ¼öµµ ÀÖ´À³Ä ¾Æ´Ï¸é Ç×»ó °íÁ¤ÀûÀÌ³Ä ÇÏ´Â °ÍÀ» ÀǹÌÇϱ⵵ ÇÑ´Ù. Ãß°¡·Î ¾ÆÁÖ ±Ù¼ÒÇÏ°í º¸Åë ¹«½ÃÇÒ ¼ö Àִ ȣÃâ/º¹±Í ó¸® ¼ÓµµÀÇ Â÷À̵µ ÀÖ´Ù. ±×·¯¸é ÀÌÁ¦ºÎÅÍ C ¹æ½Ä ¸Å°³º¯¼ö Àü´Þ ¼ø¼­¿¡ ´ëÇÏ¿© Â÷ºÐÈ÷ ¾Ë¾Æº¸ ±â·Î ÇÏÀÚ. --------------------------------------------------------------------- 7 C ¹æ½Ä ¸Å°³º¯¼ö Àü´Þ ¼ø¼­ - C È£Ãâ °üÇà --------------------------------------------------------------------- ¿¹¸¦ µé¾î ¾Æ·¡¿Í °°Àº ¿øÇü(prototype)À» °¡Áø ÇÔ¼ö°¡ Á¤ÀÇ ¹× ¼±¾ð µÇ¾î ÀÖ´Ù°í Ä¡ÀÚ. ¿©±â¼­ ÇÔ¼ö º»Ã¼(body)´Â ¾Æ¹«·¡µµ »ó°ü¾ø´Ù. ÁÖ¸ñÇÒ °ÍÀº ¸Å°³º¯¼öÀÇ Àü´Þ ¹æ½ÄÀ̳ª±î. void funca(int p1, int p2, long p3); ³»Á¤ÀûÀ¸·Î Åͺ¸ C´Â C ¹æ½Ä ¸Å°³º¯¼ö Àü´Þ ¼ø¼­¿¡ ÀÇÇÑ´Ù. ÀÌ´Â ´Ù¸¥ ¸»·Î "C È£Ãâ °üÇà"À̶ó°íµµ ÈçÈ÷ ÀÏÄ´´Ù. À§ÀÇ ÇÔ¼ö funca°¡ ´ÙÀ½°ú °° ÀÌ È£ÃâµÇ¾úÀ» ¶§, void main(void) { funca(0x1122, 0x3344, 0x55667788); } È£Ãâ ÇÔ¼ö(Áï main)ÂÊÀÇ °¢ ½Ç¸Å°³º¯¼ö 0x1122, 0x3344, 0x55667788Àº "¸ð µÎ" ½ºÅÿ¡ ´ëÇÇ(ÀúÀå)µÈ´Ù. ÀÌ ¶§ ´ëÇÇ ¼ø¼­´Â "¿À¸¥ÂÊ->¿ÞÂÊ"ÀÓ¿¡ À¯ÀÇ Çϱ⠹ٶõ´Ù. ±×·± ´ÙÀ½¿¡ ¸¶Áö¸·À¸·Î º¹±Í ¹øÁö(return address)°¡ ½ºÅà ¿¡ ´ëÇÇµÈ ÈÄ funca·Î ÇÁ·Î±×·¥ Á¦¾î°¡ ¿Å°ÜÁø´Ù. ÀÚ, ±×·± ¿¬ÈÄ¿¡ ½ºÅÃÀº ¾î¶»°Ô µÇ¾úÀ»±î? Áï º¹±Í ¹øÁö°¡ ´ëÇÇµÈ " Á÷ÈÄ"¿¡ ¸»ÀÌ´Ù(º¹±Í ¹øÁö°¡ ´ëÇÇµÈ ÀÌÈÄ¿¡µµ È£Ãâ ±ÔÄ¢¿¡ µû¸¥ Ãß°¡ÀûÀÎ ´ëÇÇ°¡ °è¼ÓÇؼ­ À̾îÁö¹Ç·Î À¯ÀÇÇÒ °Í). <±×¸² 1-1> ±Ù°Å¸® È£Ãâ½Ã ½ºÅÃÀÇ ³»¿ë --------------------------------------------------------------------- »óÀ§ ¹øÁö ´ëÇÇ ¼ø¼­ | | SP + 8: 0x5566 -+- ¼¼¹ø° ½Ç¸Å°³º¯¼ö | | SP + 6: 0x7788 -+ | | SP + 4: 0x3344 --- µÎ¹ø° ½Ç¸Å°³º¯¼ö | | SP + 2: 0x1122 --- ù¹ø° ½Ç¸Å°³º¯¼ö | | SP + 0: º¹±Í ¹øÁö(2¹ÙÀÌÆ®) ÇÏÀ§ ¹øÁö --------------------------------------------------------------------- <±×¸² 1-2> ½ÇÁ¦ ½ºÅÃÀÇ »óȲ(¹ÙÀÌÆ® ´ÜÀ§ÀÇ ±¸Á¶) --------------------------------------------------------------------- SP SP+2 SP+4 SP+6 SP+8 +----------+---+---+---+---+---+---+---+---+ | º¹±Í¹øÁö | 22| 11| 44| 33| 88| 77| 66| 55| +----------+---+---+---+---+---+---+---+---+ --ÇÏÀ§ ¹øÁö »óÀ§ ¹øÁö-- --------------------------------------------------------------------- <±×¸² 1-3> ½ÇÁ¦ ½ºÅÃÀÇ »óȲ(¿öµå ´ÜÀ§ÀÇ ±¸Á¶) --------------------------------------------------------------------- SP 0x55667788 +-------------+ +----------+-------+-------+-------+-------+ | º¹±Í¹øÁö | 0x1122| 0x3344| 0x7788| 0x5566| +----------+-------+-------+-------+-------+ --ÇÏÀ§ ¹øÁö »óÀ§ ¹øÁö-- --------------------------------------------------------------------- <±×¸² 2> ¿ø°Å¸®/°Å´ë È£Ãâ½Ã ½ºÅÃÀÇ ³»¿ë --------------------------------------------------------------------- »óÀ§ ¹øÁö ´ëÇÇ ¼ø¼­ | | SP + 10: 0x5566 -+- ¼¼¹ø° ½Ç¸Å°³º¯¼ö | | SP + 8: 0x7788 -+ | | SP + 6: 0x3344 --- µÎ¹ø° ½Ç¸Å°³º¯¼ö | | SP + 4: 0x1122 --- ù¹ø° ½Ç¸Å°³º¯¼ö | | SP + 0: º¹±Í ¹øÁö(4¹ÙÀÌÆ®) ÇÏÀ§ ¹øÁö --------------------------------------------------------------------- ¿©±â¼­ ÁÖÀÇÇÒ Á¡Àº ù°, ½ºÅÃÀº »óÀ§ ¹øÁöÂÊ¿¡¼­ ÇÏÀ§ ¹øÁöÂÊÀ¸·Î ¼ºÀå(SP°¡ °¨¼Ò)ÇÑ´Ù´Â °ÍÀÌ°í µÑ°, 8086°è CPUÀÎ Å¿¿¡ 2¹ÙÀÌÆ® ÀÌ»óÀÇ Å©±â¸¦ °¡Áö´Â µ¥ÀÌŸ´Â ¿ª¿öµå(reverse word) ¹æ½Ä¿¡ ÀÇÇØ Ç×»ó ÇÏÀ§ ¹Ù ÀÌÆ®ºÎÅÍ ¸Þ¸ð¸®¿¡ Â÷·Ê´ë·Î ÀúÀåµÈ´Ù´Â Á¡ÀÌ´Ù. µû¶ó¼­ 4¹ÙÀÌÆ® Å©±âÀÇ ½Ç¸Å°³º¯¼öÀÎ 0x55667788Àº <±×¸² 1-2>¿¡¼­¿Í °°ÀÌ 0x88, 0x77, 0x66, 0x5 5ÀÇ ¼øÀ¸·Î ¸Þ¸ð¸®¿¡ ÀúÀåµÇ´Ï Âø¿À¾ø±â ¹Ù¶õ´Ù. ÀÚ, ÀÌÁ¦ C È£Ãâ °üÇà¿¡¼­ ¶Ç ÇϳªÀÇ Áß¿äÇÑ »ç½ÇÀ» ¼³¸íÇÏ°Ú´Ù. ±×°Í Àº ¹Ù·Î "ÇÇÈ£Ãâ ÇÔ¼ö´Â ½ºÅÿ¡ ´ëÇǵǾî ÀÖ´Â ½Ç¸Å°³º¯¼öÀÇ °³¼ö¸¦ ÀüÇô ¾Ë ¼ö°¡ ¾ø´Ù"´Â Á¡ÀÌ´Ù. Áï ¿øÄ¢ÀûÀ¸·Î ºÒ°¡´ÉÇÏ´Ù. ´ë½Å¿¡ ÇÇÈ£Ãâ ÇÔ¼öÀÇ ÀÔÀå¿¡¼­´Â "ÇÊ¿äÇÑ ¸¸Å­ÀÇ ½Ç¸Å°³º¯¼ö°¡ ´ëÇÇ µÇ¾î ÀÖ´Ù"°í °¡Á¤ÇÒ ¼ö¹Û¿¡ ¾ø´Ù. ¹Ù²ã ¸»ÇÏ¸é ½Ç¸Å°³º¯¼ö°¡ Çü½Ä¸Å°³º¯ ¼öÀÇ °³¼öº¸´Ù ¸ðÀÚ¶ó°Å³ª ³²¾Æµ¹´õ¶óµµ ÇÇÈ£Ãâ ÇÔ¼ö´Â µü ¸Â´Â °³¼ö¸¸Å­ ÀÌ ÀÖ´Ù´Â °¡Á¤ÇÏ¿¡¼­ ¸ðµç ÀÏÀ» ó¸®ÇÑ´Ù. ÀÌ´Â C È£Ãâ °üÇàÀÇ °æ¿ì ÇÇÈ£Ãâ ÇÔ¼ö°¡ ¾Æ´Ñ È£Ãâ ÇÔ¼ö ÂÊ¿¡¼­ SPÀÇ º¹±¸¸¦ ´ã´çÇϱ⠶§¹®¿¡ ÆÄ»ýµÇ´Â °á°úÀÌ´Ù. Áï ½ºÅÿ¡ ´ëÇǵǾî ÀÖ´Â ½Ç ¸Å°³º¯¼öµé¸¸Å­ÀÇ º¹±¸(pop)¸¦ È£Ãâ ÇÔ¼ö ÂÊ¿¡¼­ ´ã´çÇÑ´Ù. ´ÙÀ½ <¸®½ºÆ® 2>ÀÇ ¸Ç ¸¶Áö¸· Çà¿¡ ÀÖ´Â add sp,8 ¸í·É¿¡ ÁÖ¸ñÇϱ⠹ٶõ´Ù. <¸®½ºÆ® 2> funca¸¦ È£ÃâÇÏ´Â ¾î¼Àºí¸® ÄÚµå --------------------------------------------------------------------- mov dx,21862 --- 0x5566 mov ax,30600 --- 0x7788 push dx --+------- ¸¶Áö¸· ½Ç¸Å°³º¯¼ö¸¦ ´ëÇÇ push ax --+ mov ax,13124 --- 0x3344 push ax ---------- µÎ¹ø°¸¦ ´ëÇÇ mov ax,4386 --- 0x1122 push ax ---------- ù¹ø°¸¦ ´ëÇÇ call near ptr _funca add sp,8 --- popÀ» 4¹ø ÇàÇÑ °Í°ú °°Àº È¿°ú¸¦ °¡Á®¿Â´Ù. --------------------------------------------------------------------- <¸®½ºÆ® 2>¸¦ º¸¸é ½ºÅÃÀÇ º¹±¸¸¦ È£Ãâ ÇÔ¼ö ÂÊ(main ÇÔ¼ö)¿¡¼­ ´ã´ç ÇÑ´Ù´Â °ÍÀ» ´«À¸·Î È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸»À» ¹Ù²Ù¸é ½ºÅÃÀÇ º¹±¸¸¦ ÇÇÈ£Ãâ ÇÔ¼ö ÂÊ¿¡¼­ ÇàÇϸé Àý´ë·Î ¾È µÈ´Ù°íµµ ÇÒ ¼ö ÀÖ´Ù. ÆĽºÄ®¿¡¼­ ¾î¼Àºí¸® ¸µÅ©¸¦ Çغ» µ¶ÀÚ´Â Çò°¥¸®Áö ¾Êµµ·Ï ƯÈ÷ Á¶½ÉÇØ¾ß ÇÑ´Ù. Áï re t ¸í·É¿¡ ¼ýÀÚ¸¦ ÁöÁ¤Çϸé Àý´ë·Î ¾È µÈ´Ù. Âü°í·Î ½ºÅÃÀ» º¹±¸ÇÒ ¶§ pop ¸í·ÉÀ» 4¹ø ¾²´Â ´ë½Å add sp,8À» ¾´ °Í Àº ó¸® ¼Óµµ»óÀÇ ÀÌÁ¡ ¶§¹®ÀÌ´Ù. <¸®½ºÆ® 1>¿¡¼­ add sp,4 ´ë½Å¿¡ pop ¸í ·ÉÀ» µÎ ¹ø ¾´ °Íµµ °°Àº ÀÌÀ¯¿¡¼­´Ù. <Ç¥ 1> C È£Ãâ °üÇà°ú ÆĽºÄ® È£Ãâ °üÇàÀÇ Â÷ÀÌÁ¡ -----------------+------------------+-------------------- | C È£Ãâ °üÇà | ÆĽºÄ® È£Ãâ °üÇà -----------------+------------------+-------------------- ¸Å°³º¯¼ö | ¿À¸¥ÂÊ¿¡¼­ ¿ÞÂÊ | ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊ Àü´Þ ¼ø¼­ | (¸¶Áö¸·ºÎÅÍ) | (ù¹ø°ºÎÅÍ) | | ½ºÅÃÀÇ º¹±¸ | È£Ãâ ÇÔ¼ö°¡ ´ã´ç | ÇÇÈ£Ãâ ÇÔ¼ö°¡ ´ã´ç | | ¸Å°³º¯¼öÀÇ °³¼ö | °¡º¯ÀûÀÏ ¼ö ÀÖÀ½ | Ç×»ó °íÁ¤Àû -----------------+------------------+-------------------- --------------------------------------------------------------------- 8 ¹Ýȯ°ª(return value)ÀÇ Ã³¸® --------------------------------------------------------------------- ÇÇÈ£Ãâ ÇÔ¼ö°¡ ÀÏÀ» ¸¶Ä¡°í º¹±ÍÇÒ ¶§ ¹Ýȯ°ªÀº °ú¿¬ ¾î¶°ÇÑ ¹æ½ÄÀ¸·Î ÀÚ½ÅÀ» È£ÃâÇÑ ÇÔ¼ö¿¡ µÇµ¹·Á ÁÙ±î? ±×°ÍÀº ¾Æ·¡¿Í °°Àº ±ÔÄ¢¿¡ ÀÇÇÑ´Ù. --------------------------------------------------------------------- [1] 2¹ÙÀÌÆ® Å©±â ÀÌÇÏÀÇ µ¥ÀÌÅÍÇü: AX¿¡ ÀúÀåÇÑ´Ù. char, unsigned char, int, unsigned, enum, ±Ù°Å¸® Æ÷ÀÎÅÍ µî [2] 4¹ÙÀÌÆ® Å©±âÀÇ µ¥ÀÌÅÍÇü: DX:AX¿¡ ÀúÀåÇÑ´Ù. (DX¿¡ »óÀ§ 2¹ÙÀÌÆ®¸¦, AX¿¡ ÇÏÀ§ 2¹ÙÀÌÆ®¸¦) long, unsigned long, ¿ø°Å¸® Æ÷ÀÎÅÍ, °Å´ë Æ÷ÀÎÅÍ µî [3] ºÎµ¿Çü: 80x87ÀÇ TOS ·¹Áö½ºÅÍ, Áï ST(0)¿¡ ÀúÀåÇÑ´Ù. ´Ü, 80x87À» ¿¡¹Ä·¹ÀÌÆ®ÇÏ´Â °æ¿ì ¿¡¹Ä·¹ÀÌÅÍÀÇ TOS ·¹Áö½ºÅÍ¿¡ ÀúÀåÇÑ´Ù. float, double, long double µî [4] ±¸Á¶Ã¼/°ø¿ëü¸¦ Åëä·Î ¸®ÅÏÇÏ´Â °æ¿ì: µû·Î Àü¿ëÀ¸·Î ¸¶·ÃµÈ Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª¿¡ °á°ú¸¦ ÀúÀåÇÑ ´ÙÀ½ ±× ¿µ¿ªÀ» °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ AX ¶Ç´Â DX:AX¿¡ ³Ö¾î µÇµ¹¿© ÁØ´Ù. --------------------------------------------------------------------- ´ë°³ÀÇ °æ¿ì ¾î¼Àºí¸®¿ÍÀÇ ¸µÅ©¿¡¼­ ÁÖ·Î ¾²ÀÌ´Â °ÍÀº ¾Æ¹«·¡µµ [1]¹ø ¶Ç´Â [2]¹ø ¹æ½ÄÀ̸ç, <¿¹Á¦ 2>¿¡¼­´Â [1]¹ø ¹æ½ÄÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. --------------------------------------------------------------------- 9 ÇÔ¼ö¸í¿¡ µ¡ºÙ´Â ¹ØÁÙ¹®ÀÚÀÇ ÀÇ¹Ì --------------------------------------------------------------------- Áö±Ý±îÁöÀÇ ¿¹Á¦µéÀ» º¸¸é C ¿ø½Ã ÄÚµåÀÇ ÇÔ¼ö¸í¿¡´Â ¾ÈºÙ´ø ¹ØÁÙ¹® ÀÚ°¡ ¾î¼Àºí¸® ÄÚµåÀÇ ÇÔ¼ö¸í ¾Õ¿¡ µ¡ºÙ¿©Á® ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °Í ÀÌ´Ù. ¿¹¸¦ µé¾î main ÇÔ¼öÀÇ ¾î¼Àºí¸® Äڵ忡´Â ±× ÇÔ¼ö¸íÀÌ _mainÀ¸·Î µÇ¾î ÀÖ´Ù. »ç½Ç Åͺ¸ C¿¡¼­´Â ÇÔ¼ö¸íÀÌ ¾î¼Àºí¸® ÄÚµå·Î ÄÄÆÄÀ쵃 ¶§¿¡ Ç×»ó ±× ¾Õ¿¡ ¹ØÁÙ¹®ÀÚ°¡ µ¡ºÙ¿©Áöµµ·Ï µÇ¾î ÀÖ´Ù. ±× ÀÌÀ¯´Â º¼·£µå¿¡¼­ °ø½ÄÀûÀ¸ ·Î ¹ßÇ¥ÇÑ ¹Ù ¾øÀ¸³ª, ÃßÃøÄÁ´ë Åͺ¸ CÀÇ ³»ºÎ ·çƾÀÌ Á÷Á¢ÀûÀ¸·Î È£ÃâµÇ ´Â °ÍÀ» ¸·±â À§ÇÑ °ÍÀ¸·Î º¸ÀδÙ. objxref.exe À¯Æ¿¸®Æ¼¸¦ ½á¼­ Åͺ¸ C Ç¥ÁØ ¶óÀ̺귯¸®¸¦ µÚÀû°Å·Á º¸ ¸é ´ë¼Ò¹®ÀÚ°¡ ¸¶±¸ ¼¯¿© ÀÖ´Â ±«»óÇÑ À̸§ÀÇ ÇÔ¼ö(½ÇÁ¦·Î´Â Á¤½Ä ÇÔ¼öµµ ¾Æ´Ô)µéÀÌ ¸¹ÀÌ º¸À̴µ¥ À̵éÀº ´ëºÎºÐ ¼±µÎ¿¡ ¹ØÁÙ¹®ÀÚ¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù. ±×°ÍÀº ¼Óµµ/Å©±â ¹®Á¦·Î ÀÎÇØ C È£Ãâ °üÇàÀ» ÁöÅ°Áö ¾ÊÀº ÀÏÁ¾ÀÇ ¾î¼Àºí¸® ¼­ºê·çƾÀ̱⠶§¹®ÀÌ´Ù. µû¶ó¼­ À̵éÀ» CÂÊ¿¡¼­ Á÷Á¢ È£ÃâÇϸé ÇÁ·Î±×·¥ÀÌ ÆøÁÖÇÏ°Ô µÇ¹Ç·Î ±×·¯Áö ¸øÇϵµ·Ï ¸ðµç C ÇÔ¼ö¸í¿¡´Â ÀÚµ¿ÀûÀ¸ ·Î ¼±µÎ¿¡ ¹ØÁÙ¹®ÀÚ°¡ µ¡ºÙµµ·Ï ÇÑ °Í °°´Ù. ¹°·Ð ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» Á¶Á¤ÇÏ¸é ¹ØÁÙ¹®ÀÚ¸¦ Á¦°ÅÇÒ ¼öµµ ÀÖÁö¸¸, ±×°Í Àº Åͺ¸ ÆĽºÄ®°ú ¸µÅ©ÇÒ ¶§¿¡³ª ÇÊ¿äÇÑ Á¶Ä¡À̹ǷΠÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«ÇÏ °Ú´Ù. --------------------------------------------------------------------- 10 ¼ÒÇü ¸ðµ¨¿¡¼­ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- Áö³­ ´Þ¿¡ ¼Ò°³Çß´ø ¸Þ¸ð¸® Áöµµ ¿¹Á¦¿¡ ´ëÇÑ ¼³¸íÀ» °è¼ÓÇÏÀÚ¸é ´ÙÀ½ °ú °°´Ù. * º¯¼ö ¼³¸í(¼ÒÇü ¸ðµ¨¿¡ ÇØ´çÇÏ´Â ³»¿ëÀÓ!!) _heaplen: ±Ù°Å¸® ÈüÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ³ªÅ¸³½´Ù. 0ÀÇ °ªÀ» °¡Áö¸é µ¥ÀÌ ÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â°¡ Á¤È®È÷ 64k¹ÙÀÌÆ®°¡ µÇµµ·Ï ±Ù°Å¸® Èü ÀÇ Å©±â°¡ ÀÚµ¿À¸·Î °áÁ¤µÈ´Ù. µû¶ó¼­ ±Ù°Å¸® ÈüÀÇ ÃÖ¼Ò Å©±â ´Â 1¹ÙÀÌÆ®°¡ µÈ´Ù. _stklen: ½ºÅà ¿µ¿ªÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ³ªÅ¸³½´Ù. ³»Á¤Ä¡´Â 4k¹ÙÀÌÆ®(409 6)ÀÌ´Ù. ±×·¯³ª ÀÌ º¯¼ö°¡ ½ºÅÃÀÇ Å©±â¸¦ 4k¹ÙÀÌÆ®·Î Á¦ÇÑÇÏ Áö´Â ¸øÇÑ´Ù. ¿¹¸¦ µé¾î 4k¹ÙÀÌÆ®°¡ ³Ñ´Â ÀÚµ¿¹è¿­À» Á¤ÀÇÇØ µµ ½ÇÇà½Ã ¿¡·¯°¡ ³ªÁö ¾Ê´Â´Ù. ´Ù¸¸ _heaplen°ú ÇÔ²² µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â¸¦ °áÁ¤ÇÏ´Â µ¥ ¾²ÀδÙ. _psp: PSPÀÇ ¼¼±×¸ÕÆ®°ªÀ» °¡Áø´Ù. PSP¿¡ °üÇÑ ¼³¸íÀº Áö¸é»ó »ý·« ÇÏ°Ú´Ù. ´Ù¸¸ ¿É¼Â 0x0002ÀÇ À§Ä¡¿¡ ¸Þ¸ð¸® ÃÖ»ó´ÜÀÇ ¼¼±×¸Õ Æ®°ª(640k ½Ã½ºÅÛ¿¡¼­´Â 0xa000)ÀÌ ÀúÀåµÇ¾î ÀÖ´Ù´Â °Í¸¸ ¾Ë ¾Æ µÎ¸é ÇÁ·Î±×·¥À» ÀÌÇØÇÏ´Â µ¥¿¡´Â º° ÁöÀåÀÌ ¾øÀ» °ÍÀÌ´Ù. __heapbase: ±Ù°Å¸® ÈüÀÇ ÃÖÇÏÀ§ ¹øÁö(Áï º£À̽º)¸¦ °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ¸»À» ¹Ù²Ù¸é Á¤Àû µ¥ÀÌÅÍ ¿µ¿ª Á÷Èĸ¦ °¡¸®Å°´Â Æ÷ÀÎÅͶó°íµµ ÇÒ ¼ö ÀÖ´Ù. __heaptop: ±Ù°Å¸® ÈüÀÇ ÇöÀç ÃÖ»ó´ÜÀ» °¡¸®Å°´Â Æ÷ÀÎÅÍÀÌ´Ù. ÇÁ·Î±×·¥ ½ÇÇà Á÷ÈÄ¿¡´Â µ¿ÀûÀ¸·Î ±Ù°Å¸® ÈüÀÌ ÇÒ´çµÈ °ÍÀÌ Çϳªµµ ¾øÀ» ÅÍÀ̹ǷΠ__heapbase¿Í µ¿ÀÏÇÑ °ªÀ» °®´Â´Ù. _heapbase: ¿ø°Å¸® ÈüÀÇ ÃÖÇÏ´ÜÀ» °¡¸®Å°´Â ¿ø°Å¸® Æ÷ÀÎÅÍÀÌ´Ù. ¿ø°Å¸® ÈüÀº Ç×»ó ¼¼±×¸ÕÆ® °æ°è¿¡¼­ ½ÃÀÛÇϸç, ¶ÇÇÑ _heapbase´Â Á¤ ±ÔÈ­µÇ¾î ÀÖÀ¸¹Ç·Î ±× ¿É¼Â(ÇÏÀ§ 2¹ÙÀÌÆ®)Àº Ç×»ó 0x0000ÀÌ ´Ù. _heaptop: ¿ø°Å¸® ÈüÀÇ ÃÖ»ó´ÜÀ» °¡¸®Å°´Â ¿ø°Å¸® Æ÷ÀÎÅÍÀÌ´Ù. ÁÖÀÇÇÒ »çÇ×Àº __heaptop°ú´Â ´Þ¸® _heaptopÀº ¸Þ¸ð¸®ÀÇ ÃÖ»ó´ÜÀ» °¡ ¸®Å²´Ù´Â Á¡ÀÌ´Ù. µû¶ó¼­ 640k¹ÙÀÌÆ® ½Ã½ºÅÛ¿¡¼­´Â Ç×Ç× A00 0:0000ÀÇ °ªÀ» °®°Ô µÈ´Ù. Âü°í·Î __heapbase, __heaptop, _hearbase, _heaptop µîÀº Åͺ¸ C ¸Å ´º¾ó¿¡ ¼³¸íµÇ¾î ÀÖÁö ¾ÊÀ¸¸ç, _heaplen, _stklen, _psp´Â Turbo C Refere nce GuideÀÇ 28, 30, 29ÂÊ¿¡ »ó¼¼È÷ ¼³¸íµÇ¾î ÀÖ´Ù. ¶ÇÇÑ ¸Å´º¾ó¿¡ ¼³¸íµÇ¾î ÀÖÁö´Â ¾ÊÁö¸¸, _heaplen°ú _stklen º¯¼ö¿¡ °ªÀ» ÁöÁ¤ÇÒ ¶§¿¡´Â <¿¹Á¦ 3>ó·³ ¹Ýµå½Ã ¿ÜºÎº¯¼öÀÇ ÃʱâÈ­ Çü½ÄÀ̾î¾ß Çϴµ¥ ÁÖÀÇÇϱ⠹ٶõ´Ù. ÇÁ·Î±×·¥ ½ÇÇà ÈÄ ¾î¶² °ªÀ» ´ëÀÔÇÏ´Â °ÍÀº ¾Æ¹« Àǹ̵µ ¾ø´Ù. ±×°ÍÀº ±× º¯¼öµéÀ» ÂüÁ¶ÇÏ´Â ·çƾÀÌ main ÇÔ¼ö°¡ È£ÃâµÇ±â ÀÌÀüÀÇ ±âµ¿ ÄÚµå(startup code)À̱⠶§¹®ÀÌ´Ù. * ¼ÒÇü µ¥ÀÌÅÍ ¸ðµ¨¿¡¼­ µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â¸¦ °áÁ¤ÇÏ´Â °ø½Ä void *ptr; unsigned DSsize; --- Æз¯±×·¡ÇÁ ´ÜÀ§ÀÇ Å©±â if (_heaplen == 0) DSsize = 0x1000; --- ȯ»êÇϸé 65536¹ÙÀÌÆ® else { ptr = (char *)__heapbase + _stklen + _heaplen; DSsize = ((unsigned)ptr >> 4) + 1; } Âü°í: ÀÌ °ø½ÄÀº ±âµ¿ ÄÚµå c0.asmÀ» ºÐ¼®Çؼ­ ¾òÀº °ÍÀÓ. * ·¥»óÁÖ ÇÁ·Î±×·¥(ÃʼÒÇü ¶Ç´Â ¼ÒÇü ¸ðµ¨)¿¡¼­ »óÁÖ Å©±â(keep size)¸¦ ±¸ÇÏ´Â °ø½Ä 2°¡Áö +- unsigned keepsize; --- »óÁÖ Å©±â +- unsigned CSsize; --- ÄÚµå ¼¼±×¸ÕÆ®ÀÇ Å©±â | +----------------------- Æз¯±×·¡ÇÁ ´ÜÀ§ keepsize = FP_SEG(_heapbase) - _psp; --- °¡Àå °£´ÜÇÑ °ø½Ä (¸ðµç ¸ðµ¨¿¡¼­ Åë¿ë) ¶Ç´Â(ÃʼÒÇü/¼ÒÇü ¸ðµ¨¿¡¼­) CSsize = _DS - _CS; --- ÃʼÒÇü ¸ðµ¨¿¡¼­´Â Ç×»ó 0 keepsize = 0x10 + CSsize +DSsize; | +-- PSPÀÇ Å©±â À§ÀÇ »óÁÖ Å©±â´Â ·¥»óÁÖ ÇÁ·Î±×·¥¿¡¼­ ¾Æ·¡¿Í °°ÀÌ ¾²ÀδÙ. keep(0, keepsize); ¸¸¾à _heaplenÀÌ 0(³»Á¤Ä¡)À̶ó¸é µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®ÀÇ Å©±â°¡ 65536¹Ù ÀÌÆ®·Î °áÁ¤µÇ¹Ç·Î ±¸Å¿© º¹ÀâÇÑ °ø½Ä ¾µ ÇÊ¿ä ¾øÀÌ °£´ÜÇÏ°Ô keep(0, 0x 1000)À̶ó°í Çصµ µÈ´Ù. <¿¹Á¦ 3> ¼ÒÇü ¸Þ¸ð¸® ¸ðµ¨ÀÇ ¸Þ¸ð¸® Áöµµ --------------------------------------------------------------------- /* File MEMMODEL.C */ #include #include #include #pragma warn -par /* off warning */ unsigned _heaplen = 0x0001; /* minimum value */ /* if _heaplen == 0 or _heaplen is too large, this program will output wrong results */ unsigned _stklen = 0x0250; /* minimum value is 0x0200 when the software emulation for the floating point operation */ extern unsigned _psp; /* program segment prefix */ /* declared in dos.h */ extern void *__heapbase; /* a pointer to the near heap base */ extern void *__heaptop; extern void far *_heapbase; /* a pointer to the far heap base */ extern void far *_heaptop; void main(int argc, char *argv[], char **env) { unsigned CSsize; /* code segment size in paragraph(small model) */ unsigned DSsize; /* data segment size in paragraph */ unsigned StartingSP; /* initial value of SP */ unsigned farheap; /* segment of the far heap base pointer */ unsigned keepsize; /* calculated keep size in paragraph, i.e. total program size */ void *ptr; void far *topofmem; /* far pointer to the top of the memory */ CSsize = _DS - _CS; /* when small model */ ptr = (char *)__heapbase + _stklen + _heaplen; DSsize = ((unsigned)ptr >> 4) + 1; StartingSP = DSsize << 4; farheap = FP_SEG(_heapbase); /* get segment of the _heapbase */ keepsize = farheap - _psp; /* print the structure of the small memory model */ printf("Porgram segment prefix == %#06x\n", _psp); printf("Code segment == %#06x\n", _CS); printf("Data segment == %#06x\n", _DS); printf("Stack segment == %#06x\n", _SS); printf("Extra segment == %#06x\n", _ES); printf("Offset of static data area to DS == 0x0000\n"); printf("Offset of near heap base to DS == %#06x\n", __heapbase); printf("Offset of near heap top to DS == %#06x\n", __heaptop); printf("Current stack pointer == %#06x\n", _SP); /* print the initial value of SP calculated by three different methods */ printf("Initial value of SP == %#06x\n", StartingSP); printf(" == %#06x(other method)\n", (farheap - _DS) << 4); /* print the map of the far heap */ topofmem = MK_FP(*(unsigned far *)MK_FP(_psp, 0x0002), 0x0000); printf("Far heap base == %Fp\n", _heapbase); printf("Far heap top == %Fp\n", _heaptop); printf("Top of memory == %Fp\n\n", topofmem); /* print sizes */ printf("CS size == %#06x paragraph\n", CSsize); printf("DS size == %#06x paragraph(including stack)\n", DSsize); printf("Keep size == %#06x paragraph\n", keepsize); printf(" == %#06x(other method)\n", 0x10 + CSsize + DSsize); printf("Free space in near heap == %#06x byte(including stack area)\n", _SP - (unsigned)__heaptop + 1); printf("Free space in far heap == %ld byte\n", (unsigned long)(FP_SEG(_heaptop) - FP_SEG(_heapbase)) << 4); printf(" == %ld byte(other method)\n", (unsigned long)(FP_SEG(topofmem) - FP_SEG(_heapbase)) << 4); /* for a TSR program "keep(0, keepsize);" is required before quit program */ } --------------------------------------------------------------------- ½ÇÇà °á°ú (Åͺ¸ C 2.0¿¡¼­ ÄÄÆÄÀÏÇÏ¿© µµ½º ÇÁ·ÒÇÁÆ®»ó¿¡¼­ ½ÇÇà) Porgram segment prefix == 0x16c2 Code segment == 0x16d2 Data segment == 0x1822 Stack segment == 0x1822 Extra segment == 0x1822 Offset of static data area to DS == 0x0000 Offset of near heap base to DS == 0x076e Offset of near heap top to DS == 0x076e Current stack pointer == 0x098a Initial value of SP == 0x09c0 == 0x09c0(other method) Far heap base == 18BE:0000 Far heap top == A000:0000 Top of memory == A000:0000 CS size == 0x0150 paragraph DS size == 0x009c paragraph(including stack) Keep size == 0x01fc paragraph == 0x01fc(other method) Free space in near heap == 0x021d byte(including stack area) Free space in far heap == 554016 byte == 554016 byte(other method) --------------------------------------------------------------------- --------------------------------------------------------------------- 11 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- º°·Î ÇÑ ¾ê±âµµ ¾ø´Âµ¥ ¹ú½á À̹ø ±ÛÀÇ ³¡¸ÎÀ½À» ÇÒ ¶§°¡ µÈ °Í °°´Ù. ÇѲ¨¹ø¿¡ ³Ê¹« ¸¹Àº ¾ê±â¸¦ Çϸé Áö·çÇÒ °Í °°¾Æ ÀÌÂë¿¡¼­ Àϴܶô Áö¾ú´Ù. ´ÙÀ½ ´Þ¿¡´Â À̹ø °­ÁÂÀÇ ÇÙ½ÉÀÎ C¿Í ¾î¼Àºí¸® ·çƾÀÇ Á¢¼Ó(interface)¿¡ ´ëÇÏ¿© º»°ÝÀûÀ¸·Î ¼³¸íÀ» ÇØ ³ª°¡°Ú´Ù. <Á¦3ȸ ³¡>  #52 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷4-1: ¾î¼Àºí¸® ÄÚµå Á¢¼Ó I 05/06 00:16 491 line ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1990.8 HWP/TXT º¯È¯: 1993.5.5 >>> Åͺ¸ CÀÇ ±íÀº °÷ <<< Á¦4ȸ ¾î¼Àºí¸® ÄÚµå Á¢¼Ó Assembly Code Interface ±Û/ÀÓÀ롂 (¼­¿ï´ë ±â°è°øÇаú4) --------------------------------------------------------------------- 1 º»¹®¿¡ ¾Õ¼­ --------------------------------------------------------------------- ÀÌÁ¦±îÁö µ¶ÀÚ ¿©·¯ºÐ°ú ÇÔ²² Å©°Ô ¼¼ °¡Áö¸¦ ¾Ë¾Æº¸¾Ò´Ù. Çϳª´Â ÅÍ º¸ C°¡ Á¦°øÇÏ´Â °¢Á¾ ¸Þ¸ð¸® ¸ðµ¨ÀÇ ±¸Á¶ÀÌ°í, ´Ù¸¥ Çϳª´Â ÇÔ¼ö È£Ãâ ¹æ ½ÄÀ̸ç, ³ª¸ÓÁö Çϳª´Â C È£Ãâ °üÇà(C ¹æ½Ä ¸Å°³º¯¼ö Àü´Þ ¹æ½Ä)À̾ú´Ù. ±×¸®°í ±× C È£Ãâ °üÇàÀÌ ½ÇÁ¦·Î ¾î¼Àºí¸® ¼öÁØ¿¡¼­ ¾î¶»°Ô ±¸ÇöµÇ´Â°¡¿¡ ´ëÇØ °¨À» Àâ±â À§ÇÑ ¿¹µµ Á¢ÇØ º¸¾Ò´Ù. À̹ø ´Þ¿¡´Â °è¼ÓÇؼ­ ¾î¼Àºí¸® ÄÚµå¿Í C ·çƾ°úÀÇ Á¢¼Ó(interface)À» À§ÇØ ¾î¼Àºí¸® ¸ðµâ ÂÊ¿¡¼­ °ú¿¬ ¾î¶°ÇÑ Á¶Ä¡°¡ ÃëÇØÁ®¾ß Çϴ°¡¿¡ °üÇÑ °®°¡Áö ±ÔÄ¢µéÀ» »ó¼¼È÷ ¾Ë¾Æº¸µµ·Ï ÇÏ°Ú´Ù. À̹ø ¿¬ÀçÀÇ °¡Àå ÇٽɵǴ ºÎºÐÀÌ º»°ÝÀûÀ¸·Î ½ÃÀ۵ǹǷΠÁÖÀÇ ±í°Ô ÀÐ¾î ³ª°¬À¸¸é ÇÑ´Ù. Àú¹ø ´Þ±î Áö´Â ¼­·Ð¿¡ ºÒ°úÇÏ´Ù. Âü°í·Î À̹ø ±Û¿¡¼­´Â µ¶ÀÚ°¡ 8086°è¿­ ¾î¼Àºí¸®¿¡ ´ëÇÏ¿© ÃæºÐÇÑ »ç Àü Áö½ÄÀ» °¡Áö°í ÀÖ´Ù´Â °¡Á¤ÇÏ¿¡ ÁøÇàÇÒ °ÍÀÌ´Ù. Áï °¢Á¾ 8086 ¸í·É¾îµé Àº ¹°·ÐÀÌ°í DW, DD, PUBLIC, EXTRN, SEGMENT, GROUP µî ¾î¼Àºí·¯ÀÇ ÁÖ¿ä ÇÑ °¢Á¾ Áö½ÃÀÚ(directive)ÀÇ »ç¿ë¹ý¿¡ °ü·ÃµÈ ÃæºÐÇÑ Áö½Äµéµµ ¿äÇÑ´Ù. ¸¸¾à ÀÌ¿¡ ´ëÇÑ Áö½ÄÀÌ ºÒÃæºÐÇÏ´Ù¸é ÇØ´ç ¾î¼Àºí¸® °ü·Ã ¼­ÀûµéÀ» Âü°íÇÏ ±â ¹Ù¶õ´Ù. --------------------------------------------------------------------- 2 ¾î¼Àºí¸® ÄÚµå Á¢¼Ó °³¿ä --------------------------------------------------------------------- ¾î¼Àºí¸® ·çƾÀº C¿¡¼­ º¼ ¶§ Àüü ÇÁ·Î±×·¥ÀÇ ÀϺκÐÀ¸·Î¼­ ¸µÅ©µÉ ÇϳªÀÇ µ¶¸³µÈ ¸ðµâ·Î °£ÁֵȴÙ. ±×·¡¼­ ¾î¼Àºí¸® ·çƾÀº ¾î¼Àºí¸® ¸ðµâÀÌ ¶ó°íµµ ºÒ¸®¸ç, ±× ¾î¼Àºí¸® ¸ðµâÀÌ ¸µÄ¿¿¡ ÀÇÇØ Àû¹ýÇÑ C ¸ðµâ·Î ÀÎ½ÄµÇ ±â À§ÇÑ °®°¡Áö °üÇà(±ÔÄ¢)µéÀÌ ÁöÄÑÁ®¾ß Çϴµ¥, ±×°ÍÀº ´ë·« ´ÙÀ½°ú °° ´Ù. [1] ¾î¼Àºí¸® ¸ðµâÀº Ÿ ¸ðµâ°úÀÇ Á¢¼ÓÀ» À§ÇØ ¸µÄ¿°¡ ÇÊ¿ä·Î ÇÏ´Â ¸ðµç Á¤º¸¸¦ ¿ÏÀüÇÏ°Ô Á¦°øÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î °¢Á¾ "¿ÜºÎ¸íĪ(external identifier)¿¡ °ü·ÃµÈ Á¤º¸" µîÀ» ¼¼¼¼ÇÏ°í Ʋ¸²¾øÀÌ ±â¼úÇØ Áà¾ß ÇÑ ´Ù. [2] Á¤ÇØÁø ¸Þ¸ð¸® ¸ðµ¨ÀÇ ±¸Á¶¸¦ À¯ÁöÇϱâ À§ÇÑ "¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢"ÀÌ Ã¶ÀúÇÏ°í ÀÏ°üµÇ°Ô ÁöÄÑÁ®¾ß ÇÑ´Ù. Áï ÇϳªÀÇ ½ÇÇà È­ÀϷμ­ ¸µÅ©µÉ ¸ðµç ¸ðµâÀº µ¿ÀÏÇÑ ¸ðµ¨ ±¸Á¶¸¦ °¡Á®¾ß ÇÑ´Ù. ¹°·Ð ¸Þ¸ð¸® ¸ðµ¨À» È¥ ¿ëÇÒ ¼öµµ ÀÖÁö¸¸ ±×°ÍÀº ´ë´ÜÈ÷ À§ÇèÇÑ ÀÛ¾÷ÀÌ µÈ´Ù. ¿ì¼±Àº 2¹ø »çÇ׿¡ ÇØ´çÇÏ´Â ¼³¸íºÎÅÍ ÇØ ³ª°¡°Ú´Âµ¥, ±× Àü¿¡ ÇÑ °¡ Áö ºÐ¸íÈ÷ ÇØµÑ ÀÏÀÌ ÀÖ´Ù. ±×°ÍÀº Á¤Àû µ¥ÀÌÅÍÀÇ µÎ °¡Áö Å« ±¸ºÐ¿¡ ´ë ÇÑ °ÍÀÌ´Ù. --------------------------------------------------------------------- 3 ÃʱâÈ­µÈ Á¤Àû µ¥ÀÌÅÍ¿Í ºñÃʱâÈ­µÈ Á¤Àû µ¥ÀÌÅÍ --------------------------------------------------------------------- Àü¿¡µµ ¾ð±ÞÇßÁö¸¸ ´Ù½Ã Çѹø ÀÚ¼¼È÷ ¼³¸íÇÏÀÚ¸é, "Á¤Àû µ¥ÀÌÅÍ(stati c data)"¶õ °¢Á¾ ¿ÜºÎº¯¼ö, Á¤Àûº¯¼ö ¹× ¹®ÀÚ¿­ »ó¼ö ¼¼ °¡ÁöµéÀ» ÃÑĪÇÏ ´Â ¸»ÀÌ´Ù. ´Ù¸¸ ¹®ÀÚ¿­ »ó¼ö´Â Åͺ¸ C ³»ºÎÀûÀ¸·Î º¼ ¶§ ÇÔ¼ö ³»¿¡¼­ Á¤ ÀǵǴ ³»ºÎÁ¤Àûº¯¼ö(internal static variable)¿Í µ¿µîÇÏ°Ô Ãë±ÞµÇ±â ¶§ ¹®¿¡(<¸®½ºÆ® 8> Âü°í), ÀÌÈÄÀÇ ¼³¸í¿¡¼­ ¹®ÀÚ¿­ »ó¼ö¿¡ °üÇÑ »çÇ×Àº Á¤Àû º¯¼öÀÇ °üÁ¡¿¡¼­ À¯ÃßÇÏ¿© »ý°¢ÇØ º¸¸é Ʋ¸²¾øÀ» °ÍÀÌ´Ù. ½ÇÁ¦·Î ¾î¼Àºí¸® ¼öÁØ¿¡¼­´Â ¹®ÀÚ¿­ »ó¼ö¿Í Á¤Àûº¯¼ö°¡ ¹®¹ýÀûÀ¸·Î ±¸º°µÇÁö ¾Ê´Â´Ù. ÇÑÆí ÀÌ Á¤Àû µ¥ÀÌÅÍ´Â ¿¹¿Ü ¾øÀÌ µ¥ÀÌŸ ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ, Áï ¿É¼ÂÀ¸ ·Î 0x0000 ¹øÁö ÀÌÈÄ¿¡ ³õÀ̵µ·Ï µÇ¾î ÀÖ´Ù. ÀÚ¼¼ÇÑ °ÍÀº 6¿ù ´Þ¿¡ °ÔÀçÇÑ °¢ ¸Þ¸ð¸® ¸ðµ¨ÀÇ Áöµµ¸¦ Âü°íÇϱ⠹ٶõ´Ù. ´Ù½Ã º»·ÐÀ¸·Î µÇµ¹¾Æ °¡¼­, Á¤Àû µ¥ÀÌŸ´Â ´Ù½Ã ±× ÃʱâÈ­ ¿©ºÎ¿¡ µû ¶ó "ÃʱâÈ­µÈ Á¤Àû µ¥ÀÌŸ(initialized static data)"¿Í "ºñÃʱâÈ­µÈ Á¤Àû µ¥ÀÌŸ(uninitialized static data)"·Î ³ª´¶´Ù. ÆíÀÇ»ó ÀÌÁ¦ºÎÅÍ ÀüÀÚ¸¦ I SD, ÈÄÀÚ¸¦ UISD¶ó°í ¾àĪÇÏ°Ú´Ù. ¿©±â¼­ ÃʱâÈ­ ¿©ºÎ´Â ¿ÜºÎº¯¼ö ȤÀº Á¤Àûº¯¼ö¸¦ Á¤ÀÇÇÒ ¶§(¼±¾ðÇÒ ¶§ °¡ ¾Æ´Ô!) ±× ÃʱâÄ¡(initializer)¸¦ ¸í½ÃÀûÀ¸·Î ÁöÁ¤Çß´À³Ä¿¡ ´Þ·Á ÀÖ´Ù. ¿¹¸¦ µé¾î ¾Æ·¡ÀÇ ¿ÜºÎº¯¼ö Á¤ÀÇ¿¡¼­ º¼ ¶§ initvar´Â ISD¿¡ ¼ÓÇÏ°í unini tvar´Â UISD¿¡ ¼ÓÇÑ´Ù. int initvar = 10; int uninitvar; ÀÌ·± ±¸ºÐÀÌ »ý°Ü³­ ±Ùº»ÀûÀÎ ÀÌÀ¯´Â ÇѸ¶µð·Î ÄÄÆÄÀÏµÈ ¸ñÀû È­ÀÏ ¹× ½ÇÇà È­ÀÏÀÇ Å©±â¸¦ ´ëÆø ÁÙÀ̱â À§ÇÑ °ÍÀÌ´Ù. ´Ùµé ¾Ë´Ù½ÃÇÇ UISD´Â ÇÁ·Î ±×·¥ ½ÇÇà Á÷ÈÄ¿¡ 0 ¶Ç´Â 0¿¡ »ó´çÇÏ´Â °ª(À̸¦ Å×¸é ³Î ¹®ÀÚ '\0')À¸·Î ÃʱâÈ­µÈ´Ù. ¿©±â¼­ ÁÖ¸ñÇÒ °ÍÀº "ÇÁ·Î±×·¥ ½ÇÇà Á÷ÈÄ"¶ó´Â ´ë¸ñÀÌ´Ù. ÀÌ ´ë¸ñ¿¡¼­ º¼ ¶§ ½ÇÇà È­ÀÏ ÀÚü´Â ±× ÃʱâÄ¡(Áï 0)¸¦ Æ÷ÇÔÇÏÁö ¾Ê°í ÀÖÀ½ À» Á÷°¨ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±¸Ã¼ÀûÀ¸·Î ¸»Çؼ­ UISDµéÀº ½ÇÇà È­ÀÏ ³»¿¡ ±× °ø°£ÀÌ ¸¶·ÃµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó, ´Ù¸¸ ½ÇÇà Á÷ÈÄ¿¡ ±âµ¿ ÄÚµå(startup code)¿¡ ÀÇÇؼ­ ±× ¿µ¿ªÀÌ ÇÒ´çµÇ°í °ðÀ̾î 0À¸·Î ÃʱâÈ­µÉ µû¸§ÀÌ´Ù. ±×·¡¼­ °á°úÀûÀ¸·Î ½ÇÇà È­ÀÏ ÀÇ Å©±â¸¦ UISD°¡ Â÷ÁöÇÏ´Â ¿µ¿ª¸¸Å­ °¨¼Ò½ÃÅ°´Â È¿°ú¸¦ °¡Á®¿Â´Ù. --------------------------------------------------------------------- 4 ¾î¼Àºí¸® ¸ðµâÀÇ ÀϹÝÀûÀÎ ÀÛ¼º ¾ç½Ä --------------------------------------------------------------------- <¸®½ºÆ® 1>¿¡ ¾î¼Àºí¸® ¸ðµâÀÇ ÀϹÝÀûÀÎ ÀÛ¼º ¾ç½ÄÀ» º¸¿´´Ù. ÁÖ¸ñÇØ ¼­ º¼ °ÍÀº SEGMENT ¹× GROUP Áö½ÃÀÚ¿¡ °ü·ÃµÈ »çÇ×ÀÌ´Ù. À̵éÀº ¾î¼Àºí¸® ¸ðµâÀÌ ÀÏ°üµÇ°Ô ÁöÄÑ¾ß ÇÒ ¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢ÀÇ ¸ðµç °ÍÀ» º¸¿© ÁØ´Ù. <¸®½ºÆ® 1> ¾î¼Àºí¸® ¸ðµâÀÇ ÀϹÝÀûÀÎ ¾ç½Ä --------------------------------------------------------------------- ; ; °¢Á¾ ÁÖ¼®¹®(ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥ Á¦¸ñ) ; +--- ÄÚµå ¼¼±×¸ÕÆ®¸í SEGMENT BYTE PUBLIC 'CODE' ASSUME cs:, ds: << ÄÚµå ¼¼±×¸ÕÆ®ºÎ >> ¡ç º¸Åë(¾à°£ Å«) °íµñü ¿©±â´Ù ÄÚµå(°¢Á¾ ¾î¼Àºí¸® ¸í·Éµé)¸¦ µÐ´Ù ¡ç ÀÛÀº ±ÛÀÚü ENDS +------ µ¥ÀÌŸ ±×·ì¸í --- _BSS ¼¼±×¸ÕÆ®¸¦ GROUP _DATA, _BSS »ý·«ÇßÀ» °æ¿ì »èÁ¦ÇÑ´Ù. +------ ÃʱâÈ­µÈ µ¥ÀÌŸ ¼¼±×¸ÕÆ®¸í SEGMENT WORD PUBLIC 'DATA' << ÃʱâÈ­µÈ µ¥ÀÌŸ ¼¼±×¸ÕÆ®ºÎ >> ¿©±â´Ù ISDÀÇ Á¤ÀǸ¦ µÐ´Ù. ENDS +------ ºñÃʱâÈ­µÈ µ¥ÀÌŸ ¼¼±×¸ÕÆ®¸í _BSS SEGMENT WORD PUBLIC 'BSS' << ºñÃʱâÈ­µÈ µ¥ÀÌŸ ¼¼±×¸ÕÆ®ºÎ >> ¿©±â´Ù UISDÀÇ Á¤ÀǸ¦ µÐ´Ù. ÀÌ _BSS ¼¼±×¸ÕÆ®´Â ¼±ÅÃÀûÀÌ´Ù. Áï »ý·« °¡´ÉÇÏ´Ù. _BSS ENDS END --------------------------------------------------------------------- <¸®½ºÆ® 1>¿¡¼­ , ´Â °¢ ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó¼­ <Ç¥ 1>¿¡ ¼­ ¹Ì¸® Á¤ÇØÁø (³í¸®) ¼¼±×¸ÕÆ®¸íÀ¸·Î ġȯµÇ¾î¾ß ÇÑ´Ù. ¸¶Âù°¡Áö·Î µµ ¹Ì¸® Á¤ÇØÁø ±×·ì¸íÀ¸·Î ġȯµÇ¾îÁ®¾ß ÇÑ´Ù. ÀÌ ¼¼±×¸ÕÆ®¸í ¹× ±×·ì ¸íÀº ÇÁ·Î±×·¥ Àüü¿¡ °ÉÃÄ ÀÏ°üµÇ°Ô ÁöÄÑÁ®¾ß Çϸç, ±×·¸Áö ¾ÊÀ» °æ¿ì ¸µ Å© ¹× ½ÇÇà½Ã ¿¹±âÄ¡ ¸øÇÑ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. ¹°·Ð Àͼ÷ÇØÁö¸é º° °Íµµ ¾Æ ´Ï°ÚÁö¸¸ óÀ½ ¹è¿ï ¶§¿¡´Â ƯÈ÷ À¯³äÇØ¾ß ÇÒ °ÍÀÌ´Ù. <¸®½ºÆ® 1>¿¡ ´ëÇØ ºÎ¿¬ÇØ¾ß ÇÒ »çÇ×ÀÌ µÎ °¡Áö ÀÖ´Ù. ±×°ÍÀº ù°, U ISD°¡ À§Ä¡ÇÒ _BSS ¼¼±×¸ÕÆ®´Â ¼±ÅÃÀû(optional)À̶ó´Â °ÍÀÌ´Ù. ´Ù½Ã ¸»ÇØ ¼­ UISD°¡ ¾î¼Àºí¸® ¸ðµâ ³»¿¡ Çϳªµµ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é, Áï ¸ðµç Á¤Àû µ¥ÀÌŸ¿¡ ÃʱâÄ¡°¡ ÁöÁ¤µÇ¾î ÀÖ´Ù¸é, _BSS ¼¼±×¸ÕÆ®¸¦ »ý·«ÇÒ ¼öµµ ÀÖ´Ù. ¹°·Ð _BSS¸¦ »ý·«ÇÒ °æ¿ì¿¡ GROUP ÀÇ»ç ¸í·É¹®¿¡¼­ _BSS¸¦ »èÁ¦ÇØ¾ß ÇÑ´Ù. ±×¸®°í °Å´ë ¸ðµ¨¿¡¼­´Â µ¥ÀÌŸ ¼¼±×¸ÕÆ®°¡ °¢ ¸ðµâ¸¶´Ù µ¶¸³ÀûÀ¸·Î Á¸ÀçÇѴٴ Ư¼º ¶§¹®¿¡ ´Ù¸¥ ¸ðµ¨°ú ´Þ¸® À¯ÀÏÇÏ°Ô UISD¸¦ ÀÎÁ¤ÇÏÁö ¾Ê´Â ´Ù. Áï C ¹®¹ý»óÀ¸·Î´Â ÃʱâÄ¡¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀº UISD¶ó ÇÒÁö¶óµµ ³»ºÎÀûÀ¸ ·Î´Â 0À̶ó´Â ÃʱâÄ¡°¡ ÁöÁ¤µÈ ISD·Î °£ÁֵȴÙ. µû¶ó¼­ °Å´ë ¸ðµ¨¿¡¼­´Â _ BSS ¼¼±×¸ÕÆ®¸¦ Àý´ë·Î µÎ¾î¼­´Â ¾È µÇ¸ç ¸ðµÎ ÇØ´ç ¸ðµâÀÇ ISD ¿µ¿ª¿¡ ¾µ ¾î ´ã¾Æ¾ß ÇÑ´Ù. Âü°í·Î 0À̶ó´Â(¶Ç´Â 0¿¡ »ó´çÇÏ´Â) ÃʱâÄ¡°¡ ¸í½ÃÀûÀ¸·Î ÁöÁ¤µÈ º¯¼ö ´Â, ºñ·Ï UISD°¡ 0À¸·Î ÃʱâÈ­µÇ±â´Â ÇÏÁö¸¸, ISD·Î °£Áֵȴٴ Á¡¿¡ À¯ÀÇ Çϱ⠹ٶõ´Ù. ¾î¼Àºí¸® ¸ðµâ¿¡¼­ UISD¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀº DB, DW µî¿¡ 0ÀÇ ÃʱâÄ¡¸¦ ÁöÁ¤ÇÏ´Â °Ô ¾Æ´Ï¶ó ? ±âÈ£¸¦ ÁöÁ¤ÇÏ¿© ÃʱâÄ¡¸¦ ¸í½ÃÇÏÁö ¾Ê´Â °ÍÀÌ´Ù. ºñ·Ï ÃßÈÄ¿¡ 0À¸·Î ÃʱâÈ­µÇ´õ¶óµµ ¸»ÀÌ´Ù. ½Ç·Ê´Â <¸®½ºÆ® 7>°ú <¸®½ºÆ® 8>¸¦ ºñ±³ÇÏ¿© Âü°íÇϱ⠹ٶõ´Ù. --------------------------------------------------------------------- 5 ¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢ --------------------------------------------------------------------- ÀÌÁ¦ºÎÅÍ ¼³¸íÇÒ ³»¿ëÀº ÁöÁ¤µÈ ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó ±× ±¸Á¶¸¦ À¯ÁöÇÏ ±â À§ÇÑ ¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢µé·Î¼­ ¹Ýµå½Ã öÀúÇÏ°Ô ÁöÄÑÁ®¾ß ÇÑ´Ù. ´Ü ÇÑ °¡Áö¶óµµ ºü¶ß¸®°Å³ª À߸ø ÁöÁ¤ÇÏ¸é ¸µÅ© ¶Ç´Â ½ÇÇà½Ã ¿¹±âÄ¡ ¸øÇÑ ¿¡·¯°¡ ¹ß»ýÇϰųª ÇÁ·Î±×·¥ÀÌ »çÀü °æ°í(?) ¾øÀÌ ±×³É ÆøÁÖÇØ ¹ö¸®¹Ç·Î ÁÖÀÇ¿¡ ÁÖÀǸ¦ °ÅµìÇϱ⸦ ´çºÎÇÑ´Ù. Âü°í·Î Åͺ¸ ¾î¼Àºí·¯¿¡¼­´Â Åͺ¸ C ȣȯÀÇ ¸Þ¸ð¸® ¸ðµ¨À» ÁöÁ¤ÇÒ ¼ö Àֱ⠶§¹®¿¡ ¼¼±×¸ÕÆ® ¹èÄ¡¸¦ À§ÇØ º¹ÀâÇÏ°Ô SEGMENT¿Í DGROUP Áö½ÃÀÚ¸¦ ¾µ ÇÊ¿ä°¡ ¾ø¾î¼­ ´ë´ÜÈ÷ Æí¸®ÇÏ´Ù. ÇÏÁö¸¸ ÀÏ´Ü ¾Ë¾Æ µÎ±â´Â ÇØ¾ß ÇÒ °Í ÀÌ´Ù. ÀüÀÚ°è»ê±â ¾²¸é µÈ´Ù°í Çؼ­ ¼ÕÀ¸·Î ³ª´°¼ÀÇÏ´Â ¹æ¹ýÀ» ¹è¿ìÁö ¾Ê °Ú´Ù¸é ÀÌ°Ç Á» °ï¶õÇÏÁö ¾Ê´Â°¡? Åͺ¸ ¾î¼Àºí·¯ÀÇ ¸Þ¸ð¸® ¸ðµ¨ Áö¿ø °ü ·Ã ±â´ÉÀº µÎ¼¼ ´Þ ÈÄ¿¡ ºÐÀ§±â°¡ ¹«¸£ÀÍÀ¸¸é ÀÚ¼¼È÷ ¼³¸íÇÏ°Ú´Ù. ¹Ì¸® ¾Ë ¾Æº¸°í ½ÍÀº µ¶ÀÚ´Â Turbo Assembler 1.0 User's Guide 312~315ÂÊÀ» Âü°í Çϱ⠹ٶõ´Ù. 5.1 ÄÚµå ¼¼±×¸ÕÆ® +--------------------------------------+ | SEGMENT BYTE PUBLIC 'CODE' | | ASSUME cs:, ds: | +--------------------------------------+ [1] (³í¸®) ÄÚµå ¼¼±×¸ÕÆ®¸í ´Â ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó ¹Ýµå½Ã <Ç¥ 1> ¿¡ Á¤ÇØÁ® ÀÖ´Â ¸íĪÀ̾î¾ß ÇÑ´Ù. [2] Á¤·ÄÇü½Ä(alignment)Àº BYTEÇüÀÌ´Ù. [3] Á¶ÇÕÇü½Ä(combine type)Àº ¹Ýµå½ÃPUBLICÀ̾î¾ß ÇÑ´Ù. PUBLICÀ» »ý·« ÇÏ¸é °¢ ³í¸® ¼¼±×¸ÕÆ®°¡ ÇϳªÀÇ ¹°¸® ¼¼±×¸ÕÆ®·Î °áÇÕµÇÁö ¸øÇϱ⠶§ ¹®¿¡ ¸µÅ© ¹× ½ÇÇà½Ã ¿¡·¯°¡ ³ª°Å³ª ÇÁ·Î±×·¥ÀÌ ÆøÁÖÇØ ¹ö¸°´Ù. [4] Ŭ·¡½º¸í(class name)Àº ¹Ýµå½Ã 'CODE'À̾î¾ß ÇÑ´Ù. ¸¸¾à ºü¶ß¸®°Å³ª ´Ù¸¥ Ŭ·¡½º¸íÀ» ¾²¸é °¢°¢ÀÇ (³í¸®) ÄÚµå ¼¼±×¸ÕÆ®µéÀ» ¿¬¼ÓµÇ°Ô À§ Ä¡½Ãų ¼ö ¾øÀ¸¹Ç·Î Á¤ÇØÁø ¸Þ¸ð¸® ¸ðµ¨ÀÇ ±¸Á¶¸¦ µû¸¦ ¼ö ¾ø°Ô µÈ´Ù. [5] ASSUME¹®¿¡¼­ ÄÚµå ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ CS´Â ¸¦ ¼¼±×¸ÕÆ® º£À̽º ·Î ÃëÇÏ°í µ¥ÀÌŸ ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ DS´Â ±×·ì ¸¦ ¼¼±×¸ÕÆ® º£ À̽º·Î ÃëÇØ¾ß ÇÑ´Ù. ¿©ºÐ(extra) ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ ES´Â ¾Æ¹«·¡µµ »ó°ü¾øÀ¸³ª ÀϹÝÀûÀ¸·Î ¸¦ ¼¼±×¸ÕÆ® º£À̽º·Î ÃëÇÑ´Ù. À¯ÀÇÇÒ »çÇ×Àº <Ç¥ 1>¿¡µµ ³ªÅ¸³ÂÁö¸¸ ³ª ´Â ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó ¼­ Ç×»ó µ¿ÀÏÇÑ ¸íĪÀÏ ¼öµµ ÀÖ°í, °¢ ¸ðµâ¸¶´Ù º°µµÀÇ ¸íĪÀÌ µÉ ¼ö µµ ÀÖ´Ù´Â Á¡ÀÌ´Ù. 5.2 µ¥ÀÌŸ ¼¼±×¸ÕÆ® +------------------------------------+ | ±×·ì ¼±¾ð | | GROUP _DATA, _BSS | +------------------------------------+ | ÃʱâÈ­µÈ µ¥ÀÌŸ ¼¼±×¸ÕÆ®ÀÇ ¼±¾ð | | SEGMENT WORD PUBLIC 'DATA' | +------------------------------------+ | ºñÃʱâÈ­µÈ µ¥ÀÌŸ ¼¼±×¸ÕÆ®ÀÇ ¼±¾ð | | _BSS SEGMENT WORD PUBLIC 'BSS' | +------------------------------------+ [1] (³í¸®) µ¥ÀÌŸ ¼¼±×¸ÕÆ®¸í ´Â ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¶ó ¹Ýµå½Ã <Ç¥ 1>¿¡ Á¤ÇØÁ® ÀÖ´Â ¸íĪÀ̾î¾ß ÇÑ´Ù. ¿¹ÄÁµ¥ °Å´ë ¸ðµ¨ÀÌ ¾Æ´Ï¶ó¸é ´Â Ç×»ó _DATAÀÌ´Ù. [2] Á¤·ÄÇü½Ä(alignment)Àº WORDÇüÀÌ´Ù. [3] Á¶ÇÕÇü½Ä(combine type)Àº ¹Ýµå½Ã PUBLICÀ̾î¾ß ÇÑ´Ù. PUBLICÀ» »ý·« ÇÏ¸é °¢ ³í¸® ¼¼±×¸ÕÆ®°¡ ÇϳªÀÇ ¹°¸® ¼¼±×¸ÕÆ®·Î °áÇÕµÇÁö ¸øÇϱ⠶§ ¹®¿¡ ¸µÅ©½Ã ¿¡·¯°¡ ³ª°Å³ª ½ÇÇà½Ã ÀüÇô ¾û¶×ÇÑ Á¤Àû µ¥ÀÌŸµéÀ» ÂüÁ¶ ÇÏ°Ô µÈ´Ù. ±×¸®°í ÀÌ·± ºÎ·ùÀÇ ¿¡·¯´Â ´ë´ÜÈ÷ ã±â Èûµç °Ô º¸ÅëÀÌ ¸ç, º¹ÀâÇÑ ÇÁ·Î±×·¥Àϼö·Ï ½ÅÀÇ °¡È£°¡ ÀÖ±â Àü¿¡´Â ¸ø ã´Â´Ù°í º¸ ¸é µÈ´Ù. [4] Ŭ·¡½º¸í(class name)Àº ¹Ýµå½Ã 'DATA' ¹× 'BSS'À̾î¾ß ÇÑ´Ù. ¸¸¾à ºü ¶ß¸®°Å³ª ´Ù¸¥ Ŭ·¡½º¸íÀ» ¾²¸é°¢ ³í¸®ÀûÀÎ ÄÚµå ¼¼±×¸ÕÆ®µéÀ» ÇÑ ±º µ¥·Î ¸ðÀ» ¼ö ¾øÀ¸¹Ç·Î, Á¤ÇØÁø ¸Þ¸ð¸® ¸ðµ¨ÀÇ ±¸Á¶¸¦ µû¸¦ ¼ö ¾ø°Ô µÇ¾î, ¿¹±âÄ¡ ¸øÇÏ´Â ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. [5] UISD°¡ Çϳªµµ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì _BSS ¼¼±×¸ÕÆ®´Â »ý·«ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§ ¹°·Ð ±×·ì ¼±¾ð¿¡¼­µµ ¿ª½Ã _BSS¸¦ »ý·«ÇØ ÁÖ¾î¾ß ÇÑ´Ù. [6] ÃʼÒÇü ¸ðµ¨¿¡¼­ÀÇ ±×·ì ¼±¾ðÀº ¿¹¿Ü·Î ´ÙÀ½°ú °°¾Æ¾ß ÇÑ´Ù. +------------------------------------+ | DGROUP GROUP _TEXT, _DATA, _BSS | +------------------------------------+ Áï, CS¿Í DS°¡ Ç×»ó ÀÏÄ¡µÇ¹Ç·Î _TEXT ¼¼±×¸ÕÆ®°¡ DGROUP¿¡ Æ÷ÇÔµÇ¾î ¾ß ÇÑ´Ù. [7] °Å´ë ¸ðµ¨¿¡¼­´Â DGROUPÀÌ ÀüÇô ¾²ÀÌÁö ¾Ê´Â´Ù. °¢ ¸ðµâ¿¡ ¼ÓÇÑ µ¥ÀÌ ÅÍ ¼¼±×¸ÕÆ®´Â ¼­·Î µ¶¸³ÀûÀ̱⠶§¹®ÀÌ´Ù. 5.3 ½ºÅà ¼¼±×¸ÕÆ® +--------------------------------+ | _STACK SEGMENT STACK 'STACK' | +--------------------------------+ [1] ½ºÅà ¼¼±×¸ÕÆ®¿¡ ´ëÇÑ ¼±¾ðÀº ÃʼÒÇü ¸ðµ¨À» Á¦¿ÜÇÑ ´Ù¸¥ ¸Þ¸ð¸® ¸ðµ¨ ¿¡¼­¸¸ °¡´ÉÇÏ´Ù. [2] ½ºÅà ¼¼±×¸ÕÆ®¿¡ ´ëÇÑ ¼±¾ðÀº À§¿Í °°À¸³ª ÀϹÝÀûÀ¸·Î¾î¼Àºí¸® ¸ðµâ ¿¡ Æ÷ÇÔ½Ãų ÇÊ¿ä´Â ¾ø´Ù. ¿Ö³Ä ÇÏ¸é ±âµ¿ ÄÚµå ¸ðµâ¿¡ ÀÌ¹Ì ¼±¾ðµÇ¾î Àֱ⠶§¹®ÀÌ´Ù. <Ç¥ 1> ¸Þ¸ð¸® ¸ðµ¨¿¡ µû¸¥ ġȯ ±ÔÄ¢°ú ÄÚµå ¹× µ¥ÀÌŸ Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ ¾ç½Ä -------------+----------------------+------------------------- ¸Þ¸ð¸® ¸ðµ¨ | ġȯ ±ÔÄ¢ | ÄÚµå ¹× µ¥ÀÌŸ | | Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ -------------+----------------------+------------------------- ÃʼÒÇü | = _TEXT | ÄÚµå DW _TEXT:º¯¼ö¸í ¼ÒÇü | = _DATA | µ¥ÀÌŸ DW DGROUP:º¯¼ö¸í | = DGROUP | -------------+----------------------+------------------------- Áß¼ÒÇü | = _TEXT | ÄÚµå DW _TEXT:º¯¼ö¸í | = _DATA | µ¥ÀÌŸ DW DGROUP:º¯¼ö¸í | = DGROUP | -------------+----------------------+------------------------- ÁßÇü | = ¸ðµâ¸í_TEXT | ÄÚµå DD º¯¼ö¸í | = _DATA | µ¥ÀÌŸ DW DGROUP:º¯¼ö¸í | = DGROUP | -------------+----------------------+------------------------- ´ëÇü | = ¸ðµâ¸í_TEXT | ÄÚµå DD º¯¼ö¸í | = _DATA | µ¥ÀÌŸ DD DGROUP:º¯¼ö¸í | = DGROUP | -------------+----------------------+------------------------- °Å´ë | = ¸ðµâ¸í_TEXT | ÄÚµå DD º¯¼ö¸í | = ¸ðµâ¸í_DATA | µ¥ÀÌŸ DD º¯¼ö¸í | = ¸ðµâ¸í_DATA | -------------+----------------------+------------------------- * "¸ðµâ¸í"À̶õ ÇØ´ç ¸ðµâÀÇ ¿ø½Ã È­Àϸí(È®ÀåÀÚ Á¦¿Ü)À» ¶æÇÑ´Ù. ¿¹ÄÁµ¥ È­ÀϸíÀÌ dummy.c¶ó¸é "¸ðµâ¸í_TEXT"´Â "DUMMY_TEXT"°¡ µÈ´Ù(°ü·Ê»ó ´ë¹®ÀÚ¸¦ ¾´´Ù). --------------------------------------------------------------------- 6 ¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢°ú GROUP ÀÇ»ç ¸í·É¿¡ ´ëÇØ --------------------------------------------------------------------- ¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢°ú GROUP ÀÇ»ç ¸í·É¿¡ °üÇØ Á» ´õ ±íÀÌ ¾Ë°í ½ÍÀº µ¶ÀÚ´Â, ´ÙÀ½ ¼­ÀûÀÇ Á¦3Àå "¸µÅ©¿Í ¼¼±×¸ÕÆ®ÀÇ ¹èÄ¡"¿¡ º¸±â µå¹°°Ô »ó¼¼ È÷ ¼³¸íµÇ¾î ÀÖÀ¸¹Ç·Î ±×°É Âü°íÇϱ⠹ٶõ´Ù. ÇÏÁö¸¸ »ç½Ç ¸ô¶óµµ ÇÁ·Î±× ·¡¹ÖÇÏ´Â µ¥¿¡´Â °ÅÀÇ ÁöÀåÀÌ ¾øÀ¸´Ï±î ±»ÀÌ ºÎ´ã ´À³¥ ÇÊ¿ä´Â ¾øÀ» µíÇÏ ´Ù. ȲÈñÀ¶ ÆíÀú, "¸ÅÅ©·Î ¾î¼Àºí·¯ È°¿ë 1", ±³Çлç ÇÏ¿©Æ° Áö¸é »çÁ¤À» °í·ÁÇÏ¿© ÀÌ ±Û¿¡¼­´Â ¼¼±×¸ÕÆ® ¹èÄ¡¿Í GROUP ÀÇ »ç ¸í·É¿¡ °üÇÑ ¼³¸íÀº ÇÏÁö ¾ÊÀ» ÀÛÁ¤À̸ç ÇÒ ÇÊ¿äµµ ¾ø´Ù°í º¸¾Æ, °ú°¨ È÷ »ý·«ÇÏ°Ú´Ù. µ¶ÀÚ ¿©·¯ºÐµµ ±×³É ÀÏÁ¾ÀÇ "°ø½Ä"À̶ó°í »ý°¢ÇØ ÁØ´Ù¸é ¼­·Î¼­·Î ¼ÓÆíÇÒ °Í °°´Ù. ¼öÇÐ/°øÇÐ ¹®Á¦ ¸¹À̵é Ç®¾î ºÁ¼­ ¾Ë°ÚÁö¸¸, °ø½ÄÀÇ À¯µµ °úÁ¤À» ÀüÇô ¸ô¶óµµ ÃÖÁ¾ °ø½Ä°ú ±× Àû¿ë ¹æ¹ý¸¸ ¾Ë¸é ´ëºÎºÐ ÀÇ ¹®Á¦¸¦ ½±»ç¸® Ç®¾î¹ö¸± ¼ö ÀÖ´Â °Í°ú °°Àº ¸Æ¶ôÀÌ´Ù. --------------------------------------------------------------------- 7 ¼ÒÇü ¸ðµ¨¿¡¼­ÀÇ °£´ÜÇÑ ¿¹ --------------------------------------------------------------------- <¸®½ºÆ® 2> ÇÔ¼ö Çϳª¸¦ °¡Áø °¡Àå °£´ÜÇÑ ¸ðµâ dummy.c --------------------------------------------------------------------- void dummy(void) { } --------------------------------------------------------------------- <¸®½ºÆ® 3>ÀÇ dummy.asmÀº ¾Æ·¡¿Í °°ÀÌ tcc.exe¸¦ ½á¼­ <¸®½ºÆ® 2>À» ÄÄÆÄÀÏÇÑ °á°ú¸¦ ½ÇÀº °ÍÀÌ°í, <¸®½ºÆ® 4>´Â dummy.asmÀ» <¸®½ºÆ® 1>ÀÇ ¾ç ½Ä¿¡ ¸ÂÃß¾î ¾Ë¾Æº¸±â ½±°Ô Á¤¸®ÇÑ °ÍÀÌ´Ù. C:\TURBOC\WORK>tcc -S dummy +--- ¾î¼Àºí¸® È­ÀÏÀ» »ý¼ºÇϵµ·Ï ÁöÁ¤ <¸®½ºÆ® 3> dummy.c¸¦ ¼ÒÇü ¸ðµ¨·Î ÄÄÆÄÀÏÇÑ °á°ú --------------------------------------------------------------------- ifndef ??version ?debug macro endm endif ?debug S "dummy.c" _TEXT segment byte public 'CODE' DGROUP group _DATA,_BSS assume cs:_TEXT,ds:DGROUP,ss:DGROUP _TEXT ends _DATA segment word public 'DATA' d@ label byte d@w label word _DATA ends _BSS segment word public 'BSS' b@ label byte b@w label word ---- µð¹ö±ë °ü·Ã Á¤º¸ ?debug C E97615E81406393030382E63 _BSS ends _TEXT segment byte public 'CODE' ; ?debug L 1 --- Çà¹øÈ£ °ü·Ã Á¤º¸ _dummy proc near @1: ¡ç ¹«ÀǹÌÇÑ ·¹À̺í ; ?debug L 4 ret _dummy endp _TEXT ends ?debug C E9 _DATA segment word public 'DATA' s@ label byte _DATA ends _TEXT segment byte public 'CODE' _TEXT ends public _dummy --- Åͺ¸ C´Â º¸Åë public ¼±¾ðÀ» end µÞºÎºÐ¿¡ ¸ð¾Æ ³õ´Â´Ù. --------------------------------------------------------------------- <¸®½ºÆ®4> dummy.asmÀ» <¸®½ºÆ® 1> ¾ç½Ä¿¡ ¸ÂÃç Á¤¸®ÇÑ °á°ú --------------------------------------------------------------------- ;************************************************ ; dummy ¸ðµâÀÇ ¾î¼Àºí¸® ¸®½ºÆ® ; (¼ÒÇü ¸Þ¸ð¸® ¸ðµ¨) ;************************************************ _TEXT SEGMENT BYTE PUBLIC 'CODE' ASSUME cs:_TEXT,ds:DGROUP,ss:DGROUP +---------+ ¼ÒÇü µ¥ÀÌŸ ¸ðµ¨¿¡¼­´Â DS¿Í SS°¡ ÀÏÄ¡µÈ´Ù. PUBLIC _dummy ---PUBLIC ¼±¾ðÀº ¾Æ¹« µ¥³ª À־ µÈ´Ù. _dummy PROC NEAR --- ¼ÒÇü ÄÚµå ¸ðµ¨ÀÏ ¶§ ret --- ¾Æ¹« Àϵµ ÇÏÁö ¾Ê°í °ð¹Ù·Î º¹±Í _dummy ENDP _TEXT ENDS DGROUP GROUP _DATA,_BSS --- ±×·ì¸í DGROUPÀÇ ¼±¾ð _DATA SEGMENT WORD PUBLIC 'DATA' d@ LABEL BYTE -+- ÀÌ ¸ðµâÀÇ _DATA ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ¸¦ d@w LABEL WORD -+ °¡¸®Å°´Â ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ »ó¼ö s@ LABEL BYTE --- ÀÌ ¸ðµâÀÇ ¹®ÀÚ¿­ »ó¼ö ¿µ¿ªÀÇ ¼±µÎ¸¦ °¡¸®Å°´Â ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ »ó¼ö _DATA ENDS _BSS SEGMENT WORD PUBLIC 'BSS' b@ LABEL BYTE --- ÀÌ ¸ðµâÀÇ _BSS ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ¸¦ b@w LABEL WORD --- °¡¸®Å°´Â ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ »ó¼ö (<¸®½ºÆ® 8> Âü°í) _BSS ENDS END --------------------------------------------------------------------- --------------------------------------------------------------------- 8 ´ëÇü ¸ðµ¨¿¡¼­ÀÇ °£´ÜÇÑ ¿¹ --------------------------------------------------------------------- <¸®½ºÆ®5>ÀÇ dummy.asmÀº ¾Æ·¡¿Í °°ÀÌ tcc.exe¸¦ ½á¼­ <¸®½ºÆ® 2>¸¦ ÄÄÆÄÀÏÇÑ °á°ú¸¦ ½ÇÀº °ÍÀÌ°í <¸®½ºÆ® 6>Àº dummy.asmÀ» <¸®½ºÆ® 1>ÀÇ ¾ç ½Ä¿¡ ¸Â°Ô ´Ù½Ã ÀçÁ¤¸®ÇÑ °ÍÀÌ´Ù. C:\TURBOC\WORK>tcc -S -ml dummy +--- ´ëÇü ¸ðµ¨À» ÁöÁ¤ <¸®½ºÆ® 5> dummy.c¸¦ ´ëÇü ¸ðµ¨·Î ÄÄÆÄÀÏÇÑ °á°ú --------------------------------------------------------------------- ifndef ??version ?debug macro endm endif ?debug S "dummy.c" DUMMY_TEXT segment byte public 'CODE' DGROUP group _DATA,_BSS assume cs:DUMMY_TEXT,ds:DGROUP DUMMY_TEXT ends _DATA segment word public 'DATA' d@ label byte d@w label word _DATA ends _BSS segment word public 'BSS' b@ label byte b@w label word ?debug C E97615E8140764756D6D792E63 _BSS ends DUMMY_TEXT segment byte public 'CODE' ; ?debug L 1 _dummy proc far @1: ; ?debug L 4 ret _dummy endp DUMMY_TEXT ends ?debug C E9 _DATA segment word public 'DATA' s@ label byte _DATA ends DUMMY_TEXT segment byte public 'CODE' DUMMY_TEXT ends public _dummy end --------------------------------------------------------------------- <¸®½ºÆ® 6> dummy.asmÀ» <¸®½ºÆ® 1> ¾ç½Ä¿¡ ¸ÂÃç Á¤¸®ÇÑ °á°ú --------------------------------------------------------------------- ;************************************************ ; dummy ¸ðµâÀÇ ¾î¼Àºí¸® ¸®½ºÆ® ; (´ëÇü ¸Þ¸ð¸® ¸ðµ¨) ;************************************************ DUMMY_TEXT SEGMENT BYTE PUBLIC 'CODE' ASSUME cs:DUMMY_TEXT,ds:DGROUP SS¿¡ ´ëÇÑ °¡Á¤ÀÌ ºüÁ® ÀÖÀ½¿¡ À¯ÀÇ---+ PUBLIC _dummy _dummy PROC FAR --- ¿ø°Å¸® ÇÔ¼ö ret _dummy ENDP DUMMY_TEXT ENDS DGROUP GROUP _DATA,_BSS _DATA SEGMENT WORD PUBLIC 'DATA' d@ LABEL BYTE d@w LABEL WORD s@ LABEL BYTE _DATA ENDS _BSS SEGMENT WORD PUBLIC 'BSS' b@ LABEL BYTE b@w LABEL WORD _BSS ENDS END ---------------------------------------------------------------------  #53 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷4-2: ¾î¼Àºí¸® ÄÚµå Á¢¼Ó I 05/06 00:17 286 line --------------------------------------------------------------------- 9 Á¤Àû µ¥ÀÌŸÀÇ Á¤ÀÇ --------------------------------------------------------------------- 8086 ¾î¼Àºí¸®¿¡¼­ °¢Á¾ »ó¼ö ¹× º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§¿¡ DB(Define Byt e), DW(Define Word), DD(Define Doubleword) µîÀ» ¾´´Ù´Â °ÍÂëÀº Çϵµ »õ »ï½º·¯¿ö¼­ ¾ê±â¸¦ ¸ø ²¨³»°Ú´Ù. ´Ù¸¸ À¯ÀÇÇÒ »çÇ×Àº C °³³ä¿¡¼­ º¼ ¶§ D W, DD µî¿¡ ÀÇÇÑ º¯¼ö Á¤ÀÇÀÇ ´ë»óÀÌ ¾îµð±îÁö³ª Á¤Àû µ¥ÀÌŸ(Áï ¿ÜºÎº¯¼ö ¿Í Á¤Àûº¯¼ö)¶ó´Â °ÍÀÌ´Ù. ÀÚµ¿º¯¼ö´Â ½ºÅû󿡼­ »ý¼º¼Ò¸êÇÏ°í ·¹Áö½ºÅÍ º¯¼ö´Â ·¹Áö½ºÅÍ ±× ÀÚüÀ̹ǷΠDW³ª DD¿¡ ÀÇÇÑ Á¤ÀÇ¿Í´Â ÇϵîÀÇ »ó°üÀÌ ¾ø´Ù. ÀÌ¿Í °°ÀÌ ¾î¼Àºí¸® ¼öÁØ¿¡¼­ DW³ª DD µî¿¡ ÀÇÇØ Á¤ÀÇµÈ º¯¼öÀÇ ¸íĪ À», PUBLIC¹®À¸·Î ¿ÜºÎ(´Ù¸¥ ¸ðµâ)¿¡ ¾Ë¸®¸é C ¼öÁØ¿¡¼­ÀÇ ¿ÜºÎº¯¼ö°¡ µÇ °í, ¾Ë¸®Áö ¾ÊÀ¸¸é ¿ÜºÎÁ¤Àûº¯¼ö(ÇÔ¼ö ¿ÜºÎ¿¡¼­ Á¤ÀǵǴ Á¤Àûº¯¼ö)°¡ µÇ ´Â °ÍÀÌ´Ù. CÀÇ ³»ºÎÁ¤Àûº¯¼ö(ÇÔ¼ö ³»ºÎ¿¡¼­ Á¤ÀǵǴ Á¤Àûº¯¼ö)´Â ¾î¼Àºí ¸® ¼öÁØ¿¡¼­ ¹®¹ýÀûÀ¸·Î Áö¿øµÇÁö´Â ¾Ê´Â´Ù. ±×·¡¼­ Åͺ¸ C´Â ³»ºÎÁ¤Àûº¯ ¼ö¸¦ Ưº°ÇÑ ¹æ½ÄÀ¸·Î ±¸ÇöÇÏ°í ÀÖ´Ù. ¹®ÀÚ¿­ »ó¼öµµ ³»ºÎÁ¤Àûº¯¼ö¿¡ ÁØÇÑ ´Ù. ½Ç·Ê´Â <¸®½ºÆ® 8>¸¦ Âü°íÇϱ⠹ٶõ´Ù. ÇÑÆí °¢Á¾ º¯¼ö¸¦ ¾î¼Àºí¸® ¼öÁØ¿¡¼­ Á¤ÀÇÇÒ ¶§¿¡´Â C ¼öÁØÀÇ µ¥ÀÌŸ ÇüÀÌ º° Àǹ̰¡ ¾ø´Ù. ±×·¡¼­ ¾î¼Àºí¸® ¼öÁØ¿¡¼­ Áß¿äÇÑ °ÍÀº ´ÙÀ½ÀÇ µÎ °¡Áö »ÓÀÌ´Ù. -------------------------------------------------- [1] µ¥ÀÌŸ ¼¼±×¸ÕÆ®¿¡ ³õÀÏ Á¤Àû µ¥ÀÌŸÀ̳Ä? ¾Æ´Ï¸é ½ºÅû󿡼­ »ý¼º ¼Ò¸êµÉ ÀÚµ¿º¯¼öÀ̳Ä? [2] º¯¼öÀÇ Å©±â°¡ ¸î ¹ÙÀÌÆ®À̳Ä? -------------------------------------------------- ÀÌ Àý¿¡¼­´Â [1]¹ø ±¸ºÐ¿¡¼­ Á¤Àû µ¥ÀÌŸÀÇ ¼³¸íÀ¸·Î ±¹ÇÑÇÏ°í, ±×·± ´ÙÀ½ [2]¹ø ±¸ºÐ¿¡ µû¸£ÀÚ¸é ÀÌ·¸´Ù. Áï, ÀÏ´Ü Á¦ÀÏ ¸ÕÀú CÀÇ ´ëÇ¥ÀûÀÎ ±â º»Çü ¹× Æ÷ÀÎÅÍÇüÀÇ ¹ÙÀÌÆ® Å©±â¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. ´Ùµé ¾Ë°í ÀÖ°ÚÁö¸¸ ´Ù½Ã Çѹø <Ç¥ 2>¿¡ Á¤¸®ÇØ µÎ¾ú´Ù. ´Ù¸¸ ºÎµ¿ÇüÀº ¾î¼Àºí¸® ¼öÁØ¿¡¼­ ´Ù·ç±â¿¡ ´Â ³Ê¹« ¹÷Â÷¹Ç·Î »ý·«ÇÏ°í, ±× ¹Û¿¡ ¹è¿­Çü ¹× ±¸Á¶Ã¼Çü/°ø¿ëüÇüÀº ¿©±â ¼­ À¯ÃßÇØ º¸¸é ½±°Ô ±× Å©±â¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖÀ» °ÍÀ̹ǷΠ¿ª½Ã »ý·«ÇÑ´Ù. <Ç¥ 2> CÀÇ ´ëÇ¥ÀûÀÎ µ¥ÀÌŸÇüÀÇ ¹ÙÀÌÆ® Å©±â¿Í ±×¿¡ µû¸£´Â ¿ÜºÎº¯¼ö ¹× Á¤Àûº¯¼öÀÇ Á¤ÀÇ ------------------------------------------------------------ Å©±â Áö½ÃÀÚ µ¥ÀÌŸÇü ------------------------------------------------------------ 1¹ÙÀÌÆ® DB char, unsigned char 2¹ÙÀÌÆ® DW int, unsigned, enum, ±Ù°Å¸® Æ÷ÀÎÅÍ 4¹ÙÀÌÆ® DD long, unsigned long, ¿ø°Å¸® Æ÷ÀÎÅÍ ------------------------------------------------------------ * À§¿Í °°ÀÌ Á¤ÀÇÇÑ µÚ PUBLIC ¼±¾ðÀ» ÇÏ¸é ¿ÜºÎº¯¼ö°¡ µÇ°í ±×·¸Áö ¾ÊÀ¸¸é Á¤Àûº¯¼ö°¡ µÈ´Ù. ÇÑÆí Áö±ØÈ÷ ÁÖÀÇÇØ¾ß ÇÒ °ÍÀÌ µüÇÑ °¡Áö Àִµ¥ ±×°ÍÀº Æ÷ÀÎÅÍ º¯¼ö (¶Ç´Â »ó¼ö)¸¦ Á¤ÀÇÇÒ ¶§ÀÌ´Ù. ¾î¼Àºí¸® ¼öÁØ¿¡¼­ Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â µ¥ÀÌ Å¸ÇüÀº ¿ÏÀüÈ÷ ¹«½ÃµÈ´Ù. Áï, ¾î¶² char *Çü Æ÷ÀÎÅÍ¿Í int *Çü Æ÷ÀÎÅÍ°¡ ÀÖÀ» ¶§, C ¼öÁØ¿¡¼­´Â ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ¸íÈ®ÇÏ°Ô ¼­·Î°¡ ±¸º°µÇÁö¸¸, ¾î ¼Àºí¸® ¼öÁØ¿¡¼­´Â ¹®¹ýÀûÀ¸·Î ÀüÇô ±¸º°µÇÁö ¾Ê´Â´Ù. ±×·¡¼­ ¾î¼Àºí¸® ¼ö ÁØ¿¡¼­ Æ÷ÀÎÅÍÀÇ ±¸ºÐÀº µü µÎ °¡Áö¿¡ ÀÇÁ¸ÇÑ´Ù. [1] ±Ù°Å¸® Æ÷ÀÎÅÍÀÌ³Ä ¿ø°Å¸® Æ÷ÀÎÅÍÀ̳Ä? (Á¤±ÔÈ­°¡ ¿ä±¸µÇ´Â °Å´ë Æ÷ÀÎ ÅÍ´Â C ¼öÁØ¿¡¼­¸¸ Áö¿øµÊ) Áï, 2¹ÙÀÌÆ® Å©±âÀÇ Æ÷ÀÎÅÍÀÌ³Ä 4¹ÙÀÌÆ® Å©±âÀÇ Æ÷ÀÎÅÍÀ̳Ä? [2] ±Ù°Å¸® Æ÷ÀÎÅÍÀÏ °æ¿ì¿¡ ¾î´À ¼¼±×¸ÕÆ®¿¡ ´ëÇÑ ¿É¼ÂÀ̳Ä? ÀϹÝÀûÀÎ µ¥ ÀÌŸ Æ÷ÀÎÅÍ(data pointer)¶ó¸é DSÀÇ ¿É¼ÂÀÏ Å×°í ÇÔ¼ö Æ÷ÀÎÅÍ(functi on pointer)¶ó¸é CSÀÇ ¿É¼ÂÀÏ °ÍÀÌ´Ù. ±× ¹Û¿¡ _ss, _es µîÀÇ ¹øÁöÁö Á¤ ¼ö½ÄÀÚ¸¦ ¾²¸é °¢°¢ SSÀÇ ¿É¼Â, ESÀÇ ¿É¼ÂÀÌ µÉ ¼öµµ ÀÖ´Ù(Turbo C 2.0 User's Guide 354ÂÊ Âü°í). [1]¹øÀÇ ±¸ºÐ¿¡ ÀÇÇÏ¸é ´ÙÀ½°ú °°ÀÌ Æ÷ÀÎÅÍ º¯¼ö(¶Ç´Â »ó¼ö)¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. DW º¯¼ö¸í --- ±Ù°Å¸® Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ DDº¯¼ö¸í --- ¿ø°Å¸® Æ÷ÀÎÅÍ º¯¼öÀÇ Á¤ÀÇ À§¿¡¼­ ±Ù°Å¸® Æ÷ÀÎÅÍ º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§¿¡´Â, ÀÚ½ÅÀÌ ¾î¼Àºí¸®¿¡ ´ëÇØ µµÅÕ´Ù°í »ý°¢µÇÁö ¾Ê´Â´Ù¸é, ¹Ýµå½Ã ¾î´À ¼¼±×¸ÕÆ®ÀÇ ¿É¼ÂÀÎÁö¸¦ ¸í½ÃÀû À¸·Î ¹àÈ÷´Â °ÍÀÌ ÇÕ´çÇÏ´Ù. ¹àÈ÷´Â ¹æ¹ýÀº <Ç¥ 1>ÀÇ ¸Ç ¿À¸¥ÂÊ ¿­¿¡ »ó¼¼ È÷ ¾ð±ÞÇØ ³õ¾ÒÀ¸´Ï, ºÎµð ºü¶ß¸®Áö ¾Êµµ·Ï ÁÖÀÇÇϱ⠹ٶõ´Ù. ¸¹ÀÌ ¾²ÀÌ´Â ¼ÒÇü ¹× ´ëÇü ¸ðµ¨ÀÇ °æ¿ì´Â <Ç¥ 3>¿¡ ´Ù½Ã Çѹø ³ª¿­Çß´Ù. ¿Ö ±×·¡¾ß ÇÏ ´Â°¡ µûÁöÁö ¸»°í ±×Àú °ø½ÄÀ̶ó°í »ý°¢ÇÏ°í ´Þ´Þ ¿Ü¿ì¸é °ñÄ¡ ½âÈú ÇÊ¿ä ¾ø¾î¼­ ÁÁÀ» °ÍÀÌ´Ù. <Ç¥ 3> Æ÷ÀÎÅÍÀÇ Á¾·ù¿¡ µû¸¥ Á¤ÀÇ ¹æ¹ý +--------+----------------------+------------------+ | ÃʼÒÇü | ±Ù°Å¸® ÇÔ¼ö Æ÷ÀÎÅÍ | DW _TEXT:º¯¼ö¸í | +--------+----------------------+------------------+ | ¼ÒÇü | ±Ù°Å¸® µ¥ÀÌŸ Æ÷ÀÎÅÍ | DW DGROUP:º¯¼ö¸í | +--------+----------------------+------------------+ | ´ëÇü | ¿ø°Å¸® ÇÔ¼ö Æ÷ÀÎÅÍ | DD º¯¼ö¸í | +--------+----------------------+------------------+ | | ¿ø°Å¸® µ¥ÀÌŸ Æ÷ÀÎÅÍ | DD DGROUP:º¯¼ö¸í | +--------+----------------------+------------------+ <Ç¥ 3>¿¡¼­ _TEXT´Â CSÀÇ ¿É¼ÂÀÓÀ» Ç¥½ÃÇÏ°í DGROUPÀº DSÀÇ ¿É¼ÂÀÓÀ» Ç¥½ÃÇÑ´Ù. --------------------------------------------------------------------- 10 ¿ÜºÎ¸íĪÀÇ Á¤ÀÇ¿¡¼­ ÁÖÀÇÇÒ Á¡ --------------------------------------------------------------------- ¾î¼Àºí¸® ¼öÁØ¿¡¼­ÀÇ ¿ÜºÎ¸íĪ(external identifier)¿¡ ¼ÓÇÏ´Â °ÍÀº C ¼öÁØ¿¡¼­ÀÇ ¿ÜºÎº¯¼ö¿Í (¿ÜºÎ)ÇÔ¼öÀÇ µÎ °¡Áö »ÓÀÌ´Ù. ¿©±â¼­ ¿ÜºÎÇÔ¼ö¶õ Á¤ÀûÇÔ¼ö°¡ ¾Æ´Ñ ´Ù¸¥ ¸ðµç ÀϹÝÀûÀÎ ÇÔ¼ö¸¦ ¶æÇÑ´Ù. ´Ù¸¥¸íĪ°ú ´Þ¸® ¿ÜºÎ¸íĪÀº Ç×»ó PUBLIC¹®À» ½á¼­ ¿ÜºÎ(´Ù¸¥ ¸ðµâ) ¿¡ ±× Á¸À縦 ¾Ë·Á¾ß ÇÔÀº ÀÌ¹Ì Àß ¾Ë°í ÀÖÀ¸¸®¶ó ¹Ï´Â´Ù. ´Ù¸¸ ¿©±â¼­ ÁÖ ÀÇÇÒ Á¡Àº ´ÙÀ½°ú °°´Ù. +------------------------------------------------+ | ¾î¼Àºí¸® ¼öÁØ¿¡¼­ÀÇ ¸ðµç ¿ÜºÎ¸íĪÀº ±× ¼±µÎ¿¡ | | Ãß°¡ÀûÀÎ ¹ØÁÙ¹®ÀÚ '_'°¡ µ¡ºÙ¿©Á®¾ß ÇÑ´Ù. | +------------------------------------------------+ "Ãß°¡ÀûÀÎ"À̶ó´Â ´ë¸ñ¿¡ À¯ÀÇÇϱ⠹ٶõ´Ù. µû¶ó¼­ C ¼öÁØ¿¡¼­ ÀÌ¹Ì ¸íĪÀÌ ¹ØÁÙ¹®ÀÚ·Î ½ÃÀÛÇÏ´õ¶óµµ ¾î¼Àºí¸® ¼öÁØ¿¡¼­´Â ¹ØÁÙ¹®ÀÚ°¡ Ãß°¡·Î Çϳª ´õ ºÙ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°À¸¸ç ½Ç·Ê´Â <¸®½ºÆ® 8>¸¦ Âü°í Çϱ⠹ٶõ´Ù. C ¼öÁØ ¾î¼Àºí¸®¾î ¼öÁØ ------------------------- extvar _extvar _extvar __extvar ÇÑÆí C¿¡¼­´Â ¸ðµç ¿ÜºÎ¸íĪ(°ø¿ë(public)¸íĪ Æ÷ÇÔ)¿¡¼­ ´ë¼Ò¹®ÀÚ°¡ ±¸º°µÇ¾î¾ß ÇÑ´Ù(case-sensitive). µû¶ó¼­ ¸µÄ¿¸¦ »ç¿ëÇÒ ¶§ ´ë¼Ò¹®ÀÚ¸¦ ±¸º°Çϵµ·Ï ÇØ¾ß ÇÑ´Ù. ´ë¼Ò¹®ÀÚ¸¦ ±¸º°Çϵµ·Ï ¸µÄ¿¿¡°Ô Áö½ÃÇÏ´Â ¹æ¹ýÀº ÇØ´ç ¿É¼ÇÀ» ÁöÁ¤ÇÏ ´Â °ÍÀÌ´Ù. Åͺ¸ ¾î¼Àºí·¯ tasm¿Í Åͺ¸ ¸µÄ¿ tlink¸¦ ¾µ ¶§¿¡´Â °¢°¢ /mx, /c ¿É¼ÇÀ» ÁöÁ¤ÇÏ¸é µÇ°í, ¸ÅÅ©·Î ¾î¼Àºí·¯ masm°ú ¸µÄ¿ link¸¦ ¾µ ¶§¿¡´Â °¢°¢ /MX, /NOI ¿É¼ÇÀ» ÁöÁ¤ÇÏ¸é µÈ´Ù. ÀÚ¼¼ÇÑ »çÇ×Àº Áö¸é»ó ´ÙÀ½ ȸ·Î ¹Ì·ç°Ú´Ù. --------------------------------------------------------------------- 11 Á¤Àû µ¥ÀÌÅÍ Á¤ÀÇÀÇ ½Ç·Ê --------------------------------------------------------------------- ÀÚ, ±×·³ ÀÌÁ¦±îÁö Á¤Àû µ¥ÀÌÅÍÀÇ Á¤ÀÇ¿¡ °üÇØ ÀÍÈù °ÍÀ» ÃÑÁ¤¸®ÇØ º¸ ÀÚ. <¸®½ºÆ® 7>ÀÇ statdata.c´Â °¢Á¾ Á¤Àû µ¥ÀÌÅ͵éÀÇ Á¤ÀǸ¦ C·Î ÇØ ³õÀº °ÍÀÌ´Ù. <¸®½ºÆ® 8>Àº ¾Æ·¡¿Í °°ÀÌ ¼ÒÇü ¸ðµ¨¿¡¼­ statdat.c¸¦ ÄÄÆÄÀÏÇÑ °á°úÀÎ statdata.asmÀ» ¾Ë¾Æº¸±â ÁÁ°Ô Á¤¸®ÇÑ °ÍÀÌ´Ù. C:\TURBOC\WORK>tcc -S statdata <¸®½ºÆ® 8>¿¡¼­ À¯ÀÇÇÒ Á¡Àº Åͺ¸ C°¡ ³»ºÎÀûÀ¸·Î ³»ºÎÁ¤Àûº¯¼ö¿¡ º° µµÀÇ ¸íĪÀ» ºÎ¿©ÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ±¸Ã¼ÀûÀ¸·Î ¸»Çؼ­ µ¶ÀÚÀûÀÎ ¸íĪ À» ºÙÀÌÁö ¾ÊÀº ä·Î DW, DD µîÀ» ½á¼­ °ø°£¸¸ ¸¶·ÃÇÑ µÚ, Â÷ÈÄ¿¡ ÂüÁ¶ÇÒ ¶§¿¡´Â ÇØ´ç ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ¸¦ °¡¸®Å°´Â d@ ¶Ç´Â b@¿¡ ¿É¼ÂÀ» ´õÇؼ­ Âü Á¶ÇÑ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ´Ù¸¥ ÇÔ¼ö¿¡ ±× ¸íĪÀÌ ¾Ë·ÁÁöÁö ¾Ê´Â È¿°ú¸¦ °¡ Á®¿Â´Ù. ½Ç·Ê´Â <¸®½ºÆ® 9>ÀÇ _dummy ÇÔ¼ö ³»ÀÇ µÎ¹ø° mov ¸í·É¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ÀÌ´Â ¹®ÀÚ¿­ »ó¼ö°¡ º°µµÀÇ ¸íĪ ¾øÀÌ s@·Î ½ÃÀÛÇÏ´Â ¿µ¿ª¿¡ ³õÀδٴ Á¡°ú ¶È°°´Ù. ±×·¡¼­ ¹®ÀÚ¿­ »ó¼ö´Â Åͺ¸ C¿¡ ÀÇÇØ ³»ºÎÁ¤Àûº¯¼ö¿Í µ¿µîÇÏ °Ô Ãë±ÞµÈ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ´ÜÁö Â÷ÀÌÁ¡À̶ó¸é ¹®ÀÚ¿­ »ó¼ö´Â Ç× »ó ISD¿¡ ¼ÓÇÑ s@¿¡ ³õÀÌ´Â µ¥ ¹ÝÇÏ¿©, ³»ºÎÁ¤Àûº¯¼ö´Â ÃʱâÈ­ÀÇ ¿©ºÎ¿¡ µû¶ó ISD ¶Ç´Â UISD ¿µ¿ª¿¡ ³õÀδٴ Á¡¸¸ÀÌ ´Ù¸¦ »ÓÀÌ´Ù. Âü°í·Î s@, d@, b@´Â °¢ ¸ðµâ¸¶´Ù Çϳª¾¿ Á¸ÀçÇϸç, ¹°·Ð ¿ÜºÎ¸íĪÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ¸µÅ© ½Ã ¼­·Î Ãæµ¹ÇÏÁö ¾Ê´Â´Ù. <¸®½ºÆ® 7> °¢Á¾ Á¤Àû µ¥ÀÌÅÍÀÇ Á¤ÀÇ --------------------------------------------------------------------- /* File STATDATA.C */ int UISDvar; --- ÃʱâÄ¡¸¦ ¸í½ÃÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î UISD, ½ÇÇà Á÷ÈÄ 0À¸·Î ÃʱâÈ­µÈ´Ù. int ISDvar = 0; --- ÃʱâÄ¡°¡ 0ÀÌÁö¸¸ ISDÀÓ¿¡ ÁÖÀÇ char *neardataptr; --- ±Ù°Å¸® µ¥ÀÌÅÍ Æ÷ÀÎÅÍ char far *fardataptr; --- ¿ø°Å¸® µ¥ÀÌÅÍ Æ÷ÀÎÅÍ void (*nearfuncptr)(void); --- ±Ù°Å¸® ÇÔ¼ö Æ÷ÀÎÅÍ void (far *farfuncptr)(void); --- ¿ø°Å¸® ÇÔ¼ö Æ÷ÀÎÅÍ int extvar; --- ¸íĪ¿¡ ¹ØÁÙ¹®ÀÚ°¡ Ãß°¡ÀûÀ¸·Î int _extvar; --- µ¡ºÙÀ½À» È®ÀÎÇÒ °Í static int extstaticvar; --- ¿ÜºÎÁ¤Àûº¯¼ö (ÇÔ¼ö ¿ÜºÎ¿¡¼­ Á¤ÀÇµÈ Á¤Àûº¯¼ö) ¸íĪ¿¡ _°¡ µ¡ºÙÁö ¾ÊÀ½À» È®ÀÎÇÒ °Í void dummy(void) { static int instaticvar = 0; --- ³»ºÎÁ¤Àûº¯¼ö (ÇÔ¼ö ³»ºÎ¿¡¼­ Á¤ÀÇµÈ Á¤Àûº¯¼ö) µ¶ÀÚÀûÀÎ ¸íĪÀ» °¡ÁöÁö ¾ÊÀ½À» È®ÀÎÇÒ °Í instaticvar = extstaticvar; } --------------------------------------------------------------------- <¸®½ºÆ® 8> <¸®½ºÆ® 7>À» ¾î¼Àºí¸®·Î ÄÄÆÄÀÏ ÇÑ ÈÄ Á¤¸®ÇÑ °á°ú --------------------------------------------------------------------- ;************************************************ ; statdata ¸ðµâÀÇ ¾î¼Àºí¸® ¸®½ºÆ® ; (¼ÒÇü ¸Þ¸ð¸® ¸ðµ¨) ;************************************************ _TEXT SEGMENT BYTE PUBLIC 'CODE' ASSUME cs:_TEXT,ds:DGROUP,ss:DGROUP _dummy PROC NEAR mov ax,WORD PTR DGROUP:extstaticvar mov WORD PTR DGROUP:b@,ax ret | _dummy ENDP ³»ºÎÁ¤Àûº¯¼ö´Â º°µµÀÇ ¸íĪÀ» °¡ÁöÁö ¾ÊÀ¸¹Ç·Î b@¿¡ ¿É¼Â(¿©±â¼­´Â +0)À» ´õÇؼ­ ÂüÁ¶ÇÑ´Ù. _TEXT ENDS DGROUP GROUP _DATA,_BSS _DATA SEGMENT WORD PUBLIC 'DATA' d@ LABEL BYTE --- ÃʱâÈ­µÈ ³»ºÎÁ¤Àûº¯¼ö ¿µ¿ªÀÇ ¼±µÎ¸¦ d@w LABEL WORD --- °¡¸®Å°´Â ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ »ó¼ö _ISDvar LABEL WORD DW 0 s@ LABEL BYTE --- ¹®ÀÚ¿­ »ó¼öµéÀº ÀÌ°÷¿¡ ¸ð¾Æ µÐ´Ù. _DATA ENDS _BSS SEGMENT WORD PUBLIC 'BSS' b@ LABEL BYTE --- ÀÌ ¸ðµâÀÇ _BSS ¼¼±×¸ÕÆ®ÀÇ ¼±µÎ¸¦ b@w LABEL WORD --- °¡¸®Å°´Â ÀÏÁ¾ÀÇ Æ÷ÀÎÅÍ »ó¼ö DB 2 dup (?) --- ³»ºÎÁ¤Àûº¯¼ö instaticvar¸¦ À§ÇÑ °ø°£, º¸´Ù½ÃÇÇ ¸íĪÀÌ ºÙ¾îÀÖÁö ¾Ê´Ù. _extvar LABEL WORD DB 2 dup (?) _UISDvar LABEL WORD DB 2 dup (?) __extvar LABEL WORD --- ¹ØÁÙ¹®ÀÚ°¡ Ãß°¡ÀûÀ¸·Î µ¡ºÙ¿©Á³´Ù. DB 2 dup (?) _fardataptr LABEL dWORD DB 4 dup (?) _farfuncptr LABEL dWORD DB 4 dup (?) _neardataptr LABEL WORD DB 2 dup (?) _nearfuncptr LABEL WORD DB 2 dup (?) extstaticvar LABEL WORD --- ¿ÜºÎ¸íĪÀÌ ¾Æ´Ï¹Ç·Î DB 2 dup (?) ¹ØÁÙ¹®ÀÚ°¡ µ¡ºÙÁö ¾Ê¾Ò´Ù. _BSS ENDS _extstaticvar EQU extstaticvar PUBLIC _nearfuncptr PUBLIC _neardataptr PUBLIC _farfuncptr PUBLIC _fardataptr PUBLIC __extvar PUBLIC _UISDvar PUBLIC _extvar PUBLIC _dummy PUBLIC _ISDvar END --------------------------------------------------------------------- --------------------------------------------------------------------- 12 ´ÙÀ½¿¡´Â --------------------------------------------------------------------- À̹ø ´Þ¿¡ ¿ì¸®°¡ ¾Ë¾Æº» °ÍÀº Å©°Ô ´ÙÀ½°ú °°Àº ³»¿ëÀ¸·Î ¿ä¾àÇÒ ¼ö ÀÖ´Ù. 1. ISD¿Í UISDÀÇ ±¸ºÐ 2. ¼¼±×¸ÕÆ® ¹èÄ¡ ±ÔÄ¢ ¹× ¾î¼Àºí¸® ¸ðµâÀÇ ÀϹÝÀûÀÎ ¾ç½Ä 3. Á¤Àû µ¥ÀÌŸ(¿ÜºÎº¯¼ö ¹× Á¤Àûº¯¼ö)ÀÇ Á¤ÀÇ 4. ¿ÜºÎ¸íĪÀÇ Á¤ÀÇ¿¡¼­ ÁÖÀÇÇÒ Á¡ ¾ÆÁ÷ À̰͸¸À¸·Î´Â ¾î¼Àºí¸® ¸ðµâÀ» ÀÛ¼ºÇϱ⿡ ¿ªºÎÁ·ÀÌ´Ù. ±×°ÍÀº ´ÙÀ½ »çÇ×µé±îÁö ¿ÏÀüÇÏ°Ô ÀÍÈù ´ÙÀ½¿¡¾ß °¡´ÉÇØÁö±â ¶§¹®ÀÌ´Ù. 6, 8, 9¹ø »çÇ×Àº Áö³­ ´Þ¿¡ ´ëÃæÀº ¾ð±ÞÇß¾úÁö¸¸ ±×°É·Î´Â Á» ºÒÃæºÐÇÏ´Ù. 5. ´Ù¸¥ ¸ðµâ¿¡ Á¤ÀǵǾî ÀÖ´Â ¿ÜºÎ¸íĪÀÇ ÂüÁ¶ 6. (½Ç)¸Å°³º¯¼öÀÇ ÂüÁ¶ 7. ÀÚµ¿º¯¼ö Á¤ÀÇ ¹× ÂüÁ¶ 8. C ¸ðµâ¿¡¼­ ¾î¼Àºí¸® ¸ðµâÀÇ ÇÔ¼ö È£Ãâ 9. ¾î¼Àºí¸® ¸ðµâ¿¡¼­ C ¸ðµâÀÇ ÇÔ¼ö ¶Ç´Â ¶óÀ̺귯¸® ÇÔ¼öÀÇ È£Ãâ 10. ¾î¼Àºí·¯¿Í ¸µÄ¿ÀÇ »ç¿ë¹ý Áö¸é »çÁ¤»ó ÈĹݺο¡ ´ëÇÑ ¾ê±â´Â ´ÙÀ½ ȸ·Î ¹Ì·ï¾ß ÇÒ °Í °°´Ù. ´Ù À½ ´ÞÀÌ ´Ù°¡¿À±â Àü¿¡ À̹ø ȸÀÇ ¼³¸íÀ» ÃæºÐÈ÷ ¼ÒÈ­ÇØ ³»±â¸¦ ¹Ù¶ó¸ç ÀÌ ¸¸ ÁÙÀϱî ÇÑ´Ù. <Á¦4ȸ ³¡>  #54 ÀÓÀ롂 (turbo28 ) [°­ÁÂ] C±íÀº°÷5-1: ¾î¼Àºí¸® ÄÚµå Á¢¼Ó II 05/06 00:19 399 line ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î °ÔÀç: 1990.9 HWP/TXT º¯È¯: 1993.5.5 >>> Åͺ¸ 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 µîÀÇ Áö½ÃÀÚ¸¦ ¾²Áö ¾Ê°Ô µÉ °ÍÀÌ´Ù. <Á¦5ȸ ³¡>