4Àå. ÇÔ¼ö´Ù·ç±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

ÇÔ¼ö¿¡ ´ëÇØ¼­ ´Ù·ç±â

4. ÇÔ¼ö¿¡ ´ëÇØ¼­ ´Ù·ç±â

4.1. º¹ÀâÇÑ ÇÁ·Î±×·¥ ´Ù·ç±â

2절¿¡¼­ ´Ù·ç¾ú´ø ÇÁ·Î±×·¥Àº ¾î¼Àºí¸®ÀÇ ±âº»ÀûÀÎ ¼³¸íÀ» À§ÇÑ ¸Å¿ì ´Ü¼øÇÑ ÄÚµåµé·Î ÀÌ·ç¾îÁ® ÀÖÀ¸¸ç ´ÜÁö ÇϳªÀÇ ¼½¼Ç¸¸À» °¡Áö°í ÀÖ´Ù. ÇÁ·Î±×·¥ÀÌ ´Ü¼øÇÏ´Ù¸é °ü°è ¾øÁö¸¸. ¸¸¾à Á» ±Ô¸ðÀÖ´Â ÇÁ·Î±×·¥À» ¸¸µé¾î¾ß ÇÑ´Ù¸é ¼öõ, ¼ö¸¸¶óÀÎÀ» ÀÛ¼ºÇØ¾ß µÉÁöµµ ¸ð¸¥´Ù. ÀÌ·± ÇÁ·Î±×·¥À» ÇϳªÀÇ ¼½¼ÇÀ¸·Î À¯ÁöÇϸé À¯Áöº¸¼ö°¡ ¸Å¿ì Èûµé °ÍÀÌ´Ù. ƯÈ÷ ¿©·¯¸íÀÇ ÇÁ·Î±×·¥ÀÌ ÇϳªÀÇ ÇÁ·ÎÁ§Æ®¿¡ Âü°¡ÇÒ °æ¿ì ÇÁ·Î±×·¥ÀÇ À¯Áö º¸µÎ´Â ´õ¿í Èûµé°Ô µÉ°ÍÀÌ´Ù.

ÀÌ·¸°Ô ÇÁ·Î±×·¥ÀÇ Å©±â°¡ Ä¿Áö°Å³ª µÎ¸íÀÌ»óÀÇ ÇÁ·Î±×·¡¸Ó°¡ Âü°¡ÇÒ ¶§´Â Äڵ带 ÇÏ´ÂÀÏ¿¡ µû¶ó¼­ ¸î°³ÀÇ Á¶°¢À¸·Î ³ª´©¾î¼­ °ü¸®ÇÏ¸é µÉ°ÍÀÌ´Ù. ¹°·Ð À̰æ¿ì ³ªÁß¿¡ Á¶°¢À» Çϳª·Î ÇÕÄ¡±â ÆíÇϵµ·Ï Àß Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé°í ¿©±â¿¡ µû¶ó¼­ ÀÚ½ÅÀÌ ¸ÃÀº Äڵ带 ÀÛ¼ºÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ·¸°Ô ÇÏ¸é °¢ ÇÁ·Î±×·¡¸Ó´Â ÀÚ½ÅÀÌ ¸ÃÀº ¿µ¿ª¸¸À» µ¶¸³ÀûÀ¸·Î Å×½ºÆ® ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÇÁ·Î±×·¡¹ÖÀÇ ÁýÁßµµ¸¦ ³ôÀÏ ¼ö ÀÖ°Ô µÇ°í, ´Ù¸¥ ÇÁ·Î±×·¡¸Ó¿Í Á»´õ È¿À²ÀûÀ¸·Î Çù¾÷ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

ÀÌ·¯ÇÑ µ¶¸³ÀûÀÎ °³¹ßÀ» À§Çؼ­ ÇÁ·Î±×·¡¸Ó´Â ÇÔ¼ö¶ó°í ºÒ¸®¿ì´Â ¿©·¯°³ÀÇ ÄÚµåÁ¶°¢À» ¸¸µé°Ô µÈ´Ù. ¿öµå ÇÁ·Î¼¼¼­¸¦ ¸¸µç´Ù°í °¡Á¤Çغ¸ÀÚ. ±×·³ "°¡" °³¹ßÀÚ´Â »ç¿ëÀÚÀÇ Å°ÀÔ·ÂÀ» ó¸®ÇÏ´Â handle_type_chracter ÇÔ¼ö¸¦ ¸¸µéµµ·Ï ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â À¯ÀúÀÇ Å°ÀÔ·ÂÀ» ÀÐ¾î µé¿©¼­ ±× °ªÀ» È­¸é¿¡ Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù. "³ª"¶ó´Â °³¹ßÀÚ´Â check_chracter_spell À̶ó´Â ¿ÀŸ°Ë»ç ÇÔ¼ö¸¦ ¸¸µéµµ·Ï ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â handle_type_chracter¿¡ ÀÇÇØ¼­ ÀÔ·ÂµÈ ¹®ÀÚ¸¦ °Ë»çÇØ¼­ ¿ÀŸ°¡ ¹ß»ýÇÏ´ÂÁö¸¦ È®ÀÎÇÏ´Â ÀÏÀ» ÇÑ´Ù. ÇÔ¼ö´Â ÀÌ·¸°Ô ÁÖ¾îÁö´Â µ¥ÀÌÅÍ¿Í ÀÌÀÇ Ã³¸®ÇÏ´Â ·çƾ´ÜÀ§·Î ¸¸µé¾î Áö°Ô µÈ´Ù.

Á» ±Ô¸ðÀÖ´Â ÇÁ·Î±×·¥µéÀº ¼ö¹é¿¡¼­ ¼öõÀÇ ÀÌ·¯ÇÑ Á¶±×¸¶ÇÑ ÇÔ¼öµé·Î ÀÌ·ç¾îÁö°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÇÔ¼öµé Áß¿¡´Â °³¹ßÀÚ°¡ Çʿ信 ÀÇÇØ¼­ ±×¶§ ±×¶§ ¸¸µé¾î Áö´Â °Íµéµµ ÀÖÁö¸¸ ½Ã½ºÅÛ¿¡ ÀÇÇØ¼­ Á¦°øµÇ´Â ÇÔ¼öµéµµ ÀÖ´Ù. ´ç¿¬ÇÏÁö¸¸ ÀÌ¹Ì ¸¸µé¾îÁø ÇÔ¼ö´Â »ç¿ëÀÚ°¡ ´Ù½Ã ¸¸µé¾î¼­ »ç¿ëÇÒ ¼ö ¾ø´Ù. ÀÌ·± ½Ã½ºÅÛ¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼öµéÀ» ¿ø½Ã(primitive)ÇÔ¼ö¶ó°í ºÎ¸¥´Ù. ¿¹¸¦ µé¾î ±×·¡ÇÈ À¯Àú ÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ¿©±â¿¡´Â ¸Þ´º¸¦ »ý¼ºÇϱâ À§ÇÑ ÇÔ¼ö°¡ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ ÇÔ¼öµéÀº ±ÛÀÚ¸¦ ¾²°Å³ª, ¾ÆÀÌÄÜÀ» ¹èÄ¡Çϰųª, ¹è°æÀÇ »öÀ» ¼³Á¤Çϰųª ¸¶¿ì½ºÀÇ À§Ä¡¸¦ °è»êÇÏ´Â ÇÔ¼öµéÀÌ ÀÖÀ» °ÍÀÌ´Ù. ±×¶ó³ª ÀÌ·¯ÇÑ ÇÔ¼öµé ¿Ü¿¡µµ ±âº»ÀûÀ¸·Î ¼±À» ¸¸µé°Å³ª, Á¡À» Âï°Å³ª ÇÏ´Â µîÀÇ °¡Àå ±âº»ÀûÀÎ ÇÔ¼öµéÀÌ ÀÖÀ» °ÍÀ̰í À̰͵éÀº ¿î¿µÃ¼Á¦ ¼öÁØ¿¡¼­ Áö¿øÇÏ°Ô µÉ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ primitiveÇÔ¼ö¶ó°í º¸¸é µÈ´Ù. ÃÖÁ¾ÀûÀ¸·Î ¿©·¯ºÐÀÌ Å« ±Ô¸ðÀÇ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù¸é ÀÌ·¯ÇÑ primitiveÇÔ¼öµéÀ» °¡Áø ÀÛÀº (»ç¿ëÀÚ °¡ ¸¸µç)ÇÔ¼öµéÀÇ ¸ðÀÓÀ¸·Î ÀÌ·ç¾î Áú °ÍÀÌ´Ù. ÀÌ»ó ÀÏ¹Ý GUI ¾ÖÇø®ÄÉÀ̼ÇÀ» ¿¹·Î µé¾î¼­ ¼³¸íÇߴµ¥, GUI ¿¡¼­ÀÇ primitive´Â ¾î¼Àºí¸®¿¡¼­´Â ½Ã½ºÅÛÄÝÀÌ´Ù. ¿©±â¿¡¼­´Â ½Ã½ºÅÛÄÝ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» ´Ù·çÁø ¾ÊÀ» °ÍÀÌ´Ù. ½Ã½ºÅÛ ÄÝ¿¡ ´ëÇÑ ³»¿ëÀº ¸®´ª½º ½Ã½ºÅÛ ÄÝ Äü ·¹ÆÛ·±½º¿Í ¸®´ª½º ¾î¼Àºí¸® ÇÏ¿ìÅõ¸¦ Âü°íÇØ º¸±â ¹Ù¶õ´Ù.

