¾î ¼À ºí ¸® H O W T O V 0 . 3 C ¿øÀúÀÚ : Francois-Rene Rideau rideau@ens.fr ¹ö Á¯ : 1996.6.15 0.3C ¹ø¿ªÀÚ : Çѵ¿ÈÆ ddoch@hitel.kol.co.kr ¹ø¿ªÀÏ : 1996.9.27 ( ¹ø¿ªÁÖ: ÀÌ ¹ø¿ª¹®¼­´Â ºÎÁ·ÇÑ ÀúÀÇ ¹®Àå½Ç·ÂÀ¸·Î Çʿ伺¿¡ ÀÇÇÏ¿© ¹ø¿ªÇÑ °á°ú·Î À߸øµÈ ¿À¿ª°ú Àǹ̿¡ ÀÌ»ó¾ø´Â ºÎºÐÀÌ ºüÁú ¼öµµ ÀÖÀ½À» ¹Ì¸® ¾Ë¸³´Ï´Ù. µû¶ó¼­ À߸øµÈ ¹ø¿ªÀ¸·Î ¿À´Â Ã¥ÀÓÀº Àú¿¡°Ô ¾øÀ¸¸ç, ¸¸ÀÏ ¼öÁ¤ÇØ¾ß ÇÒ °÷ÀÌ ÀÖ´Ù¸é Àú¿¡°Ô ¿¬¶ôÀ» ÇØÁֽñ⠹ٶó¸ç, ¿øÀúÀÇ ¿À·ù¶ó¸é ¿øÀúÀÚ¿¡°Ô ¿¬¶ôÇØÁֽñ⠹ٶø´Ï´Ù.) ¾î¼Àºí¸® HOWTO aka *Free* 32-bit x86 ¾î¼Àºí¸® FAQ aka Linux x86 ¾î¼Àºí¸® HOWTO == ÇÁ¸® ÇÁ·Î±×·¡¹Ö ÅøÀ» »ç¿ëÇÏ´Â x86 ¾î¼Àºí¸® ÇÏ¿ìÅõ == °Ë»ö¾î :assembly, assembler, free, macroprocessor, preprocessor, asm, inline asm, 32-bit, x86, i386, gas, as86, nasm Copyright (C) 1996 Francois-Rene Rideau. ¿©·¯ºÐµéÀº ÀÌ ¹®¼­¸¦ º¯°æÇÏÁö ¾Ê´Â ¼±¿¡¼­ ¸¶À½´ë·Î ¹èÆ÷ÇÒ ¼ö ÀÖÀ¸¸ç, Á¶±ÝÀÇ ÁÖ¼®Àº °¡Çصµ »ó°ü¾ø´Ù. ¿©·¯ºÐµéÀº ´Ù¸¥ °æ¿ì¿¡ ³ª¿¡°Ô À̹®¼­ÀÇ ¹èÆ÷¿¡ ´ëÇØ ÀÚÀ¯·Ó°Ô ¹°¾îº¼ ¼ö µµ ÀÖ´Ù. ¸®´ª½º ¹®¼­È­ °èȹÀÇ ÁøÇàÀÚµéÀº ÀÌ ¹®¼­¸¦ ÀÚÀ¯·Ó°Ô ÇÒ °ÍÀ̸ç, ´Ù¸¥ LDP ¹®¼­µéµµ °ð ¹Ù·Î Çã¶ôÀÌ µÉ °ÍÀÌ´Ù. Áß¿äÇÑ Á¡: ÀÌ ¹®¼­´Â ¾îµð±îÁö³ª º£Å¸ ¹öÁ¯ÀÌ´Ù. ¿©·¯ºÐµé¿¡°Ô´Â ´ÙÀ½°ú °°Àº Åö¼öÇÑ ±Ç¸® °¡ ÁÖ¾îÁø´Ù. Áú¹®Çϱâ, Áú¹®¿¡ ´äÇϱâ, ÁÖ¾îÁø ´äº¯À» ¹Ù·Î Á¤Á¤Çϱâ, »õ·Î¿î FAQ ´äº¯µé¿¡ Ãß°¡Çϱâ, ´Ù¸¥ ¼ÒÇÁÆ®¿þ¾î¿¡ ¾Ï½Ã¸¦ ÁÖ±â, ÇöÀçÀÇ °³¹ßÀÚ(³ª)¿¡°Ô ¿åÇϱâ, ±×¸®°í FAQÁøÇàÀ» ³ª´©¾î¼­ Çϱâ, ¿Ö³ÄÇÏ¸é ³ª´Â ´Ù¸¥ ÀÏÀ» ÇÏ°í Àֱ⠶§¹®ÀÌ´Ù... ´Ù¸¥ °æ¿ì, ³ª¿¡°Ô ¿¬¶ôÇØ ´Þ¶ó.( ¸ÞÀÏ: rideau@ens.fr ) ¾Æ¸¶µµ ¿ì¸®´Â Raymond Moon ¿¡°Ô comp.lang.asm.x86¿¡ ÀÖ´Â °ÅÀÇ FAQ¿¡ À̺κÐÀ» º¸Å´ °ÍÀ» ³³µæ½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù. ______________________________________________________________________ ¸ñÂ÷ 1. ½ÃÀÛ 1.1 ÀÌ ¹®¼­¸¦ È°¿ëÇÏ´Â ¹æ¹ý 1.2 ´Ù¸¥ °ü·Ã ¹®¼­ 2. ¾î¼Àºí·¯µé 2.1 GCC ÀζóÀÎ ¾î¼Àºí¸® 2.1.1 GCC°¡ ÀÖ´Â °÷ 2.1.2 GCC ÀζóÀÎ ¾î¼Àºí¸® DOCµéÀ» ±¸ÇÏ´Â °÷ 2.1.3 ¾î¶»°Ô GCC ¾È¿¡¼­ Á¤È®È÷ ¾î¼Àºí¸® Äڵ带 ºÒ·¯³»´Â°¡? 2.2 GAS 2.2.1 ¾îµð¼­ ãÀ» ¼ö Àִ°¡ 2.2.2 AT&T ¹®¹ýÀº ¹«¾ùÀ» ¸»Çϴ°¡ 2.2.3 2.2.3 Á¦ÇÑµÈ 16ºñÆ® ¸ðµå 2.3 2.3 GASP 2.3.1 2.3.1 GASP¸¦ ¾îµð¼­ ãÀ» °ÍÀΰ¡ 2.3.2 2.3.2 GASP´Â ¾î¶°ÇÑ ÀÏÀ» Çϴ°¡ 2.4 2.4 AS86 2.4.1 2.4.1 AS86À» ¾îµð¼­ ¾òÀ» ¼ö Àִ°¡ 2.4.2 docµéÀ» ¾îµð¼­ ãÀ» ¼ö Àִ°¡ 2.4.3 ¾î¶»°Ô ¾î¼Àºí·¯¸¦ ºÒ·¯¿À´Â°¡ ? 2.4.4 ÀÌ »õ·Î¿î ¹öÁ¯À¸·Î ¸®´ª½º¸¦ ÄÄÆÄÀÏ ÇÒ¼ö ¾ø´Ù¸é ¾î¶»°Ô ÇØ¾ß Çϴ°¡? 2.5 ´Ù¸¥ ¾î¼Àºí·¯µé 2.5.1 Win32Forth ¾î¼Àºí·¯ 2.5.2 NASM 2.5.3 Tunes 2.5.4 ÇÁ¸®°¡ ¾Æ´Ï°Å³ª 32ºñÆ®°¡ ¾Æ´Ñ x86 ¾î¼Àºí·¯µé 3. META ÇÁ·Î±×·¡¹Ö/ ¸ÅÅ©·Î ó¸® 3.1 À§¿¡¼­ ÅëÇÕµÈ °ÍÀ̶õ ¹«¾ùÀ» ¶æÇϴ°¡ 3.1.1 GCC 3.1.2 GAS 3.1.3 GASP 3.1.4 AS86 3.1.5 ´Ù¸¥ ¾î¼Àºí·¯µé 3.1.6 ¿ÜºÎ ÇÊÅÍ 3.1.7 CPP 3.1.8 M4 3.1.9 ÇÊÅ͸¦ ÅëÇÑ ¸ÅÅ©·Î ó¸® 3.1.10 ¸ÞŸ ÇÁ·Î±×·¡¹Ö 4. ÄÁº¥¼Ç ºÎ¸£±â 4.1 4.1 Linux 4.1.1 GCC·Î ¸µÅ©Çϱâ 4.1.2 ELF vs a.out ¹®Á¦µé 4.1.3 Á÷Á¢ÀûÀÎ ¸®´ª½º ½Ã½ºÅÛ ÄÝ 4.2 µµ½º 4.3 ¿©·¯ºÐµéÀÇ OS 4.3.1 ºÎÆ® ·Î´õ ÄÚµå¿Í 32ºñÆ® ¸ðµå·Î µé¾î°¡±â 4.3.2 ÇÁ·ÎÅؼÇÀÇ ±âÃÊ 4.3.3 ÀÎÅÍ·´Æ® ´Ù·ç±â 4.3.4 16ºñÆ® ½Ã½ºÅÛ ¼­ºñ½º¸¦ »ç¿ëÇÏ´Â V86/R86 ¸ðµå 4.3.5 À̰͵鿡 ´ëÇÑ Á¤º¸¸¦ ¾îµð¼­ ¾òÀ» °ÍÀΰ¡ 5. ÇØ¾ß ÇÒÀÏ ______________________________________________________________________ 1. ½ÃÀÛ ÀÌ ¹®¼­´Â ¸®´ª½º ¿î¿µÃ¼Á¦¿¡¼­ ÇÁ¸® ¾î¼Àºí·¯¸¦ »ç¿ëÇÑ 32ºñÆ® x86 ¾î¼Àºí¸® ÇÁ·Î±×·¡¹ÖÀ̳ª ÇÁ·Î±×·¥µé¿¡ ´ëÇØ Áú¹®ÇÏ´Â »ç¶÷µé¿¡°Ô ´äº¯Çϱâ À§ÇØ Á¦ÀÛ ÀÌ µÇ¾ú´Ù. ±×°ÍÀº ¶ÇÇÑ ÇÁ¸®°¡ ¾Æ´Ñ, x86ÀÌ ¾Æ´Ñ, 32ºñÆ® ¾î¼Àºí·¯°¡ ¾Æ´Ñ ±×·¯ÇÑ °Íµé¿¡ ´ëÇÑ ¹®¼­µéÀ» ¾ð±ÞÇÒ ¼ö ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¾î¼Àºí¸® ÇÁ·Î±×·¡¹Ö¿¡¼­ ÁÖ·Î Èï¹ÌÀÖ´Â ºÐ¾ß´Â ¿î¿µÃ¼Á¦, ¾ð¾î, °ÔÀÓ, C ÄÄÆÄÀÏ·¯°¡ Ç¥ÇöÀ» Á¦´ë·Î Çϱâ Èûµç ºÎºÐµéÀ» °Ç´õ¸®´Â °ÍÀÌ´Ù. ¿ì¸®´Â ±×·¯ÇÑ ¼ÒÇÁÆ®¿þ¾î °³¹ßÀ» ¸ñÇ¥·Î ÇÏ°í ÀÖ´Ù. 1.1. ÀÌ ¹®¼­¸¦ È°¿ëÇÏ´Â ¹æ¹ý ÀÌ ¹®¼­´Â Á¾Á¾ Áú¹®ÇÏ´Â °Íµé¿¡ ´ëÇÑ ´äº¯µéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. ¸¹Àº °æ¿ì, ¼ÒÇÁÆ®¿þ¾î³ª ¹®¼­ »çÀÌÆ®¿¡ URLÀÌ ÁÖ¾îÁø´Ù. °¡Àå À¯¿ëÇÑ »çÀÌÆ®°¡ ¹Ì·¯ µÇ¾ú°í, °¡±îÀÌÀÇ ¹Ì·¯ »çÀÌÆ®¸¦ ÅëÇØ ÀÌ¿ëÇÒ ¼ö ÀÖ ´Ù¸é, ¿©·¯ºÐµéÀº ¾Æ±î¿î ÀÚ½ÅÀÇ ½Ã°£À» ¹ö¸®Áö ¾Ê°í, ºÒÇÊ¿äÇÑ ³ë·ÂÀ» ÁÙÀÏ ¼ö ÀÕÀ» °ÍÀÌ´Ù. ƯÀÌÇÑ °æ¿ì¿¡, Àαâ»çÀÌÆ®¸¦ ¹Ì·¯ÇÏ´Â ¼¼°è¿¡¼­ ¾ÆÁÖ Å« »çÀÌÆ®°¡ ÀÖ´Ù. º¸ÅëÀº ¹Ì·¯¸®½ºÆ®µéÀÌ ÆÄÀÏ·Î Á¦°øµÉ ¼öµµ ÀÖ°í ¶Ç´Â, ·Î±ä ¸Þ¼¼Áö¿¡ ³ªÅ¸³­´Ù. Ãæ°í¸¦ ¹Þ¾Æµé¿©¶ó. ±×¹Û¿¡, ¿©·¯ºÐµéÀº ã°íÀÚ ÇÏ´Â °ÍÀ» archie¸¦ ÀÌ¿ëÇÔÀ¸·Î½á ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °¡Àå ÃÖ±ÙÀÇ ¹®¼­¹öÁ¯ÀÌ ÀÖ´Â °÷Àº ´ÙÀ½°ú °°´Ù. http://www.eleves.ens.fr:8080/home/rideau/Assembly ±×·¯³ª ¸®´ª½º ÇÏ¿ìÅõ ½ÎÀÌÆ®´Â Á¤¸» ¹ø°³°°ÀÌ ¾÷µ¥ÀÌÆ® µÈ´Ù. ³ªµµ ¸ð¸£´Â »çÀÌ¿¡.. sunsite.unc.edu/pub/linux/docs/HOWTO/ (?) 1.2. ´Ù¸¥ °ü·Ã ¹®¼­ * ¸¸ÀÏ ¿©·¯ºÐµéÀÌ ÇÁ¸® ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇØ Àß ¸ð¸¥´Ù¸é GNU °ø°ø ¶óÀ̼¾½º¸¦ ÁÖÀÇ ±í°Ô ÀÐ¾î º¸±æ ¹Ù¶õ´Ù. ±×°ÍÀº ¸¹Àº ÇÁ¸® ¼ÒÇÁÆ®¿þ¾îµé°ú ´ëºÎºÐÀÇ ¸ð µ¨¿¡¼­ »ç¿ëµÇ¾î Áö°í ÀÖ´Ù: º¸Åë "COPYING"À̶ó´Â ÆÄÀÏÀ̸§À¸·Î µé¾î ÀÖÀ¸¸ç, ¶óÀ̺귯¸®¹öÁ¯À̶ó¸é "COPYING.LIB" ¶ó´Â À̸§À¸·Î µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. FSF(free software foundation)ÀÇ ¹®Àå°¡µéÀº ¶ÇÇÑ ´ç½ÅÀ» µµ¿ï °ÍÀÌ´Ù. * Ưº°ÇÏ°Ô, Èï¹ÌÀÖ´Â ÇÁ¸® ¼ÒÇÁÆ®¿þ¾îµéÀº ´ëºÎºÐ ¼Ò½º¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â µ¥, ¿©·¯ºÐµéÀº ÀÌ°ÍÀ» Âü°íÇϰųª, ¼öÁ¤Çϰųª, ¶§·Î´Â ±×³É ±×´ë·Î Â÷¿ëÇؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿©·¯ºÐµé¿¡°Ô ÁÖ¾îÁö´Â ¶óÀ̼¾½º¸¦ ÁÖÀDZí°Ô ÀÐ°í ±×±â¿¡ µû¸£´Â °ÍÀÌ ÁÁ´Ù. * x86 ¾î¼Àºí¸® ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ÀϹÝÀûÀÎ Áú¹®°ú ¸î¸îÀÇ »ó¾÷ÀûÀÎ ¾î¼Àºí·¯ (16ºñÆ® µµ½ºÈ¯°æÀÇ..)¿¡ ´ëÇÑ Áú¹®¿¡ ´ëÇÑ ´äº¯µéÀ» ´ã°í ÀÖ´Â comp.lang. asm.x86À» À§ÇÑ FAQ°¡ ÀÖ´Ù. ±×Áß¿¡¼­ ¸î°³´Â ÇÁ¸® 32ºñÆ® ¾î¼Àºí¸® ÇÁ·Î±×·¡¹Ö¿¡ Àû¿ëÀÌ µÇ´Â µ¥, ¿©·¯ºÐ µéÀº ÀÌ FAQ¸¦ ´ÙÀ½¿¡¼­ ÀÐÀ» ¼ö ÀÖ´Ù. www2.dgsys.com/~raymoon/faq/asmfaq.zip * FAQµé°ú docµéÀº µ¶ÀÚ ¿©·¯ºÐµéÀÇ Ç÷§Æû»óÀÇ ÇÁ·Î±×·¡¹Ö¿¡ °ü·ÃµÈ °ÍµéÀÌ ÀÖ´Ù. ±×¸®°í Ç÷§Æû ÀÇÁ¸ÀûÀÎ °ÍµéÀº ¾î¼Àºí·¯¿¡¼­ ÇÁ·Î±×·¡¹Ö¿¡ ¹Ù·Î Àû¿ë ÀÌ µÇÁö ¾Ê´Â ´Ù´Â Á¡À» ÂüÁ¶ÇÏ¿©¾ß ÇÑ´Ù. 2. ¾î¼Àºí·¯µé 2.1. GCC ÀζóÀÎ ¾î¼Àºí¸® Àß ¾Ë·ÁÁø ¹Ù¿Í °°ÀÌ, GNU ÇÁ·ÎÁ§Æ®¿¡¼­ Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇÏ°í ÀÖ´Â ÃÖÀûÈ­µÈ 32ºñÆ® ÄÄÆÄÀÏ·¯ÀÎ GNU C/C++ ÄÄÆÄÀÏ·¯ (GCC)´Â x86 ¾ÆÅ°ÅØÃĸ¦°­·ÂÇÏ°Ô Áö¿ø ÇÑ´Ù. ±×¸®°í C ÇÁ·Î±×·¥¾È¿¡ ¾î¼Àºí¸® Äڵ带 »ðÀÔÇÒ ¼ö ÀÖ´Â ´É·ÂÀ» Á¦°øÇÑ´Ù. GCC ´Â ´ëºÎºÐÀÇ °¡´ÉÇÑ Ç÷§Æû¿¡¼­ µ¿ÀÛÇÑ´Ù. ±×Áß¿¡¼­µµ Linux, *BSD, VSTa, OS/2, *DOS, Win*, µîµî.. 2.1.1. GCC°¡ ÀÖ´Â °÷ GCC ¿øº»»çÀÌÆ®´Â prep.ai.mit.edu/pub/gnu/ ¿¡ ´Ù¸¥ GNU °èȹ¿¡ ÀÇÇÑ ¾îÇø®ÄÉÀÌ¼Ç ¼ÒÇÁÆ®¿þ¾îµé°ú °°ÀÌ ¹ßÇ¥µÈ´Ù. ±×¸®°í, ¶ÇÇÑ ¸¹Àº ¹Ì·¯ »çÀÌÆ®µéÀÌ Á¸ÀçÇÏ°í ÀÖ´Ù. ¿©·¯ºÐµéÀÇ °³¹æÀûÀÎ OS¿¡ ¸Âµµ·Ï °³Á¤µÈ ¼Ò½ºµé°ú ¹Ì¸® ÄÄÆÄÀÏµÈ ¹ÙÀ̳ʸ®µéÀÌ Åë»óÀûÀÎ FTP »çÀÌÆ®¿¡ÀÖ´Ù. inux ÀÇ GCC¸¦ »ç¿ëÇÑ´Ù¸é ¾Æ·¡¿¡ °¡º»´Ù. www.linux.org.uk/ °¡Àå Àαâ ÀÖ´Â µµ½º±â¹ÝÀÇ GCC´Â DJGPPÀÌ´Ù. ´ÙÀ½ »çÀÌÆ®ÀÇ µð·ºÅ丮¿¡¼­ ¹ß°ßÇÒ ¼ö ÀÖ´Ù: www.delorie.com/djgpp/ OS/2 ±â¹ÝÀÇ µµ½º¿¡¼­ ÀÛµ¿ÇÏ´Â GCC´Â ¶ÇÇÑ EMX¶ó ºÒ¸°´Ù; www.leo.org/pub/comp/os/os2/gnu/emx+gcc/ warp.eecs.berkeley.edu/os2/software/shareware/emx.html 2.1.2. GCC ÀζóÀÎ ¾î¼Àºí¸® DOCµéÀ» ±¸ÇÏ´Â °÷ GCC ¹®¼­´Â texinfo Æ÷¸äÀ¸·Î ¹®¼­ÆÄÀϵéÀ» Æ÷ÇÔÇÑ´Ù. ´ç½ÅÀº ±×°ÍÀ» Åؽº·Î º¯ ȯÇÒ ¼ö ÀÖ°í, Åؽº·Î ÄÄÆÄÀÏ ÇÒ¼öµµ ÀÖÀ¸¸ç, ÇÁ¸°Æ®¸¦ ÇÏ´øÁö, À̸·½º .infoÆÄÀÏ À̳ª ºê¶ó¿ìÀú, ±âŸ ¿©·¯ºÐµéÀÌ ÁÁ¾ÆÇÏ´Â Æ÷¸äÀ¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù. .info ÆÄÀÏÀº GCCÀÇ ±¦ÂúÀº ¼³Ä¡º»¿¡´Â µé¾î ÀÖ´Â °Í °°´Ù. ±× ºÎºÐÀº ´ÙÀ½°ú °°´Ù: C È®Àå::È®ÀåµÈ Asm:: ºÎºÐ GCC ºÒ·¯¿À±â::¼­ºê¸ðµ¨ ¿É¼Ç::i386 ¿É¼Ç:: ÀÌ·¯ÇÑ °ÍµéÀÌ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ¼¼¼¼ÇÏ°Ô º¸¸é, ±×°ÍÀº i386ÀÇ ·¹Áö½ºÅ͸¦ À§ ÇØ Æ¯º°È÷ ±ÔÁ¤µÈ À̸§À» Á¦°øÇÑ´Ù: abcdSDB ´Â %eax, %ebx, %ecx, %edx,%esi, %edi, %ebp ¿Í Çϳª¾¿ ÀÏÄ¡ÇÑ´Ù. (%esp¿¡´Â ±ÛÀÚ°¡ ¹è´çµÇ¾î ÀÖÁö ¾Ê´Ù.) HTML Æ÷¸äÀ¸·Î º¯È¯µÈ ÀÌ·¯ÇÑ ¹®¼­µé°ú ºÎºÐµéÀÇ URLÀº ´ÙÀ½°ú °°´Ù. www.cygnus.com/doc/usegcc_89.html #SEC92 DJGPP °ÔÀÓ¸®¼Ò½º (°ÔÀÓ ÇØÄ¿µé¿¡°Ô »Ó¸¸ÀÌ ¾Æ´Ï¶ó)´Â Ưº°ÇÏ°Ô ¾î¼Àºí¸®¿¡ °üÇÑ ÀÌ·¯ÇÑ ÆäÀÌÁö¸¦ °¡Áö°í ÀÖ´Ù: www.rt66.com/~brennan/djgpp/djgpp_asm.html ¸¶Áö¸·À¸·Î, ÀÌ·¯ÇÑ À¥ÆäÀÌÁöµéÀº "DJGPP Quick ASM Programming Guide" ·Î ºÒ¸®¿öÁö°í FAQµé°ú AT&T x86 ¾î¼Àºí¸® ¹®¹ý, ¸î¸îÀÇ ÀζóÀÎ ¾î¼Àºí¸® Á¤º¸, .obj/.lib ÆÄÀϵéÀ» º¯È¯ÇÏ´Â °Íµé¿¡ ´ëÇÑ °Íµé·Î °¡µæÂ÷ ÀÖ´Ù. remus.rutgers.edu/~avly/djasm.html GCC ´Â ¾î¼Àºí¸µ¿¡¼­´Â GAS¿¡ ÀÇÁ¸ÇÏ°í ¾Æ·¡ÀÇ ¹®¹ýÀ» µû¸¥´Ù; ÀζóÀÎ ¾î¼Àºí¸®´Â ÀοëµÈ ÆÛ¼¾Æ® ¹®ÀÚ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ±×·¡¼­ ±×°ÍµéÀº GAS ¿¡°Ô·Î °Ç³×Áø´Ù. ¾Æ·¡ÀÇ GAS¿¡ ´ëÇÑ ºÎºÐÀ» º¸ÀÚ. ¸¹Àº À¯¿ëÇÑ ¿¹Á¦µéÀ» ¸®´ª½ºÀÇ linux/include/asm-i386/ ¼Ò½º ¼­ºêµð·ºÅ丮 ¿¡¼­ ã¾Æº¸ÀÚ. 2.1.3. ¾î¶»°Ô GCC ¾È¿¡¼­ Á¤È®È÷ ¾î¼Àºí¸® Äڵ带 ºÒ·¯³»´Â°¡? ÃÖÀûÈ­¿Í ÀζóÀÎ ¾î¼Àºí¸®¸¦ °¡´ÉÇÏ°Ô Çϱâ À§Çؼ­ GCC ¸¦ "-O" Ç÷¡±×¿Í °°ÀÌ ºÒ·¯³»ÀÚ. ±×·¸°Ô ÇÏÁö ¾Ê´Â ´Ù¸é, ÄÚµå´Â ÄÄÆÄÀϵDZâ´Â Çϳª, Á¤È®È÷ µ¿ÀÛÇÏÁö ¾ÊÀ» °Í ÀÌ´Ù. Á» ´õ ÀϹÝÀûÀ¸·Î, x86 Ç÷§Æû¿¡¼­ ÁÁÀº ÄÄÆÄÀÏ Ç÷¡±×´Â gcc -O2 -fomit-frame-pointer -m386 Á¤µµ°¡ µÉ °ÍÀÌ´Ù. -O2 ´Â ÁÁÀº ÃÖÀûÈ­ ·¹º§ÀÌ´Ù. ÃÖÀûÈ­¿¡ ´õÇÏ¿© ÄÄÆÄÀÏ·¯´Â Äڵ带 Å©°Ô ¸¸µç´Ù. ±×·¯³ª ±×°ÍÀº ´ÜÁö bit fasterÀÏ »ÓÀÌ´Ù; ±×·¯ÇÑ °ú´ÙÇÑ ÃÖÀûÈ­´Â ·çÇÁ¸¦ ŸÀÌÆ®ÇÏ°Ô ¸¸µå´Â µ¥ Á¤µµ¿¡¸¸ À¯¿ëÇÒ ¼ö ÀÖ´Ù. ¿©·¯ºÐµéÀÌ ¾î¶»°Ôµç ¾î¼Àºí¸®¿¡¼­ »ç¿ëÇÑ´Ù¸é ¸»ÀÌ´Ù. ±×°ÍÀÌ ÇÊ¿äÇÏ´Ù¸é ÇÊ¿äÇÑ ¸¸Å­¸¸ÀÇ ·çƾµé¿¡ »ç¿ëÇ϶ó. -fomit-frame- pointer ´Â stupid frame pointer maintenance¸¦ °Ç³Ê¶Ù°Ô Äڵ带 »ý¼º½ÃÅ°°í, Äڵ带 Á»´õ ÀÛ°í ºü¸£°Ô ¸¸µé¸ç, ±× ÀÌ»óÀÇ ÃÖÀûÈ­¸¦ À§Çؼ­ ·¹Áö½ºÅ͸¦ ÀÚÀ¯·Ó°Ô ÇÑ´Ù. ÀÌ°ÍÀº µð¹ö±ë Åø(gdb)µéÀ» »ç¿ëÇϱ⠾î·Æ°Ô ¸¸µé±ä Çϳª, ´õÀÌ»ó »çÀÌÁî¿Í ¼Óµµ ¸¦ Çâ»ó ½Ãų ¼ö ¾øÀ» °ÍÀÌ´Ù. -m386 Àº ¾î¶°ÇÑ ¼ÓµµÀÇ ÀúÇϾøÀÌ Á» ´õ ÄÞÆÑÆ®ÇÑ Äڵ带 »ý¼ºÇØ ³½´Ù. ( ÀÛÀº ÄÚµå´Â ¶ÇÇÑ µð½ºÅ© ÀÔÃâ·ÂÀ» Àû°Ô ¼öÇàÇÏ°í ºü¸¥ ½ÇÇàÀ» ÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ.) ±×·¯³ª ¾Æ¸¶µµ À§¿¡ ¾ð±ÞÇÑ Å¸ÀÌÆ®ÇÑ ·çÇÁ»ó¿¡¼­ ÀÏ °ÍÀÌ´Ù. Á»´õ ÃÖÀûÈ­ ÇÏ·Á¸é, -mregparm=2 ¿É¼ÇÀ̳ª ÀÌ¿¡ ´ëÀÀÇÏ´Â ÇÔ¼ö°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù. ±×·¯³ª ¿ÜºÎ ÄÚµå¿Í ¸µÅ·À» ÇÒ¶§¿¡´Â ¸¹Àº ¹®Á¦Á¡µéÀÌ ¿©·¯ºÐµéÀ» ±«·ÓÈ÷°Ô µÉ °ÍÀÌ´Ù. ¿©·¯ºÐµéÀº ÀÌ·¯ÇÑ Ç÷¡±×µéÀ» ±âº»¼³Á¤ÆÄÀÏÀÎ /usr/lib/gcc-lib/i486-linux/2.7.2/specs ¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. (ÀÌ ÆÄÀÏÀº ½Ã½ºÅÛ¿¡ µû¶ó Á¶±Ý Ʋ¸± ¼ö ÀÖ´Ù.) 2.2. GAS GAS´Â GCC¿Í ÇѽÖÀ¸·Î ¿òÁ÷ÀÌ´Â GNU ¾î¼Àºí·¯ÀÌ´Ù. 2.2.1. ¾îµð¼­ ãÀ» ¼ö Àִ°¡ binutils¶ó À̸§ºÙ¿©Áø ÆÐÅ°Áö ¼Ó¿¡ GCC°¡ ÀÖ´Â °°Àº °÷¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. 2.2.2. AT&T ¹®¹ýÀº ¹«¾ùÀ» ¸»Çϴ°¡ GAS´Â 32ºñÆ® À¯´Ð½º ÄÄÆÄÀÏ·¯¸¦ Á¦°øÇϱâ À§ÇØ Ã¢¾ÈµÇ¾ú±â ¶§¹®¿¡ Ç¥ÁØ AT&T ¹®¹ýÀ» ÀÌ¿ëÇÑ´Ù. AT&T ¹®¹ýÀº ¸¹Àº °ÍµéÀÌ Ç¥ÁØ 680x0 ¾î¼Àºí·¯¿Í ´à¾Ò´Ù. ÀÌ ¹®¹ýÀº "Intel" ¹®¹ý¿¡ ºñÇؼ­ ÁÁÁöµµ ¾Ê°í, ³ª»ÚÁöµµ ¾Ê´Ù. ´ÜÁö ´Ù¸¦ »ÓÀÌ´Ù. ¿©·¯ºÐµéÀÌ ±×°ÍÀ» »ç¿ëÇغ¸°Ô µÇ¸é, ÀÎÅÚ ¹®¹ý¿¡ ºñÇØ Á»´õ ¸¹Àº ±ÔÄ¢ÀÌ ÀÖÀ½ À» ¾Ë°Ô µÉ °ÍÀÌ´Ù. ¿©·¯ºÐµéÀÌ ÇÁ·Î±×·¥À» º¯È¯ÇÏ´Â °ÍÀ» µ½±â À§ÇÑ ÇÁ·Î±×·¥ÀÌ Á¸ÀçÇÑ´Ù. ÀÌ°ÍÀº TASM ¹®¹ýÀ» AT&T ¹®¹ýÀ¸·Î º¯È¯ÇÏ´Â °ÍÀÌ´Ù. ftp.oulu.fi/pub/msdos/programming/convert/ta2asv08.zipgas.doc À̳ª as.docÆÄÀÏ(GAS¸¦ ãÀº °°Àº °÷ ÁÖÀ§¿¡ ÀÖÀ» °ÍÀÌ´Ù)Àº ±× ¹®¹ýÀ» ±â¼úÇÑ´Ù. ´ÙÀ½ÀÇ FTP µð·ºÅ丮¿¡ ÀÖ´Ù sunsite.unc.edu/pub/linux/GCC/ sunsite.doc.ic.ac.uk/packages/linux/sunsite.unc-mirror/GCC/ (?) ´Ù½ÃÇѹø À̾߱âÇÏÁö¸¸, ¸®´ª½º¿¡´Â ±¦ÂúÀº ¿¹µéÀÌ µé¾îÀÖ´Ù; ¾Æ·¡ÀÇ linux/arch/i386ÀÇ ´ÙÀ½ ÆÄÀϵéÀ» º¸¶ó: kernel/entry.S, kernel/head.S, boot/compressed/head.S, mathemu/*.S 2.2.3. 2.2.3 Á¦ÇÑµÈ 16ºñÆ® ¸ðµå GAS ´Â 32ºñÆ® ¾î¼Àºí·¯À̸ç 32ºñÆ® ÄÄÆÄÀÏ·¯¸¦ Á¦°øÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. GAS ´Â ÇöÀç Á¦ÇÑµÈ 16 ºñÆ®¸ðµå¸¦ Á¦°øÇϴµ¥, ±× 16ºñÆ®¸ðµå´Â ¹Ì¸® ¿¹ºñµÈ, ¸í·É¾îµéÀÇ 32ºñÆ® Á¢µÎ¾î·Î ÀÌ·ç¾îÁ® ÀÖÀ¸¸ç, µû¶ó¼­ 32ºñÆ® CPU»óÀÇ 16ºñÆ® ¸ðµå¿¡¼­ µ¹¾Æ°¡´Â 32ºñÆ® ¸ðµå¸¦ ¾µ ¼ö ÀÖ´Ù. ¾ç¸ðµå¿¡¼­ °øÈ÷, ±×°ÍÀº 16ºñÆ® ·¹Áö½ºÅÍ »ç¿ëÀÌ °¡´ÉÇϳª, 16ºñÆ® ¾îµå·¹½Ì Àº Á¦°øÇÏÁö ¾Ê´Â´Ù. ¸ðµå»çÀ̸¦ ÀüȯÇÏ·Á¸é "code16"°ú "code32"ÀÇ Áö½ÃÀÚ¸¦ »ç¿ëÇ϶ó. ÀζóÀÎ ¾î¼Àºí¸®¿¡¼­ÀÇ asm("code16\n") »óÅ´ 32ºñÆ® GCC·Î ÇÏ¿©±Ý ¸®¾ó¸ðµå! ¿¡¼­ µ¹¾Æ°¡´Â Äڵ带 ¸¸µé°ÍÀ» Çã¿ëÇÑ´Ù. ¿©·¯ºÐµéÀÌ ÇÊ¿äÇÏ´Ù°í ´À³¤´Ù¸é Ç® 16ºñÆ®¸¦ »ç¿ëÇÔÀ¸·Î½á ¸¶À½²¯ ´©·Áº¸ÀÚ. 2.3. 2.3 GASP GASP ´Â GASÀÇ Àü󸮱âÀÌ´Ù. ÀÌ°ÍÀº GAS¿¡ ¸ÅÅ©·Î¿Í ¸î¸î ±¦ÂúÀº ¹®¹ýÀ» Ãß°¡½ÃŲ´Ù. 2.3.1. 2.3.1 GASP¸¦ ¾îµð¼­ ãÀ» °ÍÀΰ¡ ³ª´Â Á¤È®ÇÏ°Ô ¸ð¸¥´Ù. GNU »çÀÌÆ® (prep.ai.mit.edu & mirrors)¸¦ º¸±â¹Ù¶õ´Ù. ¾Æ¸¶µµ GAS¿Í °°ÀÌ binutils ÆÐÅ°Áö¿¡ °°ÀÌ ÀÖÀ» °ÍÀÌ´Ù. 2.3.2. 2.3.2 GASP´Â ¾î¶°ÇÑ ÀÏÀ» Çϴ°¡ ³­ ¾Æ¹« »ý°¢ÀÌ ¾ø´Ù, ±×·¯³ª ±×°ÍÀº ÀÚüÀÇ texinfo ¹®¼­°¡ µû¶ó¿Ã °ÍÀÌ´Ù. ±×·¡¼­ ±×°ÍÀ» ÇÁ¸°Æ® Çؼ­ º¸¶ó, ¾Æ´Ï¸é .info ÆÄÀϵéÀ» ºê¶ó¿ìÁîÇϱ⠹ٶõ´Ù. ¸ÅÅ©·Î ¾î¼Àºí·¯ÀÇ ±ÔÄ¢À» ³ª¿¡°Ô º¸³»ÁÖ¸é ÁÁ°Ú´Ù. 2.4. 2.4 AS86 AS86Àº Bruce Evans' C ÄÄÆÄÀÏ·¯ ºÎºÐÁßÀÇ 16ºñÆ®, 32ºñÆ®¸¦ ´Ù °°ÀÌ Á¦°øÇÏ´Â 80x86 ¾î¼Àºí·¯ÀÌ´Ù. ±×°ÍÀº ÃÖ±ÙÀÇ ÀÎÅÚ ¹®¹ýÀ» °¡Áö°í ÀÖÀ¸¸ç as¿Í Á¶±Ý ¾îµå·¹½Ì ¸ðµå¸¦ ´Þ¸®ÇÑ´Ù. 2.4.1. 2.4.1 AS86À» ¾îµð¼­ ¾òÀ» ¼ö Àִ°¡ ¿ÏÀüÈ÷ ½Ã´ë¿¡ µÚ¶³¾îÁø AS86Àº HJLu¿¡ ÀÇÇØ ¹èÆ÷µÇ¸ç ¹Ù·Î ¸®´ª½º Ä¿³ÎÀ» ÄÄ ÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÆÐÅ°Áö´Â bin86(ÇöÀç¹öÁ¯ 0.3)·Î µÇ¾î ÀÖÀ¸¸ç Linux GCC »çÀÌÆ®¿¡¼­ ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ³»°¡ º¸±â¿¡´Â ¸®´ª½º ÄÄÆÄÀϸµÀ» Á¦¿ÜÇÏ°í´Â ¾Æ¹«°÷¿¡µµ »ç¿ëµÇÁö ¾Ê°í ÀÖ´Ù. ÀÌ ¹öÁ¯Àº ¿À·ÎÁö ÇØÅ·µÈ ¹Ì´Ð½º ¿ÀºêÁ§Æ® ÆÄÀÏ Æ÷¸äÀ» Á¦°øÇϸç 32ºñÆ®¸ðµå¿¡¼­ ´Â Á¶±ÝÀÇ ¹ö±×°¡ Àִµ¥, ´ÜÁö ¸®´ª½º¸¦ ÄÄÆÄÀϸ¸ Çϱâ À§Çؼ­¶ó¸é ±¦ÂúÀ¸¸®¶ó. °¡Àå ÃÖ±ÙÀÇ ¹öÁ¯Àº FreeBSD ¹èÆ÷ÆÇ°ú °°ÀÌ Ãâ½ÃµÇ¾ú´Ù. ³ª´Â ±×°ÍÀ» ´ÙÀ½¿¡¼­ ±¸Çß´Ù. ftp.ibp.fr/pub/FreeBSD/packages-2.1/development/bcc-95.3.12.tgz ±×·¯³ª ±× ¹öÁ¯ÀÌ ÀÌÁ¦ ¸¹ÀÌ ¹ßÀüÇßÀ» °ÍÀÌ´Ù. ¿©·¯°³µé Áß¿¡¼­ AS86µµ ÀÌÁ¦ ¸®´ª½º GNU a.out Æ÷¸ËÀ» Áö¿øÇÑ´Ù. ±×·¡¼­ ¿©·¯ºÐ µéµµ Äڵ带 ¸®´ª½º ÇÁ·Î±×·¥¿¡ ¸µÅ©¸¦ ½Ãų ¼ö ÀÖ°í, µ¥ÀÌŸ¸¦ ´Ù·ç±â À§ÇØ GNU binutil ÆÐÅ°ÁöÀÇ º¸ÅëÀÇ ÅøÀ» »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ¹öÁ¯Àº ÀÌÀüÀÇ °Íµé°ú ÇÔ²² ¾Æ¹«·± ¼Õ»ó¾øÀÌ °øµ¿À¸·Î Á¸ÀçÇÒ ¼ö ÀÖ´Ù. (¾Æ·¡ÀÇ Áú¹® 2.4.4¸¦ º¸¶ó). BCC ÀÇ 1995.3.12 ÀÌÀüÀÇ ¹öÁ¯µéÀÌ ½Ç¼öÇÑ ÀÌÀ¯´Â 32ºñÆ® ¸ðµå ÇÁ·Î±×·¡¹Ö ½Ã¿¡ ¸ðµç ¼¼±×¸ÕÆ® ÆË°ú Ǫ½¬¸¦ 16ºñÆ®·Î ó¸®ÇÔÀ¸·Î½á ¸Å¿ì ¹ø°Å·Ó°Ô µÈ µ¥ ÀÖ¾ú´Ù. ±× ÆÐÄ¡°¡ Tunes ÇÁ·ÎÁ§Æ®¿¡ ÀÇÇØ ´ÙÀ½¿¡ ¹ßÇ¥µÇ¾ú´Ù. www.eleves.ens.fr:8080/home/rideau/Tunes/ º¸Á¶ÆäÀÌÁö´Â files/tunes.0.0.0.25.src.tgz ÀÌ´Ù. Ç®¸° ¼­ºêµð·ºÅ丮ÀÇ LLL/i386/ ±× ÆÐÄ¡´Â ¶ÇÇÑ ¹Ù·Î ´ÙÀ½¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. www.eleves.ens.fr:8080/home/rideau/files/as86.bcc.patch.gz Bruce Evans ´Â ÀÌ ÆÐÄ¡¸¦ ¹Þ¾Æµé¿´´Âµ¥, °¡Àå ÃÖ±ÙÀÇ bcc ¹öÁ¯Àº ÀÌ ÆÐÄ¡ ¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Ù. µµ½º »ç¿ëÀÚ¸¦ À§ÇÑ ÁÖÀÇ»çÇ×: o µµ½º¿¡¼­ ÄÄÆÄÀÏ ÇÏ·Á¸é POSIX_HEADERS_MISSING ¸¦ ¸ÕÀú Á¤ÀÇÇ϶ó. o bcc/as¿¡ À־ DJGPP¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é mops.cÀÇ mcall() ÇÔ¼ö¿¡¼­ "far"¶ó°í À̸§ ºÙ¿©Áø °ÍÀ» °ªÀ» ¹Ù²ã¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¸î¸î µµ½º ÄÄÆÄÀÏ·¯¿¡¼­´Â "far"´Â ¿¹¾à¾îÀ̱⠶§¹®ÀÌ´Ù. bcc/ld µð·ºÅ丮·ÎºÎÅÍ typeconf.obj·Î ¸µÅ©¸¦ ½ÃÄÑ¾ß ÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇ϶ó. o bcc/ld¿¡ À־ ¾Æ¸¶µµ a.out.h¿Í ar.hÀÇ º¹»çº»ÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. DJGPP´Â ±×°ÍÀ» °¡Áö°í Àִµ¥, ´Ù¸¥ C ÄÄÆÄÀÏ·¯ ÀÏ °æ¿ì¿¡´Â ´Ù¸¥ GCC(µµ½º, ¸®´ª½º, VSTa, µîµî)¿¡¼­ ¸ô·¡ »ì¦ ÇØ¾ß ÇÒ °ÍÀÌ´Ù. ( ^.% ) o bcc/ld¿¡ À־ BSD_A_OUT ¸ÅÅ©·ÎÁ¤ÀǸ¦ ¸ðµç ÆÄÀÏ¿¡¼­ ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» °ÍÀÌ´Ù. ±×¸®°í STADARD_GNU_A_OUT Á¤ÀǸ¦ writebin.c¿¡ ÇØµÎ°í ¸®´ª½º a.out.h º¹»çº»À» »ç¿ë°¡´ÉÇÑ µµ½º À̸§À¸·Î º¯°æÇÑ´Ù. o turnsÀÇ ¸®´ª½º a.outÀº asm/a.out.h¿¡ Æ÷ÇÔÀÌ µÇ¾î Àִµ¥, À̰͵µ Æ÷ÇÔÀÌ µÇ µµ·Ï ÇØ¾ß ÇÑ´Ù. 16ºñÆ® ¾î¼Àºí·¯¿¡¼­´Â asm/a.out.h¸¦ 24ºñÆ® º¸´Ù ÀûÀº ºñÆ® Çʵå·Î ¼¼Æ®µÈ °Í¿¡ ´ëÀÀÇÏ´Â 24ºñÆ® ºñÆ®Çʵ带 º¯°æÇÏ¿©¾ß ÇÑ´Ù. o ³ª´Âcc1À» ½ÃµµÇØ º¸Áö ¾Ê¾Ò´Âµ¥, ±×·¯³ª ½ÇÁ¦·Î ¿©·¯ºÐµéÀÌ Çغ¸°í ½Í´Ù¸é cc1À» ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª, ¾Æ¸¶µµ bcc frontend¸¦ ´Ù½Ã Àû¾î¾ß Çϰųª ¹Ù·Î cc1À» »ç¿ëÇØ¾ß ÇÒ°ÍÀÌ´Ù.¿Ö³ÄÇÏ¸é ±×°ÍÀº ÄÄÆÄÀÏ ½Ã cc1, as, ld¸¦ ÀÛµ¿½Ãų ¶§ fork()/exec()/wait() Æ®·¹ºí¿¡ ÀÇÁ¸Çϱ⠶§¹®ÀÌ´Ù. o Àüó¸®µÈ µµ½º¹öÁ¯Àº ´ÙÀ½¿¡¼­ ¹ß°ßÇÒ ¼ö ÀÖ´Ù. www.eleves.ens.fr:8080/home/rideau/files/asld86.zip ¸¸ÀÏ ±×°ÍµéÀ» ÇÁ¸® ÄÄÆÄÀÏ·¯·Î Á¦ÄÄÆÄÀÏÀ» ÇÏ°Ô µÈ´Ù¸é ³ª¿¡°Ô º¸³»´Þ¶ó. ±×·¯¸é ¸Å¿ì °í¸¶¿ï °ÍÀÌ´Ù. 2.4.2. docµéÀ» ¾îµð¼­ ãÀ» ¼ö Àִ°¡ docµéÀº bcc ÆÐÅ°Áö¿¡ Æ÷ÇÔÀÌ µÇ¾î ÀÖ´Ù. ¸ÇÆäÀÌÁöµµ ¶ÇÇÑ FreeBSD »çÀÌÆ®ÀÇ ¾î ´À °÷ÀÌ´øÁö ±¸ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀǽÉÀÌ °£´Ù¸é, ±×µé ¼Ò½º¿¡ °¡²û ±¦ÂúÀº docµéÀÌ ÀÖ´Ù: ±×¸® Àß ¼³¸íÀÌ µÈ °ÍÀº ¾Æ´ÏÁö¸¸, ÇÁ·Î±×·¡¹Ö ½ºÅ¸ÀÏÀº ±ú²ýÇÏ°Ô µÇ¾î ÀÖ´Ù. °ü½ÉÀÌ ÀÖ´Ù¸é Tunes 0.0.0.25 ¿¡¼­ ¾î¶»°Ô as86ÀÌ »ç¿ëµÇ¾ú´Â Áö¸¦ »ìÆ캸¶ó. 2.4.3. ¾î¶»°Ô ¾î¼Àºí·¯¸¦ ºÒ·¯¿À´Â°¡ ? bcc¸¦ »ç¿ëÇؼ­ .s ¾î¼Àºí¸® ¼Ò½º ÆÄÀÏÀ» GNU a.out .o ¿ÀºêÁ§Æ® ÆÄÀÏ, .l ¸®½ºÆà ÆÄÀÏ·Î º¯È¯ÇÏ´Â GNU ¸ÞÀÌÅ© ÆÄÀÏÀÇ ¿¹¸¦ Çϳª µé¾îº¸ÀÚ. %.o %.l: %.s bcc -3 -G -c -A-d -A-l -A$*.l -o $*.o $< ¾î¶°ÇÑ ¸®½ºÆà ÆÄÀϵµ ¹ºÇÏÁö ¾Ê´Â´Ù¸é "%.l", "-A-l", "-A$*.l"À» ¾ø¾Ö¶ó. GNU a.out ÀÌ¿ÜÀÇ °ÍÀ» ¾ò°íÀÚ ÇÑ´Ù¸é bcc docÁß¿¡¼­ ´Ù¸¥ Á¦°øÇÏ´Â Æ÷¸Ë¿¡ ´ëÇÑ ±ÛÀ» º¸°Å³ª GNU binutils ÆÐÅ°ÁöÀÇ objcopy À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. 2.4.4. ÀÌ »õ·Î¿î ¹öÁ¯À¸·Î ¸®´ª½º¸¦ ÄÄÆÄÀÏ ÇÒ¼ö ¾ø´Ù¸é ¾î¶»°Ô ÇØ¾ß Çϴ°¡? ¸®´©½º´Â ¸ÞÀÏ·Î ¿Õ¼ºÇÏ°Ô È°µ¿ÇÏ°í ÀÖ´Ù. ¸®´ª½º a.out as86À¸·Î ¸®´ª½º¸¦ ÄÄ ÆÄÀÏÇÏ´Â ³ªÀÇ ÆÐÄ¡µµ ±×°ÍÀ» ¸¸µéÁö ¸øÇÑ´Ù. ÀÌÁ¦, À̰͵éÀÌ ¼º°øÇÏÁö ¸øÇÑ´Ù¸é: bin86 ÆäÅ°Áö¾ÈÀÇ /usr/bin¿¡ ÀÖ´Â ¿©·¯ºÐµéÀÇ as86 À» °¡Áö°í ÀÖ°í, ´õ ÁÁÀº as86À» /usr/local/libexec/i386/bcc/as¿¡ °¡Á®´Ù ³õ¾Æ¶ó. ¾Æ¸¶µµ ÀÌ "ÁÁÀº" as86À» ºÎ¸¦ ÇÊ¿ä°¡ ´õÀÌ»ó ¾øÀ» °ÍÀÌ´Ù. 2.5. ´Ù¸¥ ¾î¼Àºí·¯µé 2.5.1. Win32Forth ¾î¼Àºí·¯ Win32Forth ´Â Win32s, Win95, Win/NT¿¡¼­ ÈǸ¢ÇÏ°Ô µ¹¾Æ°¡´Â ÇÁ¸® 32ºñÆ® FORTH ½Ã½ºÅÛÀÌ´Ù. ±×°ÍÀº ¾î¼Àºí·¯¿¡ ÅëÇÕµÈ ÇÁ¸® 32ºñÆ® ¾î¼Àºí·¯(Á¢µÎ»ç ¶Ç´Â Á¢¹Ì»ç ¹®¹ý)¸¦ Æ÷ ÇÔÇÏ°í ÀÖ´Ù. ¸ÅÅ©·Î 󸮴 »ç·Á±íÀº FORTH ¾ð¾îÀÇ full power¿¡ ÀÇÇØ Ã³¸®µÈ´Ù. ±×·¯³ª ´ÜÁö ÀÔÃâ·ÂÀº Win32For ±×°Í ÀÚü¸¦ ÀÌ¿ëÇÒ »ÓÀÌ´Ù. ´ÙÀ½¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ftp.forth.org/pub/Forth/win32for/ 2.5.2. NASM ³×Æ®¿öÅ© »ó¿¡¼­ ¹ú¾îÁö°í ÀÖ´Â ¾î¼Àºí·¯ ÇÁ·ÎÁ§Æ®´Â ¾ÆÁ÷ ´Ù¸¥ ¾î¼Àºí·¯¸¦ ¸¸µé±â À§ÇØ ³ë·ÂÇÏ°í ÀÖ´Â ÁßÀÌ´Ù. ÀÌ°ÍÀº C¿¡¼­ ¾²¿©Á³´Âµ¥, ¸ðµç ¾Ë·ÁÁø ¹®¹ýµé°ú ¿ÀºêÁ§Æ® Æ÷¸ËµéÀ» Á¦°øÇÏ´Â µ¥ ÃæºÐÇÑ ¸ðµâ·¯°¡ µÉ°ÍÀÌ´Ù. ÇöÀç ¹öÁ¯Àº Á¶±ÝÀÇ ¸Å¿ì °£´ÜÇÑ ¹®¹ýµé°ú ÆòÀÌÇÑ ¹ÙÀ̳ʸ® Ãâ·Â¿¡ À־´Â Àßµ¹¾Æ°£´Ù; ¸ÅÅ©·Î ÇÁ·Î¼¼½Ì¿¡´Â Èï¹Ì°¡ ¾ø¾îº¸ÀδÙ. È®½ÇÈ÷ NASMÀº ÀÌ ÇÏ¿ìÅõ°¡ ¾÷µ¥ÀÌÆ® µÇ´Â °Í º¸´Ù ºü¸£°Ô ¹ßÀüÇÏ°í ÀÖ´Ù; ±×·¸´Ù°í NASMÀÌ ÇöÀç ¿ä±¸µÇ´Â ¸ðµç Ư¡µéÀ» °¡Áö°í ÀÖÀ» °ÍÀ̶ó°í ±â´ëÇÏ Áö´Â ¸»¶ó. Àû¾îµµ ¿©·¯ºÐµéÀÌ ±×°ÍÀÇ °èȹÀÌÇàÀ» µµ¿ï Áغñ¾øÀÌ´Â... www.dcs.warwick.ac.uk/~jules/nasm1.html 2.5.3. Tunes Tunes OS ÇÁ·ÎÁ§Æ®´Â ±×µé ÀÚ½ÅÀÇ ¾î¼Àºí·¯¸¦ Scheme ¾ð¾î¸¦ »ç¿ëÇÔÀ¸·Î½á Àüü °³¹ß ¼öÇàÀÇ ÀϺκÐÀ¸·Î °³¹ßÇÏ°í ÀÖ´Ù. ±×°ÍÀº ¾ÆÁ÷ Àß µ¹¾Æ°¡Áö ¾Ê°í ÀÖÀ¸¸ç µµ¿òÀ» ÇÊ¿ä·Î ÇÏ°í ÀÖ´Ù. ÀÌ ¾î¼Àºí·¯´Â ½Éº¼¸¯ ¹®¹ý Æ®¸®¸¦ ó¸®ÇÏ´Â µ¥, ÀÌ°ÍÀº ¾î¼Àºí¸® ¹®¹ýÀÇ ±âÃÊ·Î µ¿µîÇÏ°Ô ¼­ºñ½º µÉ ¼ö ÀÖÀ¸¸ç, µð½º¾î¼Àºí·¯, °øÅë ¾î¼Àºí·¯/ÄÄÆÄÀÏ·¯ back-end µîµîÀÇ, ±×¸®°í ÀüÁ¤ÇÑ ¾ð¾îÀÎ SchemeÀÇ Ç®ÆÄ¿ö´Â ¸ÅÅ©·Îó¸®/¸ÞÆ®·Î󸮿¡ À־ ŸÀÇ ÃßÁ¾À» ºÒÇãÇÑ´Ù. www.eleves.ens.fr:8080/home/rideau/Tunes/ 2.5.4. ÇÁ¸®°¡ ¾Æ´Ï°Å³ª 32ºñÆ®°¡ ¾Æ´Ñ x86 ¾î¼Àºí·¯µé ¿©·¯ºÐµéÀº x86 ¾î¼Àºí¸® ÇÁ·Î±×·¡¹ÖÀÇ ±âº»À¸·Î¼­ ±×°Íµé¿¡ ´ëÇØ Á»´õ ã¾Æ º¼ ¼ö ÀÖ´Ù. Raymond MoonÀÇ comp.lang.asm.x86À» À§ÇÑ FAQ ¸¦ ã¾Æº¸±â ¹Ù¶õ ´Ù. www2.dgsys.com/~raymoon/faq/asmfaq.zip 3. META ÇÁ·Î±×·¡¹Ö/ ¸ÅÅ©·Î ó¸® ¿©·¯ºÐµéÀº ÀÌ·¯ÇÑ ÀÛ¾÷À» À§Çؼ­ Àû´çÇÑ ÅøÀ» »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, ±×°ÍÀÌ Àû´çÇÏÁö ¾Ê´Ù¸é ¾î¼Àºí¸®¸¦ ¼±ÅÃÇÒ ¼ö ¾ø´Ù; C, OCAML, perl, Scheme °¡ ´ç½ÅÀÇ ÇÁ·Î±×·¡¹ÖÀÇ ÃÖ¼±ÀÇ ¼±ÅÃÀÌ µÉ °ÍÀÌ´Ù. ±×·¯³ª, ÀÌ·¯ÇÑ ÅøµéÀÌ ±â°è»ó¿¡¼­ ÃæºÐÈ÷ ¾µ¸¸ÇÑ Á¦¾î±â´ÉÀ» ÁÖÁö ¾Ê´Â´Ù¸é, ¾î¼Àºí¸®´Â À¯¿ëÇϰųª ÇÊ¿äÇÒ °ÍÀÌ´Ù. ´Ù¸¥ °æ¿ì¿¡, ¸¸ÀÏ ¿©·¯ºÐµéÀÌ ¾ÈÀüÇÑ ÇÁ·Î±×·¡¹Ö, Æí¾ÈÇÑ ¼öÁ¤ µîµîÀ» Çã¶ôÇÏ´Â ÀζóÀÎ È®Àå¿¡ ÀÇÇØ ÀÚµ¿ÀûÀ¸·Î ½Ã½ºÅÛÀÇ ¸ÅÅ©·Îó¸®¿Í ¸ÞŸÇÁ·Î±×·¡¹ÖÀ» ÀÌÇØÇÏ °íÀÚ ÇÑ´Ù¸é ±×°ÍÀº Çѹø Á¤ÀǵǴ Àç±ÍÆÐÅÏÀ» Çã¶ôÇÒ °ÍÀ̸ç, ´ÙÁß ½Ã°£À» Àç»ç¿ë ÇÒ °ÍÀÌ´Ù. "ÆòÀÌÇÑ" ¾î¼Àºí·¯´Â Á¾Á¾ ÀÛÀº ·çƾÀ» C·Î ¸µÅ©½Ãų ¶§ Á¶Â÷ ÃæºÐÈ÷ ¾ÊÀº¶§°¡ ÀÖ´Ù. 3.1. À§¿¡¼­ ÅëÇÕµÈ °ÍÀ̶õ ¹«¾ùÀ» ¶æÇϴ°¡ 3.1.1. GCC GCC ¿¡¼­ ÀζóÀÎ ¾î¼Àºí¸® Äڵ带 »ç¿ëÇÑ´Ù¸é ±× ¼Ó¿¡¼­ÀÇ ·¹Áö½ºÅÍ ±ÔÄ¢À» ²Ä²Ä ÇÏ°Ô »ìÆ캸¾Æ¾ß ÇÑ´Ù. ÃÖÀûÈ­½ÇÇàÀÚ´Â Ç×»ó ±×°Í¿¡ ´ëÇØ ¾Ë°í ÀÖÀ¸¹Ç·Î, ÀζóÀÎ ¾î¼Àºí¸® ÄÚµå´Â Á¤È®ÇÏÁö ¾Ê´Â Äڵ带 ¸¸µé¾î ³½´Ù. ±×·¯¸é, ¿©·¯ºÐµéÀÇ ¾î¼Àºí¸®¸¦ CPP ¸ÅÅ©·Î¿¡ ³õÀ» ¼ö ÀÖÀ¸¸ç, ¸ðµç »ç¶÷µéµµ ±×°ÍÀ» C ÇÔ¼ö/¸ÅÅ©·Î·Î »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀζóÀÎ ÇÔ¼ö´Â ¸ÅÅ©·Î¿Í ¸Å¿ì ¸¹ÀÌ ºñ½ÁÇѵ¥, ±×°ÍÀº °¡²û »ç¿ëÀ» Çϱâ À§ÇØ ±ú²ýÇÏ°Ô Ã»¼ÒµÉ ¶§°¡ ÀÖ´Ù. ±×·¯ÇÑ °æ¿ì¿¡ Äڵ尡 º¹»ç°¡ µÉ ¼ö ÀÖÀ¸´Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ±×·¡¼­ ·ÎÄà ¶óº§("1:" ½ºÅ¸ÀÏÀÇ)¿¡¼­¸¸Àº ¾î¼Àºí¸® Äڵ忡¼­ Á¤ÀǵǾî ÀÖ¾î¾ß ÇÑ´Ù. ±×·¸´Ù ÇÒÁö¶óµµ, ¸ÅÅ©·Î´Â ·ÎÄÃÀÌ ¾Æ´Ñ Á¤ÀǶóº§ÀÇ À̸§µµ Çã¿ëÀ» ÇÑ´Ù. ¶ÇÇÑ, ¿©·¯ºÐµéÀÇ Äڵ峪 GCCÀÇ Á¶±ÝÀÇ ¹ö±×´Â ·¹Áö½ºÅÍ ±ÔÁ¤ÀÌ ¾Æ¸¶µµ ¼±¾ðµÇ Áö ¾Ê¾ÒÀ» ¶§, ÀζóÀÎ ÇÔ¼ö¸¦ ¾î¼Àºí¸® ÄÚµå·Î »ç¿ëÇÒ ¶§, ³ªÅ¸³¯ ¼ö ÀÖÀ» °Í À̸ç GCC¸¦ È¥µ¿¿¡ ºü¶ß¸°´Ù. ¸¶Áö¸·À¸·Î, C ¾ð¾î´Â ±×Â÷ü°¡ ¾î¼Àºí¸® ÇÁ·Î±×·¡¹Ö¿¡ À־ Á¦¹ý ±¦ÂúÀº Ãß»óÈ­ ¶ó°í ´ë¿ì¹Þ°í ÀÖ´Ù. ¾î¼Àºí¸µÀÇ °íÃæ¿¡¼­ ¸¹Àº ºÎºÐÀ» µé ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ±×¸®°í ÇÔ¼ö·Î ÀÎÀÚ¸¦ ·¹Áö½ºÅ͸¦ ÅëÇØ ³Ñ°ÜÁÖ´Â ¸î¸î ÃÖÀûÈ­´Â ¾î¼Àºí¸®¿¡¼­ ±× ÇÔ¼ö¸¦ ºÎ¸¦ ¶§ ºÎÀû´ç ÇÒ ¼öµµ ÀÖ´Ù. Àû¾îµµ ¿©·¯ºÐµéÀÌ ¾îÆ®¸®º× asmlinkage ¿¡°Ô ±×°ÍµéÀ» ÁÖ¾î¾ß ÇÑ´Ù. ¸®´ª½º Ä¿³Î ¼Ò½ºÀÇ ºÎºÐÀ» Âü°í ÇÒ ¼ö ÀÖ´Ù. 3.1.2. GAS GAS´Â Àý´ë·Î ¸ÅÅ©·Î ±â´ÉÀ» Æ÷ÇÔÇÏ°í ÀÖÁö ¾Ê´Ù. ±×·¯³ª, GCC ¿Í °Ç³×Áö´Â .S ÆÄÀϵéÀº ±×°ÍµéÀÌ GAS¿¡°Ô °Ç³×Áö±â Àü¿¡ CPP¸¦ Åë ÇÒ ¼öµµ ÀÖ´Ù. .s ÆÄÀÏÀº Çϳª¸¦ »ý¼º½ÃÅ°°í ¹Ù·Î GAS¿¡°Ô·Î °Ç³×Áø´Ù. ´Ù½ÃÇѹø ¸»ÇÏÁö¸¸, ¿¹¸¦ º¼·Á¸é ¸®´ª½º ¼Ò½ºµéÀ» º¸¶ó. 3.1.3. GASP º¸ÅëÀÇ °ÅÀÇ ¸ðµç ¸ÅÅ©·Î¾î¼Àºí¸®¸¦ GAS¿¡°Ô º¸ÅÄ´Ù. texinfo doc¸¦ º¸¶ó. 3.1.4. AS86 ÀÌ°ÍÀº °£´ÜÇÑ ¸ÅÅ©·Î¸¦ Á¦°øÇÑ´Ù. ³ª´Â docµéÀ» ¸øã¾Ò´Ù. ÀÌ ¼Ò½ºµéÀº ¾ÆÁÖ °£°áÇÏ°í ±ò²ûÇÏ´Ù. ¿©·¯ºÐµéÀÌ Èï¹Ì¸¦ °¡Áø´Ù¸é ±×°ÍµéÀ» ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Ãʺ¸ÀûÀÎ °Íº¸´Ù ´õ ¸¹ÀÌ ¾Ë°í ½Í´Ù¸é ¿ÜºÎÇÊÅ͸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. (¾Æ·¡ÀÇ 3.2 ºÎºÐÀ» º¸¶ó.) 3.1.5. ´Ù¸¥ ¾î¼Àºí·¯µé Win32FORTH: CODE ¿Í END-CODE´Â Çؼ³¸ðµå·ÎºÎÅÍ ¼±ÅÃÇÒ ¼ö ¾ø´Â ¸ÅÅ©·ÎÀÌ´Ù. ±×·¡¼­ ¾î¼Àºí¸µ µ¿¾ÈÀº FORTH ´Ü¾îÀÇ ¸ðµç °Íµé¿¡ Á¢±ÙÀ» ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. NASM: ¾ÆÁ÷ ¸ÅÅ©·Î¸¦ Á¦°øÇÏÁö ¾Ê´Â´Ù. ¾Æ·¡ÀÇ ¿ÜºÎ ÇÊÅÍ ºÎºÐÀ» º¸¶ó. TUNES: À̰͵µ ¾ÆÁ÷ Á¦°øÇÏÁö´Â ¾Ê´Â´Ù. ±×·¯³ª Scheme¾ð¾î´Â ±âºÐ³»Å°´Â µ¥·ÎÀÇ ¸ÞŸ ÇÁ·Î±×·¡¹ÖÀ» Çã¿ëÇÏ´Â ÁøÁ¤ÇÑ °í±Þ¾ð¾îÀÌ´Ù. 3.1.6. ¿ÜºÎ ÇÊÅÍ ¾î¼Àºí·¯¿¡¼­ ¾î¶² ¸ÅÅ©·Îµµ Á¦°øÀ» ÇÏ´øÁö, ¶Ç´Â ¿©·¯ºÐµéÀÌ ¾î¶² ¾ð¾î¸¦ »ç¿ëÇÑ´Ù°í ÇÏ´õ¶óµµ(C Á¶Â÷!) ±× ¾ð¾î´Â Ç¥ÇöÇÏ´Â µ¥ ÃæºÐÄ¡ ¾ÊÀ» °ÍÀÌ´Ù. ¿©·¯ºÐµéÀº Makefile ±ÔÄ¢À¸·Î ´ÙÀ½°ú °°ÀÌ ÆÄÀÏÀ» ¿ÜºÎÇÊÅ͸¦ ÅëÇØ °Ç³×ÁÙ ¼ö ÀÖ´Ù. %.s: %.S other_dependencies $(FILTER) $(FILTER_OPTIONS) < $< > $@ 3.1.7. CPP CPP ´Â Ç¥Çö·Â¿¡ À־ Á» ¾àÇÏÁö¸¸ ½¬¿î °Íµé¿¡´Â ÃæºÐÇÏ´Ù. ±×°ÍÀÌ Ç¥ÁØÀ̶ó¸é GCC¿¡ ÀÇÇØ ºÒ¸®¿ö Áú °ÍÀÌ´Ù. CPPÀÇ Á¦ÇÑµÈ Á¡¿¡¼­ º¸µíÀÌ, ¿ÀºêÁ§Æ®¸¦ ¼±¾ð ÇÒ ¼ö ¾øÀ¸¸ç, µû¶ó¼­ Æı«ÀÚ (destructors)´Â ÀÚµ¿ÀûÀ¸·Î ¼±¾ðºí·°ÀÇ ¸¶Áö¸·¿¡¼­ ÄݵȴÙ. ±×¸®°í µ¥ÀÌŸ³ª Äڵ带 ó¸®Çϱâ À§ÇØ ±×°ÍÀ» °øÅë ¼±¾ðÀ» ÇÒ ¼ö ¾ø´Ù. CPP´Â C ÄÄÆÄÀÏ·¯¿¡ µû¶ó¿Â´Ù. GCC´Â ¿©·¯ºÐµéÀÌ °¡Á®¿Ã ¼ö ÀÖ´Â ÀÚÀ¯·Î¿î C ÄÄÆÄÀÏ·¯ÀÌ´Ù. 3.1.8. M4 M4´Â ¸ÅÅ©·Î󸮿¡ À־ Ź¿ùÇÑ ´É·ÂÀ» º¸¿©ÁØ´Ù. Àç±ÍÀû Ç¥Çö, Áú¼­Á¤¿¬ÇÑ ±ÔÄ¢µî¿¡ À־ ±¦Âú¾Æ º¸ÀδÙ. CPP°¡ ÇÒ ¼ö ¾ø´Â ¸ðµç °ÍµéÀ» ±×°ÍÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. macro4th/This4th ¸¦ ¾Æ·¡¿¡¼­ º¸¶ó. ftp.forth.org/pub/Forth/ in Reviewed/ ANS/ (?), ¶Ç´Â Tunes 0.0.0.25 ¼Ò½º¸¦ m4¸¦ »ç¿ëÇÏ´Â Áøº¸ÇÑ ¸ÅÅ©·Î ó¸®ÀÇ ¿¹Á¦·Î¼­ º¸´Â °Íµµ ±¦ÂúÀ» °ÍÀÌ´Ù. m4ÀÇ ¶óÀÌÆ®¹öÁ¯Àº GNU m4 1.4 (ÀÌ»ó)À¸·Î ±¸ÇÒ ¼ö ÀÖ´Ù. 3.1.9. ÇÊÅ͸¦ ÅëÇÑ ¸ÅÅ©·Î ó¸® ¿©·¯ºÐµéÀº °£´ÜÇÑ ¸ÅÅ©·Î È®Àå ÇÊÅ͸¦ ¾µ ¼ö ÀÖ´Ù. perl, awk, sed µîÀ» »ç¿ëÇÔÀ¸·Î½á °¡´ÉÇÏ´Ù. ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ ºü¸£¸ç, °ÅÀÇ ¸ðµç °ÍÀ» Á¦¾î ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 3.1.10. ¸ÞŸ ÇÁ·Î±×·¡¹Ö [»ý·«] 4. ÄÁº¥¼Ç ºÎ¸£±â 4.1. 4.1 Linux 4.1.1. GCC·Î ¸µÅ©Çϱâ 32ºñÆ® ÀÎÀÚ´Â 32ºñÆ® near¸®ÅÏ ¾îµå·¹½ºÀ§·Î ½ºÅÃ»ó¿¡ Çª½¬µÈ´Ù. %ebp, %esi, %edi, %ebx °¡ ÀúÀåµÈ´Ù. %eax¿¡ °á°ú°¡ ´ã±â°Å³ª %edx:%eax¿¡ 64ºñÆ® °á°ú°¡ ´ã±ä´Ù. GCC´Â ÀúÀåµÈ ·¹Áö½ºÅÍ¿¡ ÀÇÇØ È£ÃâµÇ´Â ÄÁº¥¼ÇÀ» º¯°æÇÒ ¼ö ÀÖ´Â ¿É¼ÇÀ» °¡Áö°í ÀÖÀ¸¸ç, ·¹Áö½ºÅÍ¿¡ ÀÎÀÚ¸¦ °¡Áö°í ÀÖÀ¸³ª FPU¸¦ »ý°¢ÇÏÁö ¾Ê´Â´Ù. i386 ÀÎÆ÷ ÆäÀÌÁö¸¦ üũÇ϶ó. GCC°¡ ÀÌ·¯ÇÑ Ç¥ÁØ ÄÁº¥¼ÇÀ» Á¦°øÇÒ·Á¸é ÇÔ¼ö¸¦ À§ÇØ asmlinkage attribute¸¦ ¼±¾ðÇØ¾ß ÇÑ´Ù. (³ª´Â ¾î¶»°Ô ±×°ÍÀÌ ÄÁº¥¼ÇÀ» ºÒ·¯¼­ º¯°æÇÏ´Â Áö¸¦ ¾ËÁö ¸øÇÑ´Ù.) 4.1.2. ELF vs a.out ¹®Á¦µé ¾î¶² C ÄÄÆÄÀÏ·¯´Â ¸ðµç ½Éº¼ Àü¿¡ °­Á¶¸¦ ÁغñÇÑ´Ù. Ưº°È÷, ¸®´ª½º a.out GCC ´Â ¸®´ª½º ELF GCC°¡ ¾øÀ» µ¿¾È ±×·¯ÇÑ Áغñ¸¦ ÇÑ´Ù. ¸®´ª½º ¼Ò½º Æ®¸®°¡ ±×°ÍÀ» ¾î¶»°Ô °ü¸®ÇÏ´Â Áö¸¦ º¸¶ó. (linux/include/linux/linkage.h). ¿©·¯ºÐµéÀº C->asm À̸§ º¯°æÀ» ´ÙÀ½°ú °°Àº ±â¼úÀ» »ðÀÔÇÔÀ¸·Î½á ¶Ù¾î³ÑÀ» ¼ö ÀÖ´Ù. void foo asm("bar") (void); foo ÇÔ¼ö¸¦ È®½ÇÈ÷ Çϱâ À§Çؼ­´Â ¾î¼Àºí¸®¿¡¼­ bar¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. binutils ÆÐÅ°Áö¾ÈÀÇ objcopy À¯Æ¿¸®Æ¼´Â a.out ¸ñÀûÆÄÀÏÀº ELF ¸ñÀûÆÄÀÏ·Î ¸¸µé¼ö ÀÖÀ¸¸ç ¹Ý´ëÀÇ °æ¿ìµµ °¡²û °¡´É ÇÒ °ÍÀÌ´Ù. 4.1.3. Á÷Á¢ÀûÀÎ ¸®´ª½º ½Ã½ºÅÛ ÄÝ ÀÌ°ÍÀº Àç¸í¸íÇÒ ¼ö ¾ø´Ù. ¿Ö³ÄÇϸé ÀÌ°ÍÀº ¹Ù²î¸é ȣȯ¼ºÀÌ ¾ø¾îÁö±â ¶§¹®ÀÌ´Ù. ±×¸®°í ÀÌ°ÍÀº libcÀÇ °íÁ¤ÀûÀÎ °Íµé°ú È®ÀåµÈ °ÍµéÀ» ¹æÇØÇÑ´Ù. Á¤¼®À¸·Î ÇÏÀÚ¸é, ¸®´ª½º ½Ã½ºÅÛ ¼­ºñ½º ÄÝÀ» Àç¸í¸íÇÏ´Â °ÍÀº libc¸¦ ÅëÇؼ­ ÇÑ´Ù. ÀÌÁ¦, libc·Î ¸µÅ©¸¦ ½ÃÅ°´Â °ÍÀ» ¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¾Æ·¡¿¡¼­ linux-eforth- 1.0c.tgz À» º¸¶ó. ftp.forth.org/pub/Forth/Linux/ ¸®´ª½º ¼Ò½º°¡ µû¶ó¿Ã °ÍÀÌ´Ù. ¾î¶»°Ô ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÒ °ÍÀÎÁö¸¦ ¼³¸íÇÏ´Â asm/unistd.h Çì´õÆÄÀϵµ µû¶ó¿Â´Ù. ±âº»ÀûÀ¸·Î ¿©·¯ºÐµéÀº %eax¿¡ __NR_syscallname ¹øÈ£¸¦ ³Ö°í, ÆĶó¸ÞŸ¸¦ %ebx, %ecx, %edx, %esi, %edi¿¡ °¢°¢ ³Ö°í int $0x80À» »ç¿ë ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. °á°ú´Â %eax¿¡ ¸®Åϵǰí, ¿¡·¯½Ã¿¡´Â libc°¡ errno¸¦ ¼¼ÆÃÇÏ´Â °Í¿¡ ÇØ´çÇÏ´Â °á°ú¸¦ À½¼ö·Î %eax¿¡ ³õ´Â´Ù. »ç¿ëÀÚ ½ºÅØÀº °Ç´õ¸®Áö ¾Ê´Âµ¥, ½Ã½ºÅÛ ÄÝÀÌ ºÒ¸®¿ö Áö´Â µ¿¾È º°´Ù´Â °ÍÀÌ ÇÊ ¿äÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. 4.2. µµ½º ÃÖ±ÙÀÇ µµ½º ÀͽºÅÙ´õµé¿¡´Â µµ½º¼­ºñ½º¸¦ À§ÇÑ ÀÎÅÍÆäÀ̽º°¡ µû¶ó¿Â´Ù. ±×¿¡ ´ëÇÑ docÆÄÀϵéÀ» Àо¶ó. º¸ÅëÀº int 0x21À» Èä³»³»´Âµ¥, µû¶ó¼­ ¸®¾ó¸ðµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÈ´Ù. (³ª´Â ±×°ÍµéÀÌ, ÇÊ¿äÇÒ ¶§ 32ºñÆ® ÀÛµ¿ÀÚ¸¦ »ç¿ëÇÏ¿© 16ºñÆ® µµ½º ¼­ºñ½º¸¦ È£ÃâÇÔÀ¸·Î½á ÀÛ¾÷À» ÇÒ ¼ö ÀÖÀ¸¸®¶ó°í´Â »ý°¢Ä¡ ¾Ê´Â´Ù.) DPMI¿¡ °üÇÑ docÀº ´ÙÀ½¿¡¼­ ãÀ» ¼ö ÀÖ´Ù. ftp.oulu.fi/pub/msdos/programming/ DJGPP ¿¡´Â ÀÚüÀÇ (Á¦ÇѵÈ) ±³Ã¼µÈ libc°¡ µû¶ó¿Â´Ù. ÀÌ°ÍÀº ¸®´ª½º¿¡¼­ µµ½º·Î Å©·Î½ºÄÄÆÄÀÏÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª ÇöÀç ÀÖ´Â ÆÐÄ¡´Â a.out GCC¿ëÀ̸ç ÃÖ±ÙÀÇ ELF GCC´Â ÆÐÄ¡°¡ ÇÊ¿ä¾øÀ» °ÍÀÌ´Ù. ¸¸ÀÏ ±×°ÍµéÀÌ »õ·Î¿î ÆÐÄ¡¸¦ ÇÊ¿ä·Î ÇÑ´Ù¸é ³­¸ð¸£°Ú´Ù.. 4.3. ¿©·¯ºÐµéÀÇ OS [¾î¼Àºí¸® ÇÁ·Î±×·¡¸ÓµéÀÌ ¸¹ÀÌ ±×°Í¿¡ ´ëÇØ À̾߱â ÇÏ°í ÀÖ´Â °ÍÀÌ´Ù.] 4.3.1. ºÎÆ® ·Î´õ ÄÚµå¿Í 32ºñÆ® ¸ðµå·Î µé¾î°¡±â 4.3.2. ÇÁ·ÎÅؼÇÀÇ ±âÃÊ 4.3.3. ÀÎÅÍ·´Æ® ´Ù·ç±â 4.3.4. 16ºñÆ® ½Ã½ºÅÛ ¼­ºñ½º¸¦ »ç¿ëÇÏ´Â V86/R86 ¸ðµå 4.3.5. À̰͵鿡 ´ëÇÑ Á¤º¸¸¦ ¾îµð¼­ ¾òÀ» °ÍÀΰ¡ [´Ù¸¥ ¹®¼­¿¡ À̺κе鿡 ´ëÇÑ ¾È³»Ç¥½Ã¸¦ º¸ÅÂÁֱ⠹ٶõ´Ù] Á¤º¸ÀÇ Áß¿äÇÑ ¼Ò½º´Â OS¿¡ Á¸ÀçÇÏ°í ÀÖ´Ù. ¸¹Àº ¾È³»Ç¥½ÃµéÀÌ ¾Æ·¡ÀÇ WWW ÆäÀÌÁö¿¡ ÀÖ´Ù. www.eleves.ens.fr:8080/home/rideau/Tunes/Review/OSes.html 5. ÇØ¾ß ÇÒÀÏ o ºÒ¿ÏÀüÇÑ ºÎºÐ ä¿ì±â o ¼ÒÇÁÆ®¿þ¾î¿¡ ´ëÇÑ ´õ ¸¹Àº ¾È³»Ç¥Áö º¸Å±â o ½ÇÁ¦ »ýÈ°¿¡ º¸ÅÆÀÌ µÇµµ·Ï Á¦¾ÈµÈ °¢°¢ÀÇ ¼Ö·ç¼ÇµéÀÇ ¹®¹ý, ÆÄ¿ö, Á¦ÇÑÁ¡ µîÀ» ¼³¸íÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ ¿¹Á¦ º¸Å±⠳¡.