4.2. ÇÔ¼ö ¸¸µé±â

ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ¿ä¼Òµé¿¡ ÀÇÇØ¼­ ¸¸µé¾îÁø´Ù.

ÇÔ¼ö À̸§

¾î¼Àºí¸®¾î¿¡¼­ ÇÔ¼öÀÇ À̸§Àº ÇÔ¼öÀÇ Äڵ尡 ½ÃÀÛÇÏ´Â ÁÖ¼Ò¸¦ °¡¸®Å°´Â ½Éº¼(symbol)·Î ¼±¾ðµÇ¸ç, ½Éº¼Àº ÇÔ¼öÀÇ À̸§ ´ÙÀ½¿¡ ÄÝ·Ð(":")À» ºÙÀÌ´Â °É·Î ¼±¾ðµÈ´Ù. ÀÌ µÚ¿¡ ÀÖ´Â ÄÚµå´Â ¸ðµÎ ÇÔ¼öÀÇ Äڵ尡 µÈ´Ù. Á¡ÇÁ¸¦ À§Çؼ­ »ç¿ëµÇ´Â ¶óº§°ú ¸Å¿ì ºñ½ÁÇÏ°Ô »ç¿ëµÈ´Ù.

ÇÔ¼ö ÀÎÀÚ

ÇÔ¼ö ÀÎÀÚ(parameter)Àº ÇÔ¼ö°¡ ó¸®ÇØ¾ß ÇÏ´Â µ¥ÀÌÅÍ ¾ÆÀÌÅÛÀÌ´Ù. ¿¹¸¦ µé¾î »çÄ¢¿¬»êÀ» ¼öÇàÇÏ´Â ÇÔ¼ö°¡ ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ. »çÄ¢¿¬»êÀ» À§Çؼ­´Â 2°³ÀÇ ÇÇ¿¬»êÀÚ°¡ ÇÊ¿äÇÏ´Ù. ±×·¯¹Ç·Î ÇÔ¼ö¿¡ 2°³ÀÇ (¼ýÀÚ)µ¥ÀÌÅ͸¦ ³Ñ°ÜÁÙ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â 2°³ÀÇ µ¥ÀÌÅ͸¦ ³Ñ°Ü ¹Þ±â À§Çؼ­ 2°³ÀÇ ÀÎÀÚ¸¦ ÇÊ¿ä·Î ÇÏ°Ô µÈ´Ù.

Áö¿ª º¯¼ö

Áö¿ªº¯¼ö´Â ÇÔ¼ö¿¡¼Å ¿¬»êÀ» À§ÇØ »ç¿ëµÇ´Â µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§Çؼ­ ÇÔ¼ö¾È¿¡¼­¸¸ »ç¿ëµÇ´Â º¯¼ö´Ù.

Àü¿ª º¯¼ö

Àü¿ªº¯¼ö´Â ÇÔ¼ö¿ÜºÎ¿¡¼­ °ü¸®µÇ¾î Áö´Â µ¥ÀÌÅÍ ÀúÀ念¿ªÀÌ´Ù. ¿¹¸¦ µé¾î °£´ÜÇÑ ÅØ½ºÆ® ÆíÁý±â¸¦ ¸¸µé°æ¿ì ÆíÁý±â¿¡¼­ ºÒ·¯µéÀÎ ÆÄÀÏÀÇ ³»¿ëÀº ÀúÀå, ÆíÁý, ã±â, ġȯµî°ú °ü·ÃµÈ ´Ù¾çÇÑ ÇÔ¼ö¿¡¼­ »ç¿ëµÉ °ÍÀ̹ǷΠ¸ðµç ÇÔ¼ö¿¡ °ÉÃļ­ (Àü¿ªÀû)À¸·Î °ü¸®µÇ¾îÁ®¾ß ÇÒ Çʿ䰡 ÀÖ´Ù. ¸¸¾à Àü¿ª º¯¼ö°¡ ¾Æ´Ï¶ó¸é °¢ ÇÔ¼ö¸¶´Ù ÆÄÀÏÀ» ¿­¾î¼­ ³»¿ëÀ» ¸Þ¸ð¸®¿¡ ÀúÀåÇϰí ÀÛ¾÷À» ÇØ¾ß ÇÏ´Â ¹ø°Å·Î¿î Äڵ尡 Ãß°¡ µÇ¾î¾ß ÇÒ °ÍÀÌ´Ù.

¸®ÅÏ ÁÖ¼Ò

"¸®ÅÏ °ª"°ú È¥µ¿ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. ¸®ÅÏ ÁÖ¼Ò´Â º¸ÀÌÁö ¾Ê´Â ÀÎÀÚ·Î »ç¿ëµÇ¸ç ÇÔ¼ö¿¡¼­ Á÷Á¢´Ù·çÁö ¸øÇÏ´Â °ªÀÌ´Ù. ¸®ÅÏ ¾îµå·¹½º´Â ÇÔ¼ö°¡ Á¾·áµÈ ¿ÏÀüÈ÷ Á¾·áµÈ ÈÄ ½ÇÇàµÇ¾î¾ßÇÒ ¿µ¿ªÀÇ ÁÖ¼Ò°ªÀ» ¾Ë·ÁÁØ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ¸®ÅÏ ÁÖ¼Ò´Â ÀÚµ¿ÀûÀ¸·Î °è»êµÇ¾î¼­ »ç¿ëÇϹǷΠÇÁ·Î±×·¡¸Ó°¡ Ưº°È÷ ½Å°æ¾µ Çʿ䰡 ¾ø´Ù. ¹Ý¸é ¾î¼Àºí¸®¾î¿¡¼­ÀÇ °æ¿ì call¸í·ÉÀ» ÀÌ¿ëÇØ¼­ Á¦¾î¸¦ ÇØÁÖ¾î¾ß ÇÑ´Ù.

¸®ÅÏ °ª

ÇÔ¼ö¿¡¼­ ÀÏÀ» ¼öÇàÇÑ ÈÄÀÇ °á°ú¸¦ ¸ÞÀÎ ÇÁ·Î±×·¥¿¡ Àü´ÞÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ÇϳªÀÇ ÇÔ¼ö¿¡ ´ëÇØ¼­ ´ÜÁö ÇϳªÀÇ °ª¸¸À» ¸®ÅÏÇÒ ¼ö ÀÖµµ·Ï Çã¿ëÇÑ´Ù.

ÀÌµé Æ¯Â¡µéÀº ¾î¼Àºí¸®¾î»Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ¸ðµç ¾ð¾îµéµµ °øÅëÀûÀ¸·Î °¡Áö°í ÀÖ´Ù.

º¯¼ö¸¦ ¸¸µé¾î¼­ ÀúÀåÇϰí, ÀÎÀÚ¸¦ »ç¿ëÇϰí, °ªÀ» ¸®ÅÏÇϴ ǥÇöÇÏ´Â ¹æ¹ýÀº ¾ð¾î¸¶´Ù ´Ù¸£±ä ÇÏÁö¸¸ ¾ð¾î¿¡ °ü°è¾øÀÌ °øÅëÀûÀ¸·Î »ç¿ëµÇ¾î Áø´Ù. ±×·¯¹Ç·Î ¾ð¾î¿¡ °ü°è¾øÀÌ ÀϹÝÀûÀ¸·Î Ç¥ÇöÀÌ °¡´ÉÇÒ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Ç¥ÇöÀÇ ¹æ¹ýÀ» calling convention¶ó°í ºÎ¸¥´Ù.

calling conventionÀº ¸Å¿ì ´Ù¾çÇϸç, ÀڽŸ¸ÀÇ calling conventionÀ» ¸¸µé¾î¼­ »ç¿ëÇÒ ¼ö µµ ÀÖ´Ù. ±×·¸±ä ÇÏÁö¸¸ ´Ù¸¥ ¸¸µé¾îÁø ÇÔ¼ö°¡ ´Ù¸¥ ¾ð¾î·Î Æ÷ÆÃµÇ´Â °ÍÀ» °í·ÁÇØ¾ß µÇ´Â °æ¿ìµµ ÀÖÀ¸¹Ç·Î °¡´ÉÇϸé Ç¥ÁØÀûÀÎ calling conventionÀ» µû¸£´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ¿©±â¿¡¼­´Â C ¾ð¾îÀÇ calling conventionÀ» µû¸¦ °ÍÀÌ´Ù. ¿Ö³ÄÇÏ¸é °¡Àå ³Î¸® »ç¿ëµÇ¾îÁö´Â ¾ð¾îÀÌ¸ç ¶ÇÇÑ °¡Àå ¸¹Àº ¿¹Á¦ Äڵ带 °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù.

참고

°ú°Å¿¡´Â ÆÄ½ºÄ®, CÀÇ calling conventionÀ» ÁÖ·Î »ç¿ëÇßÁö¸¸ Áö±ÝÀº »óȲÀÌ Á»´Þ¶óÁ®¼­ java, c++, pythonµîÀÇ ´Ù¾çÇÑ calling conventionÀÌ »ç¿ëµÇ¾îÁö°í ÀÖ´Ù.

4.3. C calling conventionÀ» ÀÌ¿ëÇÑ ¾î¼Àºí¸®¾î ÇÔ¼ö¼³¸í

¸¸¾à ´ç½ÅÀÌ ÄÄÇ»ÅÍÀÇ ½ºÅÃÀÌ ¾î¶»°Ô ÀÛµ¿ÇÏ´ÂÁö¿¡ ´ëÇÑ ÀÌÇØ¸¦ °¡Áö°í ÀÖÁö ¾Ê´Ù¸é ¾î¼Àºí¸®¾î¿¡¼­ ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù. ¿ì¸®°¡ ÄÄÇ»ÅÍ¿¡¼­ ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é, ÇÁ·Î±×·¥Àº °¢°¢ÀÇ ÇÔ¼ö¸¦ ¼öÇàÇϱâ À§Çؼ­ ½ºÅÿµ¿ªÀ» È®º¸ÇÑ´Ù. ½ºÅÃÀº ¸»±×´ë·Î ´õ¹Ì¶õ ¶æÀε¥, ´ç½ÅÀÇ ÀÛ¾÷Ã¥»óÀ§¿¡ ³õÀΠó¸®ÇØ¾ßµÉ ¼­·ù´õ¹Ì¸¦ ¿¬»óÇÏ¸é µÈ´Ù. ´ç½ÅÀº ó¸®ÇؾßÇÒ ¼­·ù¸¦ ¼­·ù´õ¹Ì¿¡ ¿Ã·Á³õ°í ó¸®ÇØ¾ßµÉ °æ¿ì °¡Àå À§¿¡ ÀÖ´Â ¼­·ùºÎÅÍ Ã³¸®ÇÏ°Ô µÉ°ÍÀÌ´Ù. ó¸®µÈ ¼­·ù´Â ´Ù¸¥ ÇÑÂÊÀ¸·Î Ä¡¿ì°Å³ª.. ±âºÐ³ª»Û ¼­·ùÀÇ °æ¿ì ½º·¹±âÅë¿¡ ¹ö¸± °ÍÀÌ´Ù.

ÄÄÇ»Å͵µ ¸¶Âù°¡Áö·Î ÀÌ·¯ÇÑ ½ºÅÃÀ» °¡Áö°í ÀÖ´Ù. ÄÄÇ»ÅÍ¿¡¼­ ½ºÅÃÀº ¸Þ¸ð¸®ÀÇ Ã³À½À§Ä¡¿¡ Á¸ÀçÇÑ´Ù. ´ç½ÅÀº pushl¸í·ÉÀ» ÀÌ¿ëÇØ¼­ ½ºÅÃÀÇ °¡Àå À§¿¡ °ªÀ» ¹Ð¾î ³ÖÀ» ¼ö ÀÖ´Ù. ½ºÅÃÀÇ °¡Àå À§¿¡´Â ·¹Áö½ºÅÍ¿Í ´Ù¸¥ °ªµéÀÌ µé¾î °¥ ¼ö ÀÖ´Ù. ¿ì¸®´Â ¸»ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. "¿Ö ÇÏÇÊ °¡Àå À§¿¡ ÀúÀåÇØ¾ßÇÏÁÒ?" ±× ÀÌÀ¯´Â °£´ÜÇÏ´Ù. Á¢½Ã¸¦ ¾Ä±â À§Çؼ­ ½×¾Æ µÎ¾úÀ» ¶§ À§¿¡¼­ ºÎÅÍ ²¨³»¼­ ¾Ä´Â ÀÌÀ¯¸¦ »ý°¢Çغ¸¸é µÈ´Ù. ȤÀº Ã¥»ó¿¡ ½×¿©ÀÖ´Â ¼­·ùÀÇ Ã³¸®¸¦ »ý°¢ÇØ º¸¶ó. À§¿¡¼­ ºÎÅÍ ²¨³»¾î¼­ ó¸®ÇÏ´Â°Ô ¾Æ·¡, ȤÀº Áß°£¿¡¼­ ²¨³»¾î¼­ ó¸®ÇÏ´Â °Íº¸´Ù ÈξÀ ½±´Ù. ÄÄÇ»ÅÍ¿¡¼­ÀÇ ¸Þ¸ð¸® °ü¸® ¿ª½Ã À§¿¡ÀÖ´Â °ÍºÎÅÍ ²¨³»¾î¼­ °¡Á®¿À´Â°Ô ±¸Á¶»ó ÈξÀ ½±µµ·Ï µÇ¾î ÀÖ´Ù. pushlÀ» ÀÌ¿ëÇØ¼­ ½ºÅÃÀÇ °¡Àå À§¿¡ µ¥ÀÌÅ͸¦ ¿Ã·È´Ù¸é, ÀÌ µ¥ÀÌÅÍ´Â poplÀ» ÅëÇØ¼­ °¡Á®¿Ã ¼ö ÀÖ´Ù. popl¸í·ÉÀ» ÀÌ¿ëÇÏ¸é ½ºÅÃÀÇ °¡Àå À§¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ °¡Á®¿À°Ô µÈ´Ù.

½ºÅÿ¡ °ªÀ» ¹Ð¾î ³Ö°ÔµÇ¸é ÇöÀç ½ºÅÃÀÇ Á¦ÀÏ À­ºÎºÐÀÇ ÁÖ¼Ò¸¦ °è»êÇØ¼­ ±× À§Ä¡¿¡ °ªÀ» Ãß°¡ÇÑ´Ù. ½ºÅÃÀÇ Á¦ÀÏ À§ÀÇ À§Ä¡°ªÀº %esp ·¹Áö½ºÅ͸¦ ÅëÇØ¼­ ¾Ë¾Æ¿Ã ¼ö ÀÖ´Ù. Âü°í·Î ½ºÅÃÀº ¾ðÁ¦³ª ¿¬¼ÓÀûÀ¸·Î À§Ä¡ÇÏ°Ô µÇ¹Ç·Î µ¥ÀÌÅÍÀÇ Å©±â¸¸ ¾Ë°í ÀÖ´Ù¸é À§Ä¡¸¦ Á¤È®ÇÏ°Ô °è»êÇÒ ¼ö ÀÖ´Ù.

pushlÀ» ÅëÇØ¼­ ½ºÅØ¿¡ ¾î¶² °ªÀ» ³Ö°Ô µÇ¸é ½ºÅÃÀÇ Á¦ÀÏ À§¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ¿¡ 4°¡ ´õÇØÁ®¾ß ÇÑ´Ù. °í·Î %esp¿¡¼­ 4¸¦ »©¸é °¡Àå ÃÖ±Ù¿¡ ÀúÀåµÈ µ¥ÀÌÅ͸¦ Àоî¿Ã ¼ö ÀÖ°Ô µÈ´Ù. (ÀúÀåµÇ´Â µ¥ÀÌÅÍ´Â ¿öµå(word)Áï 4¹ÙÀÌÆ®ÀÓÀ» ±â¾ïÇ϶ó). ¸¸¾à ½ºÅÃÀ¸·Î ºÎÅÍÀÇ µ¥ÀÌÅÍ »èÁ¦´Â popl¸í·ÉÀ» ¼öÇàÇÏ¸é µÈ´Ù. pushl°ú poplÀº ÇϳªÀÇ ¿ÀÆÛ·£µå¸¸À» °¡Áø´Ù.

¸¸¾à ½ºÅÃÀÇ °¡ÀåÀ§¿¡ Á¢±ÙÇÏ±æ ¿øÇÑ´Ù¸é, %esp ·¹Áö½ºÅ͸¦ indirect ¾îµå·¹½º ¸ðµå·Î Á¢±ÙÇÏ¸é µÈ´Ù. ´ÙÀ½Àº ½ºÅÃÀÇ °¡Àå À§¿¡ ÀÖ´Â °ªÀ» %eax ·¹Áö½ºÅÍ·Î ¿Å±â´Â ¿¹ÀÌ´Ù.

	
movl (%esp), %eax
# ȤÀº
movl %esp, %eax
			
À§ÀÇ ¿¹´Â indirect ¸ðµå À̹ǷΠ%eax¿¡´Â ½ºÅÃÀÇ À§¿¡ ÀÖ´Â °ªÀÌ ¾Æ´Ñ ½ºÅÃÀÇ À§ÀÇ À§Ä¡ÁÖ¼Ò°¡ ÀúÀåµÈ´Ù. ¸¸¾à ÁÖ¼Ò¿¡ ÀúÀåµÈ °ªÀ» °¡Á®¿À±æ ¿øÇÑ´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÈ´Ù.
movl 4(%esp), %eax
			
À§ÀÇ ¿¹Á¦¸¦ º¸¸é base pointer ÁÖ¼Ò¸ðµå¸¦ ÀÌ¿ëÇØ¼­ °¡Á®¿À°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. %esp¿¡¼­ 4¸¸Å­ À̵¿ÇÑ À§Ä¡¿¡ ÀúÀåµÈ °ªÀ» %eax¿¡ º¹»çÇÑ´Ù.

C¾ð¾îÀÇ calling convention¿¡¼­ ½ºÅÃÀº ÇÔ¼öÀÇ ·ÎÄú¯¼ö, ÀÎÀÚ, ¸®ÅÏÁÖ¼ÒµéÀ» ±¸ÇöÇϴµ¥ Áß¿äÇÏ°Ô »ç¿ëµÈ´Ù.

subl  $8, %esp
			
À§ÀÇ ¸í·ÉÀº %esp·Î ºÎÅÍ 8À» »«´Ù(word´Â 4¹ÙÀÌÆ® Å©±â¸¦ °¡ÁüÀ» ±â¾ïÇ϶ó). ÀÌ·±½ÄÀÇ »ç¿ëÀº ÇÔ¼ö¸¦ È£ÃâÇØ¼­ ½ºÅÿ¡ °ªÀ» ÀúÀåÇϴµ¥, ÀÌ·± Àú·± °ÅÃßÀå ½º·¯¿î °Íµé(·¹Áö½ºÅÍ ÁÖ¼Òµî..)À» ÀÌ¿ëÇÏÁö ¾Ê°íµµ °£´ÜÈ÷ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡À» °¡Áø´Ù. ÀÏ´Ü ÇÔ¼ö°¡ È£ÃâµÇ¾î¼­ ½ºÅÃÀÌ ÇÒ´çµÇ¸é ÇÔ¼ö°¡ Á¾·áÇÒ¶§±îÁö °è¼Ó ³²¾Æ ÀÖ°Ô µÈ´Ù. ¿ì¸®°¡ ÇÔ¼ö¿¡¼­ ¸®ÅÏÇÏ¸é ½ºÅà ÇÁ·¡ÀÓ°ú ¿©±â¿¡ ÀÖ´Â º¯¼ö°¡ Á¦°ÅµÈ´Ù. ÀÌ·¸°Ô ƯÁ¤ÇÑ ÇÔ¼öÀÇ ³»ºÎ¿¡¼­¸¸ »ç¿ëµÇ´Â Ư¡À¸·Î À̵éÀ» ·ÎÄú¯¼ö¶ó°í ºÎ¸¥´Ù. ¿ì¸®°¡ 2 wordÀÇ ·ÎÄà ÀúÀå¼Ò¸¦ ¸¸µé¾ú°í ½ºÅÃÀº ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °ÍÀÌ´Ù.
Parameter  #N    <--- N*4+4(%ebp)
...
Parameter  2     <--- 12(%ebp)
Parameter  1     <---  8(%ebp)
Return Address   <---  4(%ebp) 
Old %ebp         <---   (%ebp)
Local Variable 1 <--- -4(%ebp) 
Local Variable 2 <--- -8(%ebp)  and (%esp)
			
ÀÌÁ¦ ¿ì¸®´Â base pointer addressing ¹æ¹ýÀ» ÀÌ¿ëÇØ¼­ %ebp·Î ºÎÅÍ ¿øÇÏ´Â ¸ðµç °ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ¹°·Ð ¿©·¯ºÐÀº base pointer addressing ¸ðµå¸¦ À§Çؼ­ ´Ù¸¥ ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇÒ ¼öµµ ÀÖ±äÇÏÁö¸¸, ÀϹÝÀûÀº x86¿¡¼­ %ebp·¹Áö½ºÅͰ¡ °¡Àå ºü¸¥ °ü°è·Î %ebp°¡ ¼±È£µÈ´Ù.

À̹øÀåÀ» ÅëÇØ¼­ ¿ì¸®´Â Àü¿ªº¯¼ö¿Í static º¯¼ö¸¦ ¸Þ¸ð¸®»ó¿¡¼­ ¾î¶»°Ô Á¢±ÙÇÒ ¼ö ÀÖ´ÂÁö¸¦ ¹è¿ü´Ù. Àü¿ªº¯¼ö¿Í staticÀÇ Â÷ÀÌÁ¡Àº static°¡ ¿ÀÁ÷ ÇÔ¼ö³»¿¡¼­¸¸ »ç¿ëµÇ°í Àü¿ªº¯¼ö´Â ¿©·¯ÇÔ¼ö¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ´Ù¸¥ ¸ðµç ¾ð¾î¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¾î¼Àºí¸®¾î¿¡¼­µµ ÀÌµé º¯¼ö¸¦ ´Ù·ç´Â ¹æ¹ýÀº µ¿ÀÏÇÏ´Ù.

ÇÔ¼ö´Â ½ÇÇàµÉ¶§ ±âº»ÀûÀ¸·Î 3°¡ÁöÀÏÀ» ÇØÁÖ¾î¾ß ÇÑ´Ù. ù¹øÂ°·Î %eax¿¡ ¸®ÅÏ °ªÀ» ÀúÀåÇÑ´Ù. µÎ¹øÂ°·Î È£ÃâµÇ±â Àü¿¡ ½ºÅÃÀ» ÃʱâÈ­(reset)ÇÑ´Ù. ¸¶Áö¸·À¸·Î ¸®ÅÏÀÇ Á¦¾î´Â ret ¸í·ÉÀ» ÅëÇØ¼­ ÀÌ·ç¾îÁø´Ù. À̰ÍÀº ½ºÅÃÀÇ Á¦ÀÏ À§ÀÇ °ªÀ» °¡Á®¿À´Â(pop)ÇÏ´Â ÀÏÀ» Çϰí, ¸í·ÉÀÇ Æ÷ÀÎÅÍÀÎ %eip¸¦ ¼³Á¤ÇÑ´Ù.

ÇÔ¼ö´Â ¸®ÅÏÇÒ ¶§ ±×°ÍÀ» È£ÃâÇÑ Äڵ忡°Ô Á¦¾î±ÇÀ» µÇµ¹·Á ÁÖ¾î¾ß¸¸ Çϴµ¥, ±×·¯±â À§Çؼ­´Â ¹Ýµå½Ã ÀÌÀüÀÇ ½ºÅÃÇÁ·¹ÀÓÀ» º¹±¸ÇØ ÁÖ¾î¾ß¸¸ ÇÑ´Ù. ±×·¯³ª ret ¸í·ÉÀº ÀÌ·¯ÇÑ ÀÏÀ» ÇÏÁö ¾Ê´Â´Ù. ¿Ö³ÄÇÏ¸é ¿ì¸®ÀÇ ÃÖ±Ù ½ºÅÃÇÁ·¹ÀÓ¿¡ ÀÖ´Â ¸®ÅÏ ÁÖ¼Ò´Â ½ºÅÃÀÇ Á¦ÀÏ À§¸¦ °¡¸®Å°Áö ¾Ê±â ¶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î ÇÔ¼ö¸¦ ¼öÇàÇϱâ Àü¿¡ ¸®ÅÏÇÒ ½ºÅÃÆ÷ÀÎÅÍÀÎ %esp¿Í º£À̽º Æ÷ÀÎÅÍ %ebp¸¦ ¸®¼ÂÇØÁÖ¾î¾ß ÇÑ´Ù. ±×·¯¹Ç·Î ÇÔ¼ö·Î ºÎÅÍ ¸®ÅÏÇϱâ À§Çؼ­ ´ÙÀ½°ú °úÁ¤ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.

	
movl   %ebp,  %esp
popl   %ebp
ret 
			
ÇÔ¼ö°¡ ¸®ÅÏÇÒ ¶§ ¿©·¯ºÐÀÌ »ç¿ëÇß´ø ¸ðµç ·ÎÄú¯¼ö´Â óºÐµÇ¾î ¹ö¸®°Ô µÊÀ» ÁÖ¸ñÇϱ⠹ٶõ´Ù. ¿Ö³ÄÇÏ¸é ¿©·¯ºÐÀÌ ½ºÅà Æ÷ÀÎÅ͸¦ µÚ·Î À̵¿ÇÏ°Ô µÇ¸é, ±× ¾ÕÀÇ ½ºÅÃÀ» ´Ù¸¥ °ªµéÀÌ µ¤¾î½á ¹ö¸®±â ¶§¹®ÀÌ´Ù. °á±¹ Áö¿ª º¯¼öµéÀº ÇÔ¼ö°¡ »ý¼ºµÇ¾î¼­ ÀÛµ¿Çϰí ÀÖÀ» ¶§¸¸ À¯È¿ÇÏ°Ô µÈ´Ù. ÇÔ¼ö°¡ ¸®ÅÏÇÏ°Ô µÇ¸é ÀÌÁ¦ ÇÁ·Î±×·¥ÀÇ Á¦¾î±ÇÀº ÇÔ¼ö¸¦ È£ÃâÇÑ ÄÚµå·Î ³Ñ¾î¿À°í, Á¦¾î±ÇÀ» °¡Áø ÄÚµå´Â %eax¸¦ ÀÌ¿ëÇØ¼­ ¸®ÅϰªÀ» °Ë»çÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

page 47¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ÇØ¼®ÀÌ ÇÊ¿ä.

4.4. ÇÔ¼ö ¿¹Á¦

ÀÌÁ¦ ½ÇÁ¦ ÇÁ·Î±×·¥¿¡¼­ ¾î¶»°Ô ÇÔ¼ö¸¦ È£ÃâÇÏ´ÂÁö ¿¹¸¦ µé¾î¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ¿ì¸®´Â power(°ÅµìÁ¦°ö)¿¬»êÀ» ÇÏ´Â ÀÌ´Ù. power ÇÔ¼ö´Â 2°³ÀÇ ¼ýÀÚ¸¦ ÇÊ¿ä·Î ÇÑ´Ù. ¿¹¸¦ µé¾î 2, 3ÀÌ µé¾î °¬´Ù¸é 2 * 2 * 2 ¿¬»êÀ» ÇÏ°Ô µÇ°í 8À» ¸®ÅÏÇÏ°Ô µÈ´Ù.

´ÙÀ½ ÄÚµå´Â ¿ÏÀüÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ÆÄÀÏÀÇ À̸§Àº power.s·Î ÇϰڴÙ.

# ÇÏ´ÂÀÏ : 2^3 + 5^2ÀÇ °ªÀ» °è»êÈÄ µÇµ¹·ÁÁØ´Ù.
#

.section .data
.section .text

.globl _start
_start:
pushl $3                    # µÎ¹øÂ° ÀÎÀÚ¿¡ 3À» ³Ö´Â´Ù.
pushl $2                    # ù¹øÂ° ÀÎÀÚ¿¡ 2¸¦ ³Ö´Â´Ù.

call power                  # power ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. 

addl $8, %esp               # ½ºÅÃÀÇ Æ÷ÀÎÅ͸¦ À̵¿ÇÑ´Ù. 

pushl %eax                  # ÇÔ¼öÈ£Ãâ °á°ú°ªÀ» ÀúÀåÇÑ´Ù.

pushl $2                    # µÎ¹øÂ° ÀÎÀÚ¿¡ 2¸¦ ³Ö´Â´Ù. 
pushl $5                    # ù¹øÂ° ÀÎÀÚ¿¡ 5¸¦ ³Ö´Â´Ù.
call power                  # power ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
addl $8, %esp               # ½ºÅÃÆ÷ÀÎÅ͸¦ À̵¿ÇÑ´Ù. 

popl %ebx                   # µÎ¹øÂ° È£ÃâÇÑ powÇÔ¼öÀÇ ¸®ÅϰªÀº 
                            # ÀÌ¹Ì %eax¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. 
                            # ¿ì¸®´Â ù¹øÂ° powÇÔ¼öÀÇ °á°ú°ªÀ» ½ºÅÿ¡¼­ 
                            # °¡Á®¿Â´ÙÀ½ %ebx¿¡ ÀúÀåÇÑ´Ù.  

addl %eax, %ebx             # °¢ °á°ú°ªµéÀ» ´õÇÑ´Ù. 
                            # ´õÇÑ °á°ú°ªÀº %ebx¿¡ ÀúÀåµÈ´Ù.

movl $1, %eax               # exit (%ebx °ªÀÌ ¸®ÅϵȴÙ)   
int  $0x80                  # exit ½Ã½ºÅÛ È£ÃâÀ» À§Çؼ­ ÀÎÅÍ·´Æ®¸¦ °Ç´Ù.


# ÇÔ ¼ö ¸í : power
# ÇÏ ´Â ÀÏ : ÁÖ¾îÁö´Â ÀÎÀÚ¸¦ ÀÌ¿ëÇØ¼­ °ÅµìÁ¦°ö ¿¬»êÀ» ÇÑÈÄ
#            µÇµ¹·ÁÁØ´Ù.   
#
# ÀÔ    ·Â : ù¹øÂ° ÀÎÀÚ - ±âº»¼ýÀÚ 
#            µÎ¹øÂ° ÀÎÀÚ - °ÅµìÁ¦°ö ¼ýÀÚ 
#
# Ãâ    ·Â : ¿¬»êÀÇ °á°ú 
#
# ÁÖ    ÀÇ : ÀÎÀÚ´Â ¹Ýµå½Ã 1º¸´Ù Ä¿¾ß ÇÑ´Ù.
#
# º¯ ¼ö µé : 
#            %ebx - ±âº» ¼ýÀÚ
#            %ecx - °ÅµìÁ¦°ö ¼ýÀÚ 
#
#            -4($ebp) - ÃÖ±Ù °á°ú°ª 
#
#            %eax ´Â ÀÓ½ÃÀúÀå¼Ò·Î »ç¿ëµÈ´Ù.
#

.type power, @function
power:
	pushl %ebp           # ÀÌÀüÀÇ º£À̽º Æ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù. 
	movl %esp, %ebp      # ½ºÅÃÆ÷ÀÎÅ͸¦ º£À̽º Æ÷ÀÎÅÍ·Î ¸¸µç´Ù.
	subl $4, %esp        # Áö¿ª ÀúÀå¼Ò¸¦ À§ÇÑ °ø°£À» ¸¸µç´Ù.
	
	movl 8(%ebp), %ebx   # ù¹øÂ° ÀÎÀÚ¸¦ %eax¿¡ ÀúÀåÇÑ´Ù.
	movl 12(%ebp), %ecx  # µÎ¹øÂ° ÀÎÀÚ¸¦ %ecx¿¡ ÀúÀåÇÑ´Ù.

	movl %ebx, -4(%ebp)  # ÃÖ±Ù°ªÀ» ÀúÀåÇÑ´Ù. 

power_loop_start:
	cmpl $1, %ecx        # ¸¸¾à powerÀÌ 1À̸é end_power·Î Á¡ÇÁÇÑ´Ù. 
	je end_power
	movl -4(%ebp), %eax  # ÃÖ±Ù °á°ú°ªÀ» %eax¿¡ ÀúÀåÇÑ´Ù.
	imul %ebx, %eax      # ÃÖ±Ù °á°ú°ª¿¡ ±âº» ¼ýÀÚ¸¦ °öÇÑ´Ù.
	
	movl %eax, -4(%ebp)  # ÃÖ±Ù °á°ú°ªÀ» ÀúÀåÇÑ´Ù.
	decl %ecx            # powerÀ» °¨¼Ò½ÃŲ´Ù.

	jmp power_loop_start # ´ÙÀ½ °ÅµìÁ¦°ö(power)¸¦ ½ÇÇàÇÑ´Ù.

end_power:                 
	movl -4(%ebp), %eax  # ¸®ÅϰªÀ» %eax¿¡ ÀúÀåÇÑ´Ù.
	movl %ebp, %esp      # ½ºÅÃÆ÷ÀÎÅ͸¦ º¹±¸ÇÑ´Ù.
	popl %ebp            # º£À̽º Æ÷ÀÎÅ͸¦ º¹±¸ÇÑ´Ù.  
	ret
			

À§ÀÇ Äڵ带 ÀÛ¼ºÇϰí ÄÄÆÄÀÏ ½ÃŲ´ÙÀ½ ½ÇÇà½ÃÄÑ º¸µµ·Ï ÇÏÀÚ. ±×¸®°í powerÇÔ¼ö¸¦ ´Ù¸¥ ÀÎÀÚ¸¦ Á־ È£ÃâÇØ¼­ °á°ú°ªÀÌ Á¦´ë·Î ³ª¿À´ÂÁö È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ. À̶§ °á°ú°ªÀº 256À» ³Ñ±âÁö ¾Êµµ·Ï Àû´çÈ÷ ÀÎÀÚ¸¦ Á¶ÀýÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. Å×½ºÆ®°¡ ³¡³µ´Ù¸é µÎ°³ÀÇ °á°ú°ªÀ» »«°ªÀ» ¸®ÅÏÇϵµ·Ï Äڵ带 ¼öÁ¤ÇØ º¸µµ·Ï ÇÏÀÚ. power ÇÔ¼ö¸¦ 3¹ø È£ÃâÇÏ°í ±× °ªÀ» ¸®ÅÏÇÏ´Â Äڵ嵵 ¸¸µé¾î º¸ÀÚ.

ÇÁ·Î±×·¥ÀÇ ÄÚµå´Â ¸Å¿ì °£´ÜÇÏ´Ù. ´ç½ÅÀÌ ÀÎÀÚ¸¦ ½ºÅÿ¡ Áý¾î ³Ö°í ÇÔ¼ö¸¦ È£ÃâÇϸé, ÇÔ¼ö´Â ½ºÅà Æ÷ÀÎÅ͸¦ µÚ·Î µÇµ¹¸®°í ½ºÅÿ¡ ÀÖ´Â ÀÎÀÚ¸¦ Àоî¿Í¼­ ¿¬»êÀ» ÇÏ°í °á°ú°ªÀ» %eax¿¡ ÀúÀåÇÑ´Ù. À§ ÇÁ·Î±×·¥¿¡¼­´Â powÇÔ¼ö¸¦ µÎ¹ø È£ÃâÇϴµ¥, ¿ì¸®´Â ù¹øÂ° °ªÀ» ½ºÅÿ¡ ÀúÀåÇß´Ù. ÀÌÀ¯´Â ·¹Áö½ºÅÍ¿¡ ´ÜÁö Çѹø¿¡ ÇϳªÀÇ °ª¸¸ ÀúÀåµÉ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿ì¸®´Â ù¹øÂ° powÇÔ¼ö ¸®ÅϰªÀ» ½ºÅÿ¡ ÀúÀåÇÏ°í ³ªÁß¿¡ µÎ¹øÂ° ÇÔ¼öÀÇ °á°ú°¡ ³ª¿ÔÀ»¶§ ½ºÅÃÀÇ °ªÀ» °¡Á®¿Í¼­(pop) µÎ¹øÂ° °á°ú¿Í ´õÇØ¼­ ¿øÇÏ´Â °á°ú¸¦ ¾ò¾î ¿Ã ¼ö ÀÖ´Ù.

ÀÌÁ¦ ÇÔ¼ö ÄÚ½ºµå¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸ÀÚ. ÇÔ¼ö¿¡¼­ ÁÖ¸ñÇØ¾ßµÉ ºÎºÐÀº ÇÔ¼ö°¡ ¾î¶»°Ô ¼±¾ðµÇ´ÂÁö, ±×¸®°í ÀÎÀÚ°¡ ¾î¶»°Ô ³Ñ¾î°¡°í ¸®ÅϰªÀ» ³Ñ°ÜÁÖ´ÂÁö ÇÏ´Â ºÎºÐÀÌ´Ù. ÀÌ·¯ÇÑ ÀԷºκаú Ãâ·ÂºÎºÐÀº ÇÁ·Î±×·¡¸Ó°¡ ÇÔ¼ö¸¦ ¼³°èÇÒ ¶§ °¡Àå ÀÏÂ÷ÀûÀ¸·Î °í·ÁÇÏ´Â ºÎºÐÀ¸·Î ÈçÈ÷ ÇÔ¼öÀÇ ÀÎÅÍÆäÀ̽º(Interface)¶ó°í ÇÑ´Ù. ÀÎÅÍÆäÀ̽º¸¦ Á¦´ë·Î ±¸¼ºÇϱâ À§Çؼ­ ÇÁ·Î±×·¡¸Ó´Â ½ºÅðú %eax¿¡ ´ëÇØ¼­ ÀÌÇØÇϰí ÀÖ¾î¾ß ÇÑ´Ù. ½ºÅÃÀº ÀÔ·Â, %eax´Â Ãâ·Â(¸®ÅÏ)À» À§Çؼ­ »ç¿ëµÈ´Ù.

°¡Àå ¸ÕÀú ÇØ¾ß ÇÒÀÏÀº ÇÔ¼öÀÇ À̸§À» Á¤ÇÏ´Â ÀÏÀÌ´Ù.

.type power,@function
			
À̰ÍÀº ÇÔ¼öÀÇ À̸§ powerÀ» ÇÔ¼ö¿¡ ¿¬°á ½ÃŰ´Â ÀÏÀ» ÇÑ´Ù. ¿ì¸®´Â powerÀ» ÀÌ¿ëÇØ¼­ ½ÇÁ¦ ÇÔ¼ö¸¦ ½ÇÇà ½Ãų¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¼±¾ðÀº ÇöÀç·Î½á´Â ±×¸® À¯¿ëÇÏÁö ¾ÊÁö¸¸ ¸¸¾à ÇÁ·Î±×·¥ÀÇ Å©±â°¡ Ä¿Á®¼­ ¿©·¯°³ÀÇ ÆÄ¾Ë·Î ³ª´µ¾î¼­ À¯ÁöµÇ¾î¾ß ÇÑ´Ù¸é ¸Å¿ì À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. À̰ܿ¡ ´ëÇÑ À庸´Â ³ªÁß¿¡ ÀÚ¼¼È÷ ¼³¸íÇϵµ·Ï ÇϰڴÙ. ÇÔ¼ö¸¦ ¼±¾ðÇßÀ¸´Ï ½ÇÁ¦ ÇÔ¼ö Äڵ带 Àû¾î¾ß ÇÒ°ÍÀÌ´Ù. ÇÔ¼öÄڵ尡 ½ÃÀ۵Ǵ À§Ä¡´Â ´ÙÀ½°ú °°ÀÌpower ¶óº§À» ÀÌ¿ëÇØ¼­ ¸í½ÃÇÒ ¼ö ÀÖ´Ù.
power:
			
ÀÌ·¸°Ô ÇØ¼­ ¿ì¸®°¡ ÃÖÃÊ ¼±¾ðÇÑ powerÀº ÀÌ ¶óº§ÀÌ ÀÖ´Â ÁÖ¼Ò¸¦ °¡¸®Å°°Ô µÈ´Ù. ÀÌÁ¦ºÎÅÍ ½ÇÁ¦ ÇÔ¼öÀÇ ½ÇÇàºÎ¸¦ ÀÛ¼ºÇÏ¸é µÈ´Ù.
pushl  %ebp
movl   %esp, %ebp
subl   $4, %esp
			
°¡Àå ¸ÕÀú ½ºÅÃÀ» Á¦¾îÇϱâ À§ÇÑ ¸í·ÉÀÌ ½ÇÇàµÇ´Âµ¥, À§ÀÇ ¸í·ÉÀ» ¼öÇàÇÑÈÄ ½ºÅÃÀÇ ±¸Á¶´Â ¾Æ·¡¿Í °°´Ù.
Base Number    <------- 12(%ebp)
Power          <-------  8(%ebp)
Return Address <-------  4(%ebp)
Old %ebp       <-------   (%ebp) 
Current result <-------  -4(%ebp) and (%esp)
			
ÀÌ ÇÁ·Î±×·¥Àº base number¿Í ¿¬»ê¿¡ »ç¿ëÇÒ ÇÇ¿¬»êÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ %ebx, ÇöÀç °ªÀ» ÀúÀåÇϱâ À§ÇÑ ·¹Áö½ºÅÍ(-4(%ebp))¸¦ °¡Áö°í ½ÃÀÛÇÑ´Ù. ±×¸®°í ¸î¹øÀÇ °ÅµìÁ¦°öÀ» ÇØ¾ßÇÏ´ÂÁö´Â %ecx¿¡ ÀúÀåµÈ´Ù. %ecx´Â ÇѹøÀÇ °ÅµìÁ¦°öÀÌ ÀϾ¸é 1¾¿ °¨¼ÒµÇ°í 1ÀÌµÇ¸é ·çÇÁ¿¡¼­ ¹þ¾î³­´Ù.

°ÅµìÁ¦°ö ÇÔ¼ö¸¦ º¸¸é imul¿Í decl°¡ µîÀåÇÑ´Ù. imulÀº °ö¼À¿¬»êÀ» ÇÑ´Ù. ¿¬»êÀÇ °á°ú´Â µÎ¹øÂ° ¿ÀÆÛ·£µå¿¡ ÀúÀåµÈ´Ù. declÀº ·¹Áö½ºÅÍÀÇ °ªÀ» 1°¨¼Ò½ÃŲ´Ù. ¸í·É¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Appendix B¸¦ Âü°íÇϱ⠹ٶõ´Ù.

4.5. Àç±Í ÇÔ¼ö

´ÙÀ½ ÇÁ·Î±×·¥Àº ¸Ó¸®¸¦ Á»´õ ±¼·ÁÁà¾ß ÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ÆÑÅ丮¾ó(factorial)À» ±¸ÇÑ´Ù. ÆÑÅ丮¾ó ¿¬»êÀº ÀڽŰú 1»çÀÌÀÇ ¸ðµç ¼ýÀÚ¸¦ °öÇÏ´Â ¿¬»êÀ» ÇÑ´Ù. ¿¹¸¦ µé¾î¼­ 7ÀÇ ÆÑÅ丮¾óÀº 7*6*5*4*3*2*1À̰í 4ÀÇ ÆÑÅ丮¾óÀº 4*3*2*1ÀÌ´Ù. ÆÑÅ丮¾ó ¿¬»êÀ» ÇÒ¶§ ¿©·¯ºÐÀº ÇϳªÀÇ ±ÔÄ¢À» ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 4ÆÑÅ丮¾óÀÇ °æ¿ì 3ÆÑÅ丮¾óÀÌ 4¹ø ¹ß»ýÇÏ´Â °ÍÀ̰í, 3ÆÑÅ丮¾óÀº 2ÆÑÅ丮¾óÀÌ 3¹ø ¹ß»ýÇϰí, 2ÆÑÅ丮¾óÀº 1ÆÑÅ丮¾óÀÌ 2¹ø ¹ß»ýÇÑ´Ù. 1ÆÑÅ丮¾óÀº 1¹ø¹ß»ýÀ¸·Î ³¡³­´Ù. ÀÌ·¯ÇÑ ÇüÅÂÀÇ Á¤ÀǸ¦ Àç±Í(recursive)Á¤ÀÇ ¶ó°í ÇÑ´Ù. ÆÑÅ丮¾ó ÇÔ¼ö¸¦ ±¸ÇöÇÒ¶§ ÀÌ Àç±Í Á¤ÀǸ¦ »ç¿ëÇÏ¸é ¹®Á¦¸¦ ´õ ½±°Ô Ç® ¼ö ÀÖ´Ù.

ÆÑÅ丮¾ó ÇÔ¼ö´Â ÇÔ¼öÀÚ½ÅÀ» Æ÷ÇÔÇÏ´Â Àç±ÍÀû ±¸Á¶¸¦ °¡Áø´Ù. ÇÔ¼ö°¡ ÇÔ¼ö ÀÚ½ÅÀ» Æ÷ÇÔÇÑ´Ù¸é ¹«ÇÑÈ÷ ÀÚ½ÅÀ» È£ÃâÇÒ ¼öµµ ÀÖÀ¸¹Ç·Î base case °¡ Á¤ÀǵǾî ÀÖ¾î¾ß¸¸ ÇÑ´Ù. base case´Â Àç±Í°¡ Á¾·áµÇ´Â ½ÃÁ¡À» °áÁ¤ÇÑ´Ù. base case°¡ ¾ø´Ù¸é ÇÔ¼ö´Â ¹«ÇÑÈ÷ È£ÃâµÉ °ÍÀÌ°í °á±¹ stack °ø°£À» ¸ðµÎ ¼ÒºñÇÏ°Ô µÉ °ÍÀÌ´Ù. ÆÑÅ丮¾óÀÇ °æ¿ì base case´Â ¼ýÀÚ 1ÀÌ µÈ´Ù. ÆÑÅ丮¾ó ÇÔ¼ö¸¦ Àç±ÍÈ£ÃâÇÏ°Ô µÇ¸é ¹øÈ£´Â 1¾¿ ÁÙ¾îµé°í base case¿Í °°Àº ¼ö°¡ µÈ´Ù¸é ÇÔ¼ö¸¦ ºüÁ®³ª¿À°Ô µÈ´Ù.

  • ¼ýÀÚ¸¦ Æò°¡ÇÑ´Ù.

  • ¼ýÀÚ°¡ 1Àΰ¡?

  • ±×·¸´Ù¸é ÆÑÅ丮¾ó ¿¬»êÀ» Á¾·áÇÏ°í °ªÀ» ¸®ÅÏÇÑ´Ù.

  • ±×·¸Áö ¾Ê´Ù¸é ¼ýÀÚ¸¦ 1°¨¼Ò ½ÃŰ°í ÆÑÅ丮¾ó ÇÔ¼ö¸¦ Àç È£ÃâÇÑ´Ù.

# ÆÑÅ丮¾ó ¿¬»êÀ» ÇÑ´Ù.
# ¿¹¸¦ µé¾î 3Àº 3 * 2 * 1 
#           4´Â 4 * 3 * 2 * 1
# ÀÌ µÈ´Ù.
.section .data

.section .text


.global _start
.global factorial

_start:
pushl  $4            # ÆÑÅ丮¾ó ÇÔ¼ö¿¡ ³Ñ±æ ÀÎÀÚ¸¦ º¹»çÇÑ´Ù.

call   factorial     # ÆÑÅ丮¾ó ÇÔ¼ö¸¦ ½ÇÇàÇÑ´Ù.
addl   $4, %esp
movl   %eax, %ebx    # ÆÑÅ丮¾ó ÇÔ¼öÀÇ ¸®ÅϰªÀº %eax¿¡ ÀúÀåµÇÁö¸¸
                     # ÇÁ·Î±×·¥ ¸®ÅϰªÀ¸·Î ³Ñ±æ Çʿ䰡 ÀÖÀ¸¹Ç·Î %ebx¿¡ º¹»çÇÑ´Ù. 

movl   $1, %eax      # exit ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÑ´Ù.
int    $0x80

# factorial ÇÔ¼ö Á¤ÀÇ
factorial:
pushl  %ebp          # ¸®ÅÏÇϱâ Àü¿¡ ÀÌÀüÀÇ ½ºÅà Æ÷ÀÎÅ͸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. 
                     # ±×·¡¼­ ÀÌÀüÀÇ ½ºÅÃÆ÷ÀÎÅ͸¦ ÀúÀåÇÑ´Ù. 
                     # ÇÔ¼ö¸¦ À§ÇÑ ±âº» ¿ä¼Ò 
movl   %esp, %ebp    

movl   8(%ebp), %eax # ù¹øÂ° ÀÎÀÚ¸¦ %eax¿¡ º¹»çÇÑ´Ù. 
                     # 4(%ebp)´Â ¸®ÅϾîµå·¹½º À̰í 
                     # 8(%ebp)´Â ù° ÀÎÀÚÀÇ ¾îµå·¹½ºÀÌ´Ù. 

cmpl   $1, %eax      # Àç±Í¿¡¼­ ¹þ¾î³ª±â À§ÇÑ base case °ªÀº 1ÀÌ´Ù. 
                     # ¿©±â¿¡¼­ ÀÎÀÚÀÇ °ªÀÌ 1ÀÎÁö¸¦ °Ë»çÇÑ´Ù.
                     # ¸¸¾à 1 À̶ó¸é end_factorial·Î Á¡ÇÁÇÑ´Ù.  
je     end_factorial
decl   %eax          # ±×·¸Áö ¾Ê´Ù¸é %eax¸¦ 1 °¨¼Ò ½ÃŲ´Ù.
pushl  %eax          # ÀÌ °ªÀº ´ÙÀ½ factorialÇÔ¼ö¸¦ È£ÃâÇϸ鼭 Àü´ÞµÇ¾î¾ß ÇϹǷΠ
                     # ½ºÅÿ¡ ¹Ð¾î ³Ö´Â´Ù.
call   factorial     # factorialÀ» ½ÇÇàÇÑ´Ù. 

movl   8(%ebp), %ebx 

imul   %ebx, %eax    # Ãֱ٠ȣÃâÇß´ø factorialÀÇ ¸®Åϰª°ú °öÇÑ´Ù.(%eax¿¡ ÀúÀåµÇ¾î ÀÖÀ½)
                     # °öÇѰá°ú´Â %eax¿¡ ÀúÀåÇÑ´Ù.


end_factorial:
movl  %ebp, %esp    # ÇÔ¼ö¸®ÅÏÀ» À§ÇÑ ±âº»¿ä¼Ò
popl  %ebp          # ¸®ÅÏÇϱâ Àü¿¡ ÀÌÀü ÇÔ¼öÀÇ ½ÃÀÛÆ÷ÀÎÅ͸¦ º¹±¸ÇÑ´Ù. 

ret                 # ÇÔ¼ö¸¦ ¸®ÅÏÇÑ´Ù.
			

¾î¼Àºí, ¸µÅ© °úÁ¤À» °ÅÃļ­ ½ÇÇà½ÃŰ°í ¸®Åϰá°ú¸¦ È®ÀÎÇÑ´Ù.

# as factorial.s -o factorial.o
# ld factorial.o -o factorial
# ./factorial
# echo $? 
			
ÇÁ·Î±×·¥ÀÇ ¸®ÅϰªÀÌ 24ÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. 24´Â 4ÀÇ ÆÑÅ丮¾ó ¿¬»ê °ªÀ¸·Î 4*3*2*1ÀÇ °á°ú´Ù.

¿©·¯ºÐÀÌ C¿Í °°Àº ¾ð¾î¸¦ ÅëÇØ¼­ Àç±ÍÈ£ÃâÀ» °æÇèÇØ º¸Áö ¾Ê¾Ò´Ù¸é À§ÀÇ Äڵ带 ÀÌÇØÇÏ´Â µ¥¿¡ ¾à°£ÀÇ ¾î·Á¿òÀÌ ÀÖÀ» ¼öµµ ÀÖ´Ù. ÀÌÁ¦ ¾î¶»°Ô ÀÌ·¯ÇÑ °è»êÀÌ °¡´ÉÇÑÁö¸¦ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

_start:
pushl   $4
call    factorial
			
ÀÌ ÇÁ·Î±×·¥Àº 4ÀÇ ÆÑÅ丮¾óÀ» °è»êÇÑ´Ù. È£ÃâµÉ ÇÔ¼ö¿¡ ÀÌ °ªÀ» ÀÎÀÚ·Î ³Ñ±â±â À§Çؼ­ ÇÔ¼ö È£ÃâÀü¿¡ ½ºÅÿ¡ ¹Ð¾î ³Ö¾ú´Ù. ÇÔ¼öÀÇ ÀÎÀÚ´Â ÇÔ¼ö¿¡¼­ ÀÛ¾÷¿¡ »ç¿ëµÉ µ¥ÀÌÅͶó´Â Á¡À» ±â¾ïÇϱ⠹ٶõ´Ù. À̰æ¿ì ÇÔ¼ö´Â ÇϳªÀÇ ÀÎÀÚ¸¦ °¡Áø´Ù.

pushl ¸í·ÉÀº °ªÀ» ½ºÅÃÀÇ °¡ÀåÀ§¿¡ ¹Ð¾î ³Ö´Â´Ù. call¸í·ÉÀº ÇÔ¼ö¸¦ È£ÃâÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.

´ÙÀ½ ÁÙÀ» ºÐ¼®ÇØ º¸µµ·ÏÇÏÀÚ.

addl   $4,    %esp
movl   %eax,  %ebx
movl   $1,    %eax
int    $0x80
			
factorialÇÔ¼ö°¡ ³¡³µÀ¸´Ï, 4ÀÇ ÆÑÅ丮¿­ÀÇ °ªÀ» °¡Á®¿Í¾ß ÇÒ°ÍÀÌ´Ù. ¿ì¼± ½ºÅÃÀ» û¼ÒÇØ¾ß ÇÑ´Ù. addl ¸í·ÉÀ» ÀÌ¿ëÇØ¼­ ½ºÅÃÆ÷ÀÎÅ͸¦ $4¸¸Å­ µÚ·Î ¿Å±ä´Ù. ÆÑÅ丮¾ó ÇÔ¼ö¸¦ È£ÃâÇß´Ù¸é ´ç½ÅÀº È£ÃâÇÑ ÇÔ¼ö°¡ ¸®ÅϵÈÈÄ ¹Ýµå½Ã ½ºÅÃÀÎÀÚ¸¦ û¼ÒÇØ ÁÖ¾î¾ß ÇÑ´Ù.

´ÙÀ½ %eax¸¦ %ebx·Î º¹»çÇÑ´Ù. %eax´Â factorialÇÔ¼öÀÇ ¸®ÅϰªÀÌ´Ù. À̰æ¿ì ¸®ÅϰªÀº ÆÑÅ丮¾ó ¿¬»ê°á°úÀÌ´Ù. ÆÑÅ丮¾ó ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ÀÎÀÚ¸¦ 4¸¦ ÁáÀ¸¹Ç·Î ¸®ÅϰªÀº 24°¡ µÉ°ÍÀÌ´Ù. ¸®ÅϰªÀº ¾ðÁ¦³ª %eax¿¡ ÀúÀåµÈ´Ù´Â °ÍÀ» ±â¾ïÇϱ⠹ٶõ´Ù. ¿ì¸®´Â ÇÁ·Î±×·¥ÀÌ Á¾·áÇÒ ¶§ ¿î¿µÃ¼Á¦¿¡ 24¸¦ µÇµ¹·Á ÁÖ¾î¾ßÇÑ´Ù. ¸®´ª½ºÀÇ °æ¿ì ÇÁ·Î±×·¥ÀÇ Á¾·á°ªÀº %eax°¡ ¾Æ´Ñ %ebx¿¡ ÀúÀåÇÑ´Ù. ÀÌÁ¦ exit() ½Ã½ºÅÛ È£ÃâÀ» ½ÇÇàÇÏ¸é µÈ´Ù.

ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ¿ì¸®´Â Å©°í º¹ÀâÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¶§ »ó´ëÀûÀ¸·Î °£´ÜÇϰí ÀÌÇØÇϱ⠽¬¿î ¿©·¯°³ÀÇ Á¶°¢À¸·Î Äڵ带 ¸¸µé ¼ö ÀÖ´Â ÀÕÁ¡À» ¾òÀ» ¼ö ÀÖ´Ù. ½ÇÁúÀûÀ¸·Î ¾ÆÁÖ °£´ÜÇÑ °æ¿ì¸¦ Á¦¿ÜÇϰí, ´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº ¿©·¯°³ÀÇ ÇÔ¼ö·Î ÀÌ·ç¾îÁø´Ù.

À§ÀÇ ¿¡Á¦¸¦ ÅëÇØ¼­ ¿ì¸®´Â ÇÔ¼ö¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ¾Ë°Ô µÇ¾ú´Ù. C¿¡¼­¿Í ¸¶Âù°¡Áö·Î ¾î¼Àºí¸®¾î¿¡¼­µµ ÇÔ¼ö´Â ¼±¾ð°ú Á¤ÀÇ ºÎ·Î ³ª´µ°Ô µÈ´Ù.

.type  factorial, @function
factorial:
			
ÇÔ¼ö´Â º¸Åë À§¿Í °°Àº ¹æ¹ýÀ¸·Î ¸¸µé ¼ö ÀÖ´Ù. .type´Â factorial ÇÔ¼ö¸¦ °¡¸®Å°±â À§ÇÑ ¸µÄ¿ÀÇ ¿ëµµ·Î »ç¿ëµÇ´Âµ¥, »ý·«ÇÒ ¼ö ÀÖ´Ù. ¿ì¸®°¡ ¸¸µç ÇÁ·Î±×·¥¿¡´Â .type¸¦ »ç¿ëÇϰí ÀÖ´Ù. facorial: Àº factorialÀÌ °¡¸®Å°´Â ½ÇÁ¦ ÇÔ¼öÄڵ尡 À̰÷¿¡ À§Ä¡ÇÑ´Ù´Â °ÍÀ» Á¤ÀÇ ÇÑ´Ù. ´ÙÀ½ ÁÙºÎÅÍ ¿ì¸®´Â factorialÀÇ ½ÇÁ¦ÀûÀÎ ÄÚµå ³»¿ëÀ» ±â¼úÇÏ¸é µÈ´Ù. ±â¼úµÈ factorial ÇÔ¼ö´Â call ¸í·ÉÀ» ÅëÇØ¼­ ½ÇÇà ½Ãų ¼ö ÀÖ´Ù.

factorialÇÔ¼öÀÇ Ã¹¶óÀο¡´Â ´ÙÀ½°ú °°Àº Äڵ尡 µé¾î°¡ ÀÖ´Ù.

pushl   %ebp
movl    %esp, %ebp
			
ÀÌ µÎÁÙÀº ÇÔ¼ö¿¡¼­ »ç¿ëÇÒ ½ºÅÿµ¿ªÀ» »ý¼ºÇÑ´Ù. ÀÌ µÎÁÙÀº ¸ðµç ÇÔ¼öÀÇ ½ÃÀۺκп¡ Æ÷ÇԵȴÙ.
movl    8(%ebp), %eax
			
º£À̽º Æ÷ÀÎÅÍ ¾îµå·¹½º¸¦ ÇÔ¼öÀÇ Ã¹¹øÂ° ÀÎÀÚ·Î À̵¿ÇÑ´ÙÀ½ À̰÷ÀÇ °ªÀ» %eax¿¡ º¸°¡ÇÑ´Ù. 4(%ebp)´Â ¸®ÅϾîµå·¹½º¸¦ °¡Áö°í ÀÖÀ¸¸ç, 8(%ebp)´Â ÇÔ¼öÀÇ Ã¹¹øÂ° ÀÎÀÚ¸¦ °¡¸®Å°°í ÀÖÀ½À» ±â¾ïÇϱ⠹ٶõ´Ù.

´ÙÀ½ ¶óÀο¡¼­ ÇÔ¼öÀÇ ÀÎÀÚ°¡ base case¿¡ µµ´ÞÇß´ÂÁö °Ë»çÇÑ´Ù. ¸¸¾à base case Áï 1À̶ó¸é ÆÑÅ丮¾ó ¿¬»êÀ» ³¡³»°í end_factorial·Î Á¡ÇÁ ÇÑ´Ù.

cmpl    %1,  %eax
je      end_factorial
			
¸¸¾à base case¿¡ µµ´ÞÇÏÁö ¾Ê¾Ò´Ù¸é, ¿ì¸®´Â factorial ÇÔ¼ö¸¦ ´Ù½Ã È£Ãâ ÇØ¾ß ÇÑ´Ù. È£ÃâÇÒ ¶§´Â ÀÎÀÚ°ª(%eax)¸¦ 1¸¸Å­ °¨¼Ò ½ÃÄÑ¾ß ÇÑ´Ù.
decl    %eax
			
decl´Â ¸Þ¸ð¸® ¿µ¿ªÀ̳ª ·¹Áö½ºÅÍÀÇ °ªÀ» 1°¨¼Ò½Ã۱â À§Çؼ­ »ç¿ëÇÑ´Ù. ÀÎÀÚ¸¦ 1 °¨¼ÒÇÑ ´ÙÀ½¿¡´Â À̰ªÀ» ½ºÅÿ¡ ¹Ð¾î ³Ö°í ´Ù½Ã factorialÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
pushl   %eax
call    factorial
			
ÀÌÁ¦ factorialÇÔ¼ö¸¦ Àç±ÍÈ£Ãâ Çß´Ù. ÀÏ´Ü ÇÔ¼ö¸¦ È£ÃâÇÏ°í ³ª¸é ¿ì¸®´Â %esp¿Í %ebp¸¦ Á¦¿ÜÇϰí´Â ´Ù¸¥ °ªµéÀ» ¾Ë ¼ö ¾ø°ÔµÈ´Ù. ±×·¡¼­ ¿ì¸®´Â ÁÖ¾îÁø ÀÎÀÚ °ªÀ» %ebx¿¡ º¹»çÇϵµ·Ï ÇÑ´Ù.
movl    8(%ebp),  %ebx
			
ÀÌÁ¦ ÀÎÀÚ¿Í ÆÑÅ丮¾ó ÇÔ¼ö¸¦ °öÇÏ¸é µÈ´Ù. ¾Õ¿¡¼­ ¿ì¸®´Â ÇÔ¼öÀÇ ¸®ÅϰªÀº %eax ¸¦ ÅëÇØ¼­ °¡Á®¿Ã ¼ö ÀÖ´Ù´Â °ÍÀ» ¹è¿ü¾ú´Ù. ±×·¯¹Ç·Î %ebx¿Í %eax¸¦ ¼­·Î °öÇÏ¸é µÈ´Ù.
imul    %ebx, %eax
			
°öÇÑ °ªÀº %eax¿¡ ÀúÀåµÈ´Ù. À̰ªÀº ÇÔ¼ö°¡ Á¾·áÇÒ ¶§ ±×´ë·Î ¸®ÅϵȴÙ. ¾Õ¼­ ¿ì¸®°¡ ÇÔ¼ö¸¦ ½ÃÀÛÇÒ ¶§ %ebp¸¦ ¹Ð¾î ³Ö°í, %esp¸¦ %ebp·Î º¹»çÇØ¼­ Áö±ÝÀÇ ½ºÅÃÆ÷ÀÎÅ͸¦ ¸¸µé¾ú´Ù. ±×·¸´Ù¸é ÇÔ¼ö°¡ Á¾·áÇÒ¶§ À̰ÍÀ» ¿ø·¡ »óÅ·Π¸¸µå´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ¿ì¸®´Â ¾Æ·¡¿Í °°Àº Äڵ带 ÀÌ¿ëÇØ¼­ ÇöÀç ½ºÅÃÇÁ·¹ÀÓÀ» µÇµ¹¸± ¼ö ÀÖ´Ù.
end_factorial:
movl   %ebp, %esp
popl   %ebp
			
ÀÌÁ¦ ret¸í·ÉÀ» ÀÌ¿ëÇØ¼­ ¸®ÅÏÇÏ¸é µÈ´Ù.
ret
			

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.