3Àå. ù¹øÂ° ÇÁ·Î±×·¥ ¸¸µé±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

ù¹øÂ° ÇÁ·Î±×·¥ ¸¸µé±â

3. ù¹øÂ° ÇÁ·Î±×·¥ ¸¸µé±â

À̹ø Àå¿¡¼­´Â ¸®´ª½º ¾î¼Àºí¸® ÇÁ·Î±×·¥À» ¸¸µå´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¼ °ÍÀÌ´Ù. ¿©±â¿¡ ´õºÒ¾î ¾î¼Àºí¸® ÇÁ·Î±×·¥ÀÇ ±¸Á¶¿Í ¾î¼Àºí¸® ÇÁ·Î±×·¡¹ÖÀ» ÀÛ¼ºÇϴµ¥ ÇÊ¿äÇÑ ¾î¼Àºí¸® ¸í·É¾îµé¿¡ ´ëÇØ¼­µµ ¾Ë¾Æº¼ °ÍÀÌ´Ù.

¿©·¯ºÐÀÌ ÁÖ·Î Áß/°í±Þ ¾ð¾î¸¸À» ´Ù·ç¾î ¿Ô´Ù¸é, ¾Æ¸¶µµ À̵é°ú´Â ÀüÇô´Ù¸¥ Àú¼öÁØÀÇ ¾î¼Àºí¸®¾î¿¡ ´çȲÇÒ °ÍÀÌ´Ù. ¾î¼Àºí¸®¾î¿¡ Àͼ÷ÇØÁö´Â ¹æ¹ýÀº ´Ù¸¥ ¾ð¾î¿¡ Àͼ÷ÇØÁö±â À§Çؼ­ »ç¿ëÇß´ø ¹æ¹ýµé°ú µ¿ÀÏÇÏ´Ù. Áï ²ÙÁØÈ÷ Äڵ带 Á¢ÇÏ°í ¸¹Àº ½Ã°£¿¡ °ÉÃļ­ ¿¬½ÀÇÏ°í »ý°¢Çϰí ÀÎÅͳÝȤÀº ¼­ÀûÀ» ÅëÇØ¼­ °ü·Ã Á¤º¸¸¦ ¼öÁýÇϰí ÀÚ½ÅÀÇ °ÍÀ¸·Î ¸¸µå´Â °ÍÀÌ´Ù. ¸¹Àº ½Ã°£ÀÌ ÇÊ¿äÇÏ¸ç ½ÃÇàÂø¿À ¿ª½Ã °Þ°Ô µÇ°ÚÁö¸¸ ÀÌ·¯ÇÑ ¸ðµç °ÍµéÀÌ ¾î¼Àºí¸®¾î¸¦ ¿©·¯ºÐÀÇ °ÍÀ¸·Î ¸¸µå´Âµ¥ ¹Ýµå½Ã ÇÊ¿äÇÑ µµ¿òÀÌ µÇ¾îÁÙ °ÍÀÌ´Ù.

3.1. Entering in the Program

°£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µå´Â °ÍºÎÅÍ ½ÃÀÛÇØ º¸µµ·Ï ÇÏÀÚ. óÀ½À¸·Î ¸¸µé ÇÁ·Î±×·¥Àº ¾Æ¹«·± ÇÏ´ÂÀÏÀÌ ¾ø´Â -½ÇÇà ÈÄ ¹Ù·Î Á¾·áÇØ ¹ö¸®´Â- ¾îÀÌ ¾ø´Â ÇÁ·Î±×·¥ÀÌÁö¸¸ ¾î¼Àºí¸®¾î¿Í ¸®´ª½º ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ±âº»ÀûÀÎ ¹æ¹ýÀ» º¸¿©ÁØ´Ù. ¿©·¯ºÐÀÌ ÁÁ¾ÆÇÏ´Â ¿¡µðÅÍ·Î ¾Æ·¡ÀÇ ¿¹Á¦¸¦ ÆíÁýÇÑ ´ÙÀ½ exit.s À̸§À» °¡Áö´Â ÆÄÀÏ·Î ÀúÀåÇϵµ·Ï ÇÑ´Ù. Áö±Ý ´çÀå ¾Æ·¡ÀÇ ¿¹Á¦ Äڵ尡 ÀÌÇØµÇÁö ¾Ê´Â´Ù°í ÇØ¼­ °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¿ì¼±Àº ¾Æ·¡ÀÇ Äڵ带 ¸¸µé°í ÄÄÆÄÀÏ ÇØ¼­ ½ÇÇà ½Ã۴µ¥¿¡¸¸ ½Å°æ¾²µµ·Ï ÇÑ´Ù. ½ÇÁ¦ Äڵ忡 ´ëÇÑ »ó¼¼ÇÑ ¼³¸íÀº 4절¿¡¼­ ´Ù·ê °ÍÀÌ´Ù.

# ½ÃÀÛ ÈÄ ¹Ù·Î Á¾·áÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À¸·Î Á¾·á ÇÒ¶§
# ÇÁ·Î±×·¥ÀÇ ¸®ÅϰªÀ» ¸®´ª½º Ä¿³Î¿¡ Àü´ÞÇÑ´Ù.
#

# ÀÔ·Â : ¾øÀ½
#

# Ãâ·Â : ÄÚµåÀÇ Á¾·á°ªÀ» ¸®ÅÏÇÑ´Ù.
# ÇÁ·Î±×·¥ÀÇ Á¾·á°ªÀº ½©¿¡¼­ ´ÙÀ½°ú °°ÀÌ È®ÀÎ °¡´ÉÇÏ´Ù.
# echo $?
#

# º¯¼ö :
# %eax´Â ½Ã½ºÅÛ È£Ãâ(system call)¹øÈ£¸¦ ÀúÀåÇÑ´Ù.
# %ebx´Â Á¾·á°ªÀ» ÀúÀåÇÑ´Ù.

.section .data
.section .text
.global _start

_start:
movl $1, %eax    # ¸®´ª½º Ä¿³Î¿¡ exit(2)½Ã½ºÅÛ ÄÝÀ» ¿äûÇÑ´Ù.
                 # exit(2)ÀÇ ½Ã½ºÅÛ ÄÝ ¹øÈ£´Â 1¹øÀÌ´Ù.

movl $0, %ebx    # ÇÁ·Î±×·¥ÀÌ Á¾·áÇϸ鼭 ¿î¿µÃ¼Á¦¿¡ ³Ñ°ÜÁÙ
                 # Á¾·á°ªÀÌ´Ù.
                 # ÇÁ·Î±×·¥ Á¾·áÈÄ ½©»ó¿¡¼­
                 # echo $? ·Î È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.
                 # °ªÀ» ¹Ù²Ù¾î °¡¸é¼­ Å×½ºÆ® ÇØº¸µµ·Ï ÇÏÀÚ.

int $0x80        # exit ½Ã½ºÅÛÄÝÀ» ½ÇÇàÇÑ´Ù.
			
À§¿Í °°Àº ¹®ÀåµéÀ» ¿ì¸®´Â ¼Ò½ºÄÚµå(source code)¶ó°í ºÎ¸£¸ç, ¼Ò½ºÄڵ尡 ÀúÀåµÈ ÆÄÀÏÀ» ¼Ò½ºÆÄÀÏ À̶ó°í ºÎ¸¥´Ù. ¼Ò½ºÄÚµå´Â Àΰ£ÀÌ ½±°Ô ÀÐÀ»¼ö ÀÖµµ·Ï ¸¸µé¾îÁø ÇÁ·Î±×·¥ÀÇ ¾ç½ÄÀÌ´Ù. ±×·¯³ª ¼Ò½ºÄÚµå´Â ÇÁ·Î±×·¥ÀÇ ¾ç½ÄÀÏ »Ó ±× ÀÚü·Î ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥Àº ¾Æ´Ï´Ù. Àΰ£ÀÌ ÀÌÇØÇϱâ´Â ½±Áö¸¸ ÄÄÇ»ÅÍ´Â Àΰ£ÀÇ ¹®ÀåÀ» ÀÌÇØÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù. ±×·¡¼­ ¼Ò½ºÄڵ带 ÄÄÇ»ÅͰ¡ ÀÌÇØÇØ¼­ ½ÇÇà °¡´ÉÇϵµ·Ï ±â°èÀÇ ¾ð¾î·Î ¹ø¿ª(transform)ÇÏ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷À» À§Çؼ­ assemble¿Í link°¡ »ç¿ëµÈ´Ù.

¸ÕÀú assemble¸¦ ÀÌ¿ëÇØ¼­ ¼Ò½ºÄڵ带 ±â°è¸¦ À§ÇÑ ¸í·ÉÀ¸·Î º¯°æÇØ¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ º¯°æ(ȤÀº ¹ø¿ª) °úÁ¤À» Assembling¶ó°í ÇÑ´Ù. ÀÌ·¯ÇÑ ¾î¼Àºí¸µÀ» À§Çؼ­ as°¡ Á¦°øµÈ´Ù.

# as exit.s -o exit.o
			
as´Â ¼Ò½ºÆÄÀÏÀÎ exit.s¸¦ ¹ø¿ªÇؼ­ ±× °á°ú¸¦ exit.o¶ó´ÂÆÄÀÏ¿¡ ¾´´Ù. exit.o¿Í °°Àº ¹ø¿ªµÈ °á°ú¸¦ ´ã°í ÀÖ´Â ÆÄÀÏÀ» object file¶ó°í ºÎ¸¥´Ù. ¿ÀºêÁ§Æ® ÄÚµå´Â ±â°è¾î·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ¿ÀºêÁ§Æ® Äڵ尡 ±â°è¾î·Î ÀÌ·ç¾îÁ® ÀÖÀ¸´Ï ÀÌ ÀÚü·Î ¿ÏÀüÇÑ ÇÁ·Î±×·¥À̶ó°í »ý°¢ÇÒ ¼ö ÀÖ°ÚÁö¸¸ ±×·¸Áö´Â ¾Ê´Ù. ´ëºÎºÐÀÇ ±Ô¸ð°¡ ÀÖ´Â ÇÁ·Î±×·¥µéÀº ¿©·¯°³ÀÇ ¼Ò½ºÆÄÀÏ·Î ÀÌ·ç¾î Áö°í ÀÌµé ¼Ò½ºÆÄÀϵéÀº °¢°¢ º°°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» ¸¸µé¾î ³½´Ù. ±×·¯¹Ç·Î ÀÌ·¯ÇÑ ¿©·¯°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» ÇÕÃļ­ ÇϳªÀÇ ½ÇÇàÆÄÀÏ·Î ¸¸µé¾î¾ß ÇÏ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. linker¶ó´Â ÇÁ·Î±×·¥À» ÀÌ¿ëÇÏ¸é ¿©·¯°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Çϳª·Î ÇÕÃļ­ Ä¿³Î¿¡¼­ ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. ¸®´ª½º´Â ld¶ó´Â linkerÇÁ·Î±×·¥À» Á¦°øÇÑ´Ù. ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸µÅ© ½ÃÄѼ­ ¿ÏÀüÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.
# ld exit.o -o exit
			
À§ÀÇ ¸í·ÉÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀº exit.o¸¦ ¸µÅ©½ÃÄѼ­ ½ÇÇàÆÄÀÏÀÎ exit¸¦ ¸¸µé¾î ³½´Ù. ¸¸¾à À§ÀÇ ¸µÅ© °úÁ¤Áß ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é ÇÁ·Î±×·¥ÀÇ ¼Ò½ºÄڵ带 À߸ø ÀÛ¼ºÇßÀ» °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ÀÌ·± °æ¿ì ¿©·¯ºÐÀº ¼Ò½ºÄڵ带 ÁÖÀÇ ±í°Ô »ìÆì¼­ ¹®Á¦°¡ µÈ ºÎºÐÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ¼Ò½ºÄڵ忡 ´ëÇÑ ¼öÁ¤ÀÌ ÀÌ·ç¾î Á³´Ù¸é ´Ù½Ã assemble °ú link°úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù. ¾Æ¹«·± ¹®Á¦°¡ ¾øÀÌ ¸µÅ©±îÁö ¼º°øÇß´Ù¸é ´ÙÀ½°ú °°ÀÌ exit [1] ÇÁ·Î±×·¥À» ½ÇÇà ½Ãų ¼ö ÀÖ´Ù.
# ./exit
			
./´Â ÄÄÇ»ÅÍ¿¡°Ô ½ÇÇà½ÃÄÑ¾ß ÇÏ´Â ÇÁ·Î±×·¥ÀÌ ÀϹÝÀûÀÎ ÇÁ·Î±×·¥ ½ÇÇà °æ·Î(PATH)°¡ ¾Æ´Ñ ÇöÀç µð·ºÅ丮¿¡ ÀÖÀ½À» ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëÇÑ´Ù. À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà ½ÃÄѺ¸¸é ¾Æ¹«·± º¯È­µµ ¾øÀÌ ´ÙÀ½ ÇÁ·ÒÇÁÆ®°¡ ¶³¾îÁö´Â °É È®ÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº ÇÏ´ÂÀÏÀÌ ¾Æ¹« °Íµµ ¾ø´Â °Í °°Áö¸¸ ³»ºÎÀûÀ¸·Î Á¾·áÇϸ鼭 Á¾·á°ªÀ» Ä¿³Î¿¡ µÇµ¹·Á Áִµ¥, ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î exit ÇÁ·Î±×·¥ÀÇ Á¾·á°ªÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
# echo $?
			
¾Æ¸¶µµ 0ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù. À̰ÍÀº ¿ì¸®°¡ ¸¸µç exitÇÁ·Î±×·¥ »Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ¸ðµç ÇÁ·Î±×·¥¿¡ °øÅëÀûÀ¸·Î Àû¿ëµÈ´Ù. ¸ðµç ÇÁ·Î±×·¥Àº Á¤»óÀûÀ¸·Î ÁÖ¾îÁø ÀÏÀ» ÇØ°áÇϰí Á¾·á ÇßÀ» ¶§´Â 0À» ¸®ÅÏÇÏ°í ½ÇÆÐÇßÀ» °æ¿ì 0ÀÌ¿ÜÀÇ ´Ù¸¥ ¼ýÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥ Á¾·á°ªÀ» ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¡¸Ó´Â ½ÇÇà½ÃÄ×´ø ÇÁ·Î±×·¥ÀÌ ÀÏÀ» Á¦´ë·Î ¼öÇàÇß´ÂÁö ¾Æ´Ï¸é ¾î¶² ¿À·ù°¡ ¹ß»ýÇß´Â Áö¸¦ È®ÀÎÇÒ ¼ö ÀְԵȴÙ. 0Àº Á¤»óÁ¾·á, 1Àº ÆÄÀÏ¿­±â ½ÇÆÐ, 2´Â À߸øµÈ °è»ê µîÀ¸·Î Á¤ÀÇÇØ¼­ °¢ »óȲ¿¡ ¸Â°Ô Á¾·á°ªÀ» ³Ñ±â°í Á¾·áÇÏ¸é µÈ´Ù.

3.2. ¾î¼Àºí¸® ÇÁ·Î±×·¥ÀÇ °³¿ä

exit.s¸¦ º¸¸é ¸¹Àº ÁÙÀÌ #ó¸® µÇ¾î ÀÖ´Â°É º¼ ¼ö ÀÖ´Ù. À̰ÍÀº ÁÖ¼®À̶ó°í ºÒ¸®¿î´Ù. ÁÖ¼®Àº ¾î¼Àºí·¯¿¡ ÀÇÇØ¼­ ÇØ¼® µÇÁö ¾Ê´Â ºÎºÐÀ¸·Î ÁÖ·Î ÇÁ·Î±×·¡¸Ó¿¡°Ô ÇÁ·Î±×·¥ Äڵ忡 ´ëÇÑ ¼³¸í, ÈùÆ®µîÀ» ¸í½ÃÇØ¼­ ÇÁ·Î±×·¡¸Ó°¡ Á»´õ ½±°Ô Äڵ带 ÆÄ¾ÇÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ »ç¿ëµÈ´Ù. Àß ÀÛ¼ºµÈ ÁÖ¼®Àº ÇÁ·Î±×·¥À» ¸¸µé¾î³½ ´ç»çÀÚ »Ó¸¸ ¾Æ´Ï¶ó ÇÁ·Î±×·¥À» Àоî¾ß ÇÏ´Â ´Ù¸¥ (ÆÀµ¿·áµî°ú °°Àº)ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸¹Àº µµ¿òÀ» ÁØ´Ù. Àß ÀÛ¼ºµÈ ÁÖ¼®Àº ´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀ» °¡Áø´Ù.

  • Äڵ尡 ÇÏ´ÂÀÏ

  • ÄÚµåÀÇ ´ë·«ÀûÀÎ È帧

  • ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÒ¸¸ÇÑ ¿©·¯°¡Áö ƯÀÌ»çÇ×µé [2]

¸î °³ÀÇ ÁÖ¼®ÈÄ¿¡ ´ÙÀ½°ú °°Àº ÁÙÀÌ µîÀåÇÑ´Ù.

.section .data
			

.section .text
			
ÅØ½ºÆ® ¼½¼ÇÀÌ ½ÃÀÛÇÔÀ» ¾Ë¸°´Ù. ÅØ½ºÆ® ¼½¼Ç¿¡´Â ÇÁ·Î±×·¥ ¸í·É (¾î¼Àºí¸® Äڵ尡 À§Ä¡ÇÑ´Ù)

.globl _start
			

_start:

ÀÌÁ¦ ½ÇÁ¦ÀûÀΠĿǻÅÍ ¸í·ÉÀÌ µîÀåÇÑ´Ù. óÀ½ µîÀåÇÑ ¸í·ÉÀº ´ÙÀ½°ú °°´Ù.

movl $1, %eax
			
ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¾úÀ» ¶§ À̸í·ÉÀº ¼ýÀÚ1À» %eax ·¹Áö½ºÅÍ¿¡ ³Ö¾î¶ó°í ÇØ¼®ÇÑ´Ù. ¾î¼Àºí¸®¾î¿¡ »ç¿ëµÇ´Â ¸¹Àº ¸í·ÉÀº ¿ÀÆÛ·£µå(operands)¸¦ °¡Áø´Ù. À§ÀÇ movl¸í·ÉÀº source¿Í destination µÎ°³ÀÇ ¿ÀÆÛ·£µå¸¦ °¡Áø´Ù. ÀÌ °æ¿ì source´Â ¼ýÀÚ 1ÀÌ µÇ°í destinationÀº %eax·¹Áö½ºÅͰ¡ µÈ´Ù. ¿ÀÆÛ·£µå´Â ¼ýÀÚ, ÂüÁ¶ ¸Þ¸ð¸® À§Ä¡ ȤÀº ·¹Áö½ºÅͰ¡ ¿Ã ¼ö ÀÖ´Ù. ¸í·ÉÀº ±× Á¾·ù¿¡ µû¶ó¼­ °¢°¢ ´Ù¸¥ Çü½ÄÀÇ ¿ÀÆÛ·£µå¸¦ °¡Áö°Ô µÈ´Ù. °¢ ¸í·ÉÀÌ °¡Áú ¼ö ÀÖ´Â ¿ÀÆÛ·£µåÀÇ Á¤º¸´Â Appendix B¸¦ Âü°íÇϱ⠹ٶõ´Ù.

¸í·É¿¡ µû¶ó¼­ ¿ÀÆÛ·£µåÀÇ Çü½ÄÀÌ ´Þ¶óÁö±ä ÇÏÁö¸¸, ´ëºÎºÐÀÇ ¸í·ÉÀº 2°³ÀÇ ¿ÀÆÛ·£µå¸¦ °¡Áø´Ù. ù¹øÂ°·Î µîÀåÇÏ´Â ¿ÀÆÛ·£µå¸¦ source ¿ÀÆÛ·£µå, µÎ¹øÂ°·Î µîÀåÇÏ´Â ¿ÀÆÛ·£µå¸¦ destination ¿ÀÆÛ·£µå ¶ó°í ÇÑ´Ù. ÀÌ·±·ùÀÇ ¸í·ÉÀ¸·Î´Â addl, subl, imulµîÀÌ ÀÖ´Ù. ÀÌµé ¸í·ÉÀº °¢°¢ "´õÇϱâ","»©±â","°öÇϱâ" ¿¬»êÀ» Çϸç source ¿ÀÆÛ·£µå·Î ºÎÅÍ destination ¿ÀÆÛ·£µå·Î ¿¬»êÀ» ÇÏ°í °á°ú´Â destination ¿ÀÆÛ·£µå¿¡ ÀúÀåµÈ´Ù.

x86ÇÁ·Î¼¼½º´Â movl¸í·É¿¡ ÀÌ¿ëÇÒ¼ö ÀÖ´Â ¿©·¯°³ÀÇ general-purpose ·¹Áö½ÃÆ®·² °¡ÁöÀÖ´Ù.

  • %eax

  • %ebx

  • %ecx

  • %edi

  • %esi

À̵é gerneal-purpose ·¹Áö½ºÅÍ¿Í ÇÔ²² ¸î°³ÀÇ special-purpose ·¹Áö½ºÅ͵µ °¡Áö°í ÀÖ´Ù.

  • %ebp

  • %esp

  • %eip

ÀÌµé ·¹Áö½ºÅÍÁß¿¡´Â %eip¿Í %eflags¿Í °°Àº Ưº°ÇÑ ¸í·É¿¡¸¸ Á¢±Ù°¡´ÉÇÑ ·¹Áö½ºÅ͵éÀÌ ÀÖ´Ù. ¿ì¼±Àº ÀÌÁ¤µµ¸¸ ¼³¸íÇϵµ·Ï ÇϰڴÙ. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº ³ªÁß¿¡ ¼³¸íÇÒ ±âȸ°¡ ÀÖÀ» °ÅÀÌ´Ù.

ÀÌÁ¦ movl¸í·ÉÀº ¼ýÀÚ 1À» %eax·¹Áö½ºÅÍ·Î ¿Å±â´Â ÀÛ¾÷À» ¼öÇàÇÔÀ» ÀÌÇØÇßÀ» °ÍÀÌ´Ù. 1¾Õ¿¡ º¸¸é ´Þ·¯Ç¥½Ã°¡ Àִµ¥, ÀÌ´Â immediate mode addressingÀ» ÀÌ¿ëÇÒ °ÍÀ» ¸í½ÃÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ´Þ·¯Ç¥½Ã°¡ ¾ø´Ù¸é direct addressingÀ» ÀÌ¿ëÇÏ°Ô µÇ°í ÁÖ¼Ò 1¿¡ ÀÖ´Â ¾î¶² °ªÀ» ÀÐ¾î µéÀÌ°Ô µÈ´Ù. ¿ì¸®´Â ½ÇÁ¦ ¼ýÀÚ 1À» ÀоîµéÀ̱⸦ ¿øÇϹǷΠimmeiate mode¸¦ »ç¿ëÇß´Ù.

¿ì¸®°¡ ¼ýÀÚ 1À» %eax¿¡ ¿Å±ä ÀÌÀ¯´Â ƯÁ¤ÀÛ¾÷À» À§Çؼ­ Linux Ä¿³ÎÀ» Áغñ½Ã۱â À§ÇÔÀÌ´Ù. ¼ýÀÚ 1Àº ½Ã½ºÅÛ ÄÝ(system call) ¹øÈ£ 1¹øÀÎ exit¸¦ °¡¸®Å²´Ù. ½Ã½ºÅÛÄÝÀº ¿î¿µÃ¼Á¦¿¡ ¾î¶² µµ¿òÀ» ¿äûÇϱâ À§Çؼ­ »ç¿ëµÇ´Â °ÍÀÌ´Ù. ½Ã½ºÅÛÄÝ¿¡ ´ëÇØ¼­´Â Á¶¸¸°£ ÀÚ¼¼È÷ ´Ù·ç°Ô µÉ °ÍÀÌ´Ù. ÆÄÀÏÀ» ¿­°Å³ª ¸Þ¸ð¸® ÇÒ´çÀ» ¿äûÇϰųª Çϱâ À§Çؼ­´Â ÇØ´ç ½Ã½ºÅÛ ÄÝ¿¡ ¸ÅÇεǴ ¹øÈ£¸¦ %eax¿¡ ½áÁÖ¸é µÈ´Ù. ÀÌµé ½Ã½ºÅÛ ÄÝ ¹øÈ£´Â ¿î¿µÃ¼Á¦¸¶´Ù ¾à°£¾¿ ´Ù¸£´Ù.

¿î¿µÃ¼Á¦¿¡ ¾î¶² ÀÏÀ» ¿äûÇϱâ À§Çؼ­ ½Ã½ºÅÛ ÄÝÀ» »ç¿ëÇÑ´Ù°í Çߴµ¥, ½Ã½ºÅÛÄÝ ¹øÈ£ ¸¸À¸·Î ÇÒ ¼ö ÀÖ´Â ÀÏÀº Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¾î¶² ¿äûÀ» ¼öÇàÇϵµ·Ï Çϱâ À§Çؼ­´Â Ä¿³Î¿¡ Á»´õ ¸¹Àº Á¤º¸¸¦ ¾Ë·ÁÁà¾ß ÇÑ´Ù. ÆÄÀÏÀ» ¿©´Â °ÍÀ» ¿¹·Î µé¾îº¸¸é "ÆÄÀÏÀ» ¿­¾î¶ó"¶ó´Â ¿äû ¿Ü¿¡µµ ÆÄÀÏÀ̸§ÀÌ ¹«¾ðÁö, ¾î¶² »óÅ·Π¿­°ÇÁö µîÀ» Ä¿³Î¿¡°Ô ¾Ë·ÁÁÖ¾î¾ß¸¸ ÇÑ´Ù. ÀÌ·¯ÇÑ ºÎ°¡ÀûÀÎ Á¤º¸¸¦ parameters(ÀÎÀÚ)¶ó°í ºÎ¸£¸ç ÀÌµé °ª ¿ª½Ã ·¹Áö½ºÅ͸¦ ÅëÇØ¼­ Ä¿³Î¿¡ Àü´ÞµÈ´Ù. exit ½Ã½ºÅÛÄÝÀÇ °æ¿ì ÄÁ³ÎÀº ÀÎÀÚ·Î Á¾·á°ªÀ» ¿ä±¸ÇÑ´Ù. ÀÌ °ªÀº %ebx¿¡¼­ ÀÐÇô Áø´Ù. ÀÌ Á¾·á °ªÀº ½Ã½ºÅÛ¿¡ ¸®ÅϵǾîÁú °ÍÀÌ°í ¿©·¯ºÐÀº echo $?¸¦ ÅëÇØ¼­ ¸®ÅϰªÀ» ÀÐÀ» ¼ö ÀÖ°Ô µÈ´Ù. %ebx¿¡ 0À» ¿Ã¸®±â À§Çؼ­´Â ´ÙÀ½°ú °°Àº Äڵ尡 ÇÊ¿äÇÏ´Ù.

movl %0, %ebx
			
¸®´ª½º´Â ½Ã½ºÅÛÄÝÀ» ¸¸µé±â Àü¿¡ ÀÎÀÚÀÇ °ªÀ» Àбâ À§Çؼ­ ·¹Áö½ºÅÍÀÇ °ªÀ» ¿ä±¸ÇÑ´Ù. %eax´Â ¾ðÁ¦³ª ½Ã½ºÅÛÄÝ ¹øÈ£¸¦ ¿Ã¸®±â À§Çؼ­ »ç¿ëµÇ¸ç ÀÎÀÚ¸¦ ¿Ã¸®±â À§Çؼ­ ´Ù¸¥ ·¹Áö½ºÅ͵éÀ» »ç¿ëÇÏ°Ô µÈ´Ù. exit ½Ã½ºÅÛÄÝ¿¡¼­ º¸¸é Á¾·á »óŸ¦ ÀúÀåÇϱâ À§Çؼ­ %ebx¸¦ ÇÊ¿ä·Î ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. °¢°¢ÀÇ ½Ã½ºÅÛÄÝÀÌ ÇÊ¿ä·Î ÇÏ´Â ÀÎÀÚÀÇ °¹¼ö°¡ ¼­·Î ´Ù¸£´Ù. À̵鿡 ´ëÇÑ Á¤º¸´Â Appendix C¸¦ Âü°íÇϱ⠹ٶõ´Ù.

´ÙÀ½À¸·Î ¾Æ·¡¿Í °°Àº »ó´çÈ÷ ¼ö»óÇÑ ¸í·ÉÀÌ ³»·ÁÁø´Ù.

int $0x80
			
int ´Â C¿¡¼­ Á¤¼öÇüÀ» ³ªÅ¸³»´Â int°¡ ¾Æ´Ï´Ù. interruptÀÇ ÁÙÀÓ¸»ÀÌ´Ï È¥µ¿ÇÏÁö ¾Êµµ·Ï ÇÏÀÚ. 0x80Àº »ç¿ëÇÒ ÀÎÅÍ·´Æ®ÀÇ ¹øÈ£´Ù. ÇÁ·Î±×·¥ÀÇ ¼öÇàÁß interrupt°¡ °É¸®°Ô µÇ¸é ÇÁ·Î±×·¥ÀÇ Á¦¾î°¡ Ä¿³Î·Î ³Ñ¾î°¡°Ô µÇ°í Ä¿³ÎÀº ÇÁ·Î±×·¥ÀÌ ¿äûÇÑ ½Ã½ºÅÛÄÝÀ» ¼öÇàÇÏ°Ô µÈ´Ù. À̰ÍÀº ¹èÆ®¸Ç¿¡°Ô ±¸Á¶¿äûÀ» Çϱâ À§Çؼ­ ½ÅÈ£¸¦ º¸³»´Â °úÁ¤°ú °°´Ù. ¿©·¯ºÐÀº Çʿ信 ÀÇÇØ¼­ ¹èÆ®¸Ç¿¡°Ô ½ÅÈ£¸¦ º¸³»°í ¹èÆ®¸ÇÀº ¿©·¯ºÐÀ» ±¸Á¶ÇÏ·¯ ¿Â´Ù. ±¸Á¶°¡ µÈÈÄ¿¡´Â ? ¹°·Ð ÀÏ»ó»ýȰ·Î µÇµ¹¾Æ °¡°Ô µÉ°ÍÀÌ´Ù. ¸¶Âù°¡Áö·Î Ä¿³ÎÀÌ ÇÊ¿äÇÑ ÀÏÀ» ¸¶Ä¡°Ô µÇ¸é Á¦¾î±ÇÀº ÇÁ·Î±×·¥À¸·Î ´Ù½Ã ³Ñ¾î °¡°Ô µÈ´Ù. ¸¸¾à interrupt ½ÅÈ£¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ¾î¶°ÇÑ ½Ã½ºÅÛ Äݵµ ¼öÇàµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

ÀÌÁ¦ ³²Àº ÀÏÀº Äڵ带 assemble½Ã۰í, ¸µÅ© ½ÃŰ°í ½ÇÇàÇÏ´Â ÀÏÀÌ´Ù. Å×½ºÆ®¸¦ À§Çؼ­ ¾î¼Àºí¸® ÄÚµåÀÇ %ebx¸¦ ´Ù¸¥ °ªÀ¸·Î ¹Ù²ÛÈÄ echo $?ÀÇ Ãâ·Â°ªÀÌ º¯ÇÏ´Â°É È®ÀÎÇØ º¸±â ¹Ù¶õ´Ù. ´ç¿¬ÇÏÁö¸¸ %ebx°ªÀ» º¯°æÇÑ´ÙÀ½¿¡´Â assemble->¸µÅ©->½ÇÇà °úÁ¤À» °ÅÃÄ¾ß º¯°æµÈ ³»¿ëÀÌ Àû¿ëµÈ´Ù.

3.3. Planning the Program

À̹ø ÇÁ·Î±×·¥Àº Á»´õ º¹ÀâÇÑ ÀÏÀ» ÇϰԵȴÙ. ¿©·¯°³ÀÇ ¼ýÀÚ°¡ ÁÖ¾îÁö°í ÀÌÁß °¡Àå Å« ¼ýÀÚ¸¦ ã´Â ÀÏÀ» ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÄÄÇ»ÅÍ´Â ÇÁ·Î±×·¡¸Ó°¡ ÇÊ¿äÇÑ ¸ðµç°ÍÀ» ¼¼¹ÐÇÏ°Ô ÁöÁ¤ÇØÁà¾ß ÇÏ´Â ±â°è´Ù. ±×·¯¹Ç·Î ¿øÇϴµ¥·Î ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱ⠿øÇÏ´Ù¸é ÀÛ¼ºÀü¿¡ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸í¼¼¼­¸¦ ¸¸µé¾î ÁÖ¾î¾ß ÇÑ´Ù. ¿ì¸®°¡ ¸¸µé°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ¸í¼¼¿¡ ´ëÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÒ °ÍÀÌ´Ù.

  1. ¼ýÀÚÀÇ ¸ñ·ÏÀ» ¾îµð¿¡ ÀúÀåÇÒ °ÍÀΰ¡.

  2. °¡Àå Å« ¼ýÀÚ¸¦ ã±â À§Çؼ­ ¾î¶°ÇÑ ÇÁ·Î½ÃÁ®¸¦ ÇÊ¿ä·Î Çϴ°¡.

  3. ÇÁ·Î½ÃÁ®¸¦ ¼öÇàÇϱâ À§Çؼ­ ¾î´ÀÁ¤µµÀÇ °ø°£À» ÇÊ¿ä·Î Çϴ°¡

  4. °ø°£Àº ·¹Áö½ºÅÍ¿¡¼­ È®º¸ÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÒ °ÍÀΰ¡.

¿©·¯ºÐÀº ¸î°³ÀÇ ¼ýÀÚ Áß¿¡¼­ °¡Àå Å« ¼ýÀÚ¸¦ ã´Â ÀÏÀ» Çϱâ À§Çؼ­ ¾î¶² °èȹÀ» ¼¼¿î´Ù°Å³ª ÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ·± ÀÏÀº ±×³É ´ÚÄ¡¸é Çѹø¿¡ ¾²À¹ º¸°í °¡Àå Å« ¼ýÀÚ¸¦ °ñ¶ó ³¾ °ÍÀÌ´Ù. ¹°·Ð ¼ýÀÚÀÇ ¸ñ·ÏÀÌ ¸¹´Ù¸é ¾à°£ÀÇ °èȹÀ» ¼¼¿ö¾ß ÇϰÚÁö¸¸ Å« ¹®Á¦°¡ µÇÁö´Â ¾ÊÀ» °ÍÀÌ´Ù - ½Ã°£ÀÌ Á» °É¸®±ä ÇϰÚÁö¸¸ -. ¿ì¸®ÀÇ µÎ³ú°¡ °æÇè°ú ÇнÀ¿¡ ÀÇÇØ¼­ °ÅÀÇ ¹Ý»çÀûÀ¸·Î ±×·¯ÇÑ ÀÏÀ» ó¸®Çϱ⠶§¹®ÀÌ´Ù. ¿©·¯°³ÀÇ ¼ýÀÚ ¸ñ·ÏÁß¿¡ °¡Àå Å« ¼ýÀÚ¸¦ ã¾Æ¾ß ÇÑ´Ù¸é, ºÐ¸í ¿©·¯ºÐÀº ¾Õ¿¡¼­ ¼ýÀÚ¸¦ ÀÐ¾î °¡¸é¼­ ¾ÕÀÇ ¼ýÀÚ º¸´Ù ´õ Å©´Ù¸é ±×°ÍÀ» ¸Ó¸®¿¡ »õ°Ü µÎ°í, ¸Ó¸®¿¡ »õ°ÜµÐ ¼ýÀÚ º¸´Ù ´õ Å« ¼ýÀÚ°¡ ³ª¿Â´Ù¸é ¼ýÀÚ¸¦ ¹Ù²ãÄ¡±â ÇÒ °ÍÀÌ´Ù. °á±¹ ¸¶Áö¸· ¼ýÀÚ±îÁö ¸ðµÎ È®ÀÎÇÑ´Ù¸é ¸Ó¸®¿¡ ³²¾Æ ÀÖ´Â ¼ö°¡ °¡Àå Å« ¼ö°¡ µÈ´Ù. ÀÌ·¯ÇÑ °úÁ¤Àº °ÅÀÇ ÀÚµ¿À¸·Î ÀÌ·ç¾îÁø´Ù.

ÄÄÇ»ÅÍÀÇ °æ¿ì ÀÌ·¯ÇÑ °úÁ¤À» ´Ü°èº°·Î ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ´Ü°è¸¦ ¸íÈ®È÷ Á¤ÀÇ Çϱâ À§Çؼ­ ¾à°£ÀÇ °èȹÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ¿ì¼± °¡Àå Å« ¼ýÀÚ¸¦ °í¸£±â À§Çؼ­ »ç¿ëµÉ ¼ýÀÚÀÇ ¸ñ·ÏÀÌ ÀÖÀ» °ÍÀ̸ç ÀÌµé ¼ýÀÚÀÇ ¸ñ·ÏÀº ¸Þ¸ð¸® °ø°£¿¡ ÀúÀåµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. À̵éÀº data_items°¡ °¡¸®Å°´Â ¸Þ¸ð¸®¿¡ ÀúÀåÇϵµ·Ï °èȹÇϰڴÙ. ¿ì¸®´Â ¶ÇÇÑ ¼ýÀÚ¸ñ·Ï¿¡¼­ ÇöÀç À§Ä¡¸¦ ÀÐ¾î ¿Ã ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¾ß °ËÅäÇØ¾ßÇÒ ¼ýÀÚ¸¦ ÀÐ¾î ¿Ã ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×¸®°í °¡ÀåÅ« ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£µµ ¸¶·ÃµÇ¾î¾ß ÇÑ´Ù. ÀÌµé ¼ýÀÚ Á¤º¸¸¦ ÀúÀåÇϱâ À§Çؼ­ ´ÙÀ½°ú °°Àº ·¹Áö½ºÅ͸¦ »ç¿ëÇϵµ·Ï °èȹÇß´Ù.

  • %edi ´Â ¸ñ·Ï¿¡¼­ ÇöÀçÀÇ À§Ä¡¸¦ ÀúÀåÇÑ´Ù.

  • %ebx ´Â ÇöÀç ¸ñ·Ï¿¡¼­ °¡Àå Å« ¼ýÀÚ¸¦ ÀúÀåÇÑ´Ù.

  • %eax ´Â °ËÅäÇÒ ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.

ÇÑ °¡Áö ¿¹¿ÜÀûÀ¸·Î ó¸®ÇؾßÇÒ ¼ýÀÚ°¡ Àִµ¥, ¹Ù·Î ¸ñ·ÏÀÇ °¡Àå óÀ½ °¡Á®¿Â ¼ýÀÚÀÌ´Ù. ÀÌ ¼ýÀÚ´Â ´Ù¸¥ ¾î¶² ¼ýÀڿ͵µ ºñ±³ÇÒ ¼ö ¾øÀ¸¹Ç·Î ÀÚµ¿ÀûÀ¸·Î °¡Àå Å« ¼ýÀÚ°¡ µÇ¾î¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¼Õ½¬¿î ¼öÇàÀ» À§Çؼ­ ÇöÀç À§Ä¡°¡ °¡¸®Å°´Â ¼ýÀÚ¸¦ 0À¸·Î ÇÏ¸é µÈ´Ù. ±×·¯¸é ¸ñ·ÏÀÇ Ã³À½ ¼ýÀÚ´Â 0°ú ºñ±³µÇ°í ÇöÀç ½ÃÁ¡¿¡¼­ °¡Àå Å« ¼ýÀÚ·Î %ebx¿¡ ÀúÀåµÉ °ÍÀÌ´Ù. ±× ´ÙÀ½¿¡´Â ¸ñ·ÏÀÇ ´ÙÀ½ ¼ýÀÚ¿Í ¹è±³ÇÏ¸é µÈ´Ù. ÀÌ·¯ÇÑ °úÁ¤À» ¼ø¼­´ë·Î ±â¼úÇØ º¸µµ·Ï ÇÏÀÚ.

  1. ¸ñ·ÏÀÇ Ã³À½ ¼ýÀÚ°¡ 0ÀÎÁö È®ÀÎÇÑ´Ù.

  2. ¸¸¾à 0À̶ó¸é Á¾·á(exit)ÇÑ´Ù.

  3. ÇöÀç À§Ä¡¸¦ 1Áõ°¡ ½ÃŲ´Ù(%edi)

  4. ´ÙÀ½ °ªÀ» ÀÐ¾î ¿Í¼­ %eax ·¹Áö½ºÅÍ¿¡ °ªÀ» ÀúÀåÇÑ´Ù.

  5. ÇöÀç °ª %eax¿Í °¡Àå Å« °ª %ebx¸¦ ºñ±³ÇÑ´Ù.

  6. ¸¸¾à ÇöÀç °ªÀÌ ÃÖ±ÙÀÇ °¡Àå Å« °ª º¸´Ù Å©´Ù¸é ÇöÀç °ªÀ» %ebx¿¡ ÀúÀåÇÑ´Ù.

  7. ¹Ýº¹ÇÑ´Ù.

À̰ÍÀ» ÇÁ·Î½ÃÁ®(procedure, ÀÇ»çÁøÇà)À̶ó°í ÇÑ´Ù. ÇÁ·Î½ÃÁ®¸¦ ÀÛ¼ºÇÏ´Ù º¸¸é ¸Å¿ì ÀÚÁÖ ¸¸¾à(if)¶ó´Â ´Ü¾î°¡ µîÀåÇÔÀ» º¼ ¼ö ÀÖ´Ù. À̰ÍÀº ÁøÇà(È帧)À» ºÐ±â ½Ã۱â À§Çؼ­ »ç¿ëÇÑ´Ù. if ´ÙÀ½¿¡ ÁÖ¾îÁø Á¶°ÇÀ» ¸¸Á·ÇÏ´À³Ä ±×·¸Áö ¾Ê´À³Ä¿¡ µû¶ó¼­ ¼öÇàÇÏ´Â ¸í·ÉÀÌ ´Þ¶óÁö°Ô µÈ´Ù. 2 ¹øÀ» º¸¸é %eaxÀÇ °ªÀÌ 0ÀÎÁö ¾Æ´ÑÁö¿¡ µû¶ó È帧À» ºÐ±â ½Ã۰í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. %eax°¡ 0À̶ó´Â °ÍÀº ¿ì¸®°¡ óÀ½ ¼³Á¤Çß´ø µ¥·Î ¸ñ·ÏÀ» ³¡À» ³ªÅ¸³»´Â °ÍÀ̹ǷΠ´õÀÌ»ó È帧À» ÁøÇà ½Ãų Çʿ䰡 ¾ø±â ¶§¹®ÀÌ´Ù. 0ÀÌ ¾Æ´Ï¶ó¸é ¸ñ·ÏÀÇ ´ÙÀ½ °ªÀ» °¡¸®Å°µµ·Ï Çϰí 4, 5, 6À» ÁøÇàÇϸ鼭 ÀÌÀüÀÇ °¡Àå Å«°ª°ú ºñ±³Çؼ­ ´õ Å« °ªÀ» %ebx¿¡ ÀúÀåÇÑ´Ù. ±×¸®°í ÇÁ·Î±×·¥Àº ¾ÆÁ÷ ¸ñ·ÏÀÇ ¸¶Áö¸·±îÁö ¼ýÀÚµéÀ» Á¶»çÇÏÁö ¾Ê¾Ò À¸¹Ç·Î ´Ù½Ã 2 ¹øÀ¸·Î °¡¼­ Áö±Ý±îÁöÀÇ ºñ±³ÀÛ¾÷À» ¹Ýº¹ÇÑ´Ù.

if ÀÇ È帧À» ºÐ±âÇѴٴ Ư¼º ¶§¹®¿¡ È帧Á¦¾î(flow control)¸í·ÉÀ̶ó°í ºÎ¸¥´Ù. ÀÌÀü¿¡ ´Ù·ç¾ú´ø ù¹øÂ° ¾î¼Àºí¸® ÇÁ·Î±×·¥Àº ¾î¶°ÇÑ È帧Á¦¾î ¸í·Éµµ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê¾Ò´Ù. ´ÜÁö ÇϳªÀÇ È帧¸¸ÀÌ Á¸ÀçÇß¾ú±â ¶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌ ÇÁ·Î±×·¥Àº Á»´õ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î µ¥ÀÌÅ͸¦ ´Ù·ç¾î¾ß Çϱ⠶§¹®¿¡ È帧Á¦¾î ¸í·ÉÀÌ ÇÊ¿äÇØ Áö°Ô µÈ´Ù.

È帧Á¦¾î ¸í·É ¿Ü¿¡µµ ÀÌÇÁ·Î±×·¥ÀÌ ¿Ï¼ºµÇ±â À§ÇØ 2°³ÀÇ ´Ù¸¥ »õ·Î¿î ¸í·ÉµéÀÌ »ç¿ëµÉ °ÍÀÌ´Ù. conditional jump¿Í unconditional jump°¡ ±×°ÍÀε¥, conditional jump´Â Á¶°Ç Á¡ÇÁ·Î Á¶°ÇÀ» ¸¸Á·ÇÏ´ÂÁö¸¦ ÆÇ´ÜÇØ¼­ ƯÁ¤ ·çƾÀ¸·Î À̵¿Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. uncoditional jump´Â ¹«Á¶°Ç Á¡ÇÁ·Î Á¶°ÇÀÇ ¸¸Á·°ú °ü°è¾øÀÌ ÁöÁ¤ÇÑ ·çƾÀ¸·Î À̵¿½ÃŲ´Ù. À̵é jump¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Àå¿¡¼­ ´Ù·ç°Ô µÉ °ÍÀÌ´Ù.

È帧Á¦¾î¸¦ À§ÇØ »ç¿ëµÇ´Â ¶Ç´Ù¸¥ ÀåÄ¡´Â ·çÇÁ(loop)ÀÌ´Ù. ·çÇÁ´Â ¹Ýº¹ÀûÀ¸·Î ½ÇÇàµÇ´Â ÄÚµåÀÇ Á¶°¢À» ¸»ÇÑ´Ù. ¿¹¸¦ µé¾î ¿ì¸®°¡ ÀÛ¼ºÇÒ ÇÁ·Î±×·¥Àº óÀ½¿¡ 0°ú ¸ñ·ÏÀÇ Ã¹¹øÂ° °ªÀ» ºñ±³Çؼ­ °¡Àå Å«°ªÀ¸·Î ¸ñ·ÏÀÇ Ã¹¹øÂ° °ªÀ» ÃÖ°í°ªÀ¸·Î µî·Ï½ÃŰ°í ±× ´ÙÀ½¿¡´Â ¸ñ·ÏÀÇ µÎ¹øÂ° °ª°ú ÇöÀç ÃÖ°í°ªÀ» ºñ±³ÇÏ´Â ½ÄÀ¸·Î µ¿ÀÏÇÑ ÀÏÀ» °è¼Ó(¸ñ·ÏÀÇ ¸¶Áö¸· ¼ýÀÚÀÎ 0¿¡ µµ´ÞÇÒ ¶§±îÁö) ¹Ýº¹ÇÒ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¹Ýº¹ÀÛ¾÷ÀÇ Ã³¸®¸¦ À§Çؼ­ ·çÇÁ¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ·çÇÁÀÇ ¹Ýº¹À» À§Çؼ­ ¿©±â¿¡¼­´Â unconditional jump¸¦ »ç¿ëÇϰí ÀÖ´Ù. ·çÇÁ ÄÚµå ¿µ¿ªÀÇ ¸¶Áö¸·¿¡ µµ´ÞÇÏ¸é ¹«Á¶°Ç ·çÇÁ ÄÚµåÀÇ Ã³À½À¸·Î µ¹¾Æ°£´Ù. ·çÇÁÄÚµåÀÇ Ã³À½¿¡¼­´Â ¸ñ·Ï¿¡¼­ ¼ýÀÚ¸¦ °¡Á®¿À°í 0ÀÎÁö ¾Æ´ÑÁö¸¦ ÆÇ´ÜÇÑ´ÙÀ½ 0À̶ó¸é ·çÇÁ¸¦ ºüÁ®³ª°¡±â À§Çؼ­ jump¸¦ ½ÃµµÇÒ °ÍÀÌ´Ù. À̶§ÀÇ jump´Â Á¶°ÇÀÇ ÆÇ´ÜÈÄ¿¡ ÀÌ·ç¾î Áö¹Ç·Î conditional jump°¡ ÇÊ¿äÇÏ°Ô µÈ´Ù.

´ÙÀ½Àå¿¡¼­´Â Áö±Ý±îÁöÀÇ °èȹÀ» ½ÇÁ¦ ÇÁ·Î±×·¥ÀÇ ÀÛ¼º¿¡ Àû¿ëÇÒ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î±×·¥Àº °£´ÜÇÏÁö¸¸ ÇÁ·Î±×·¥À¸·Î½á °¡Á®¾ßÇÒ ´ëºÎºÐÀÇ ±âº»¿ä°ÇÀ» °¡Áö°í ÀÖÀ¸¹Ç·Î Á¦´ë·Î ÀÌÇØÇÑ´Ù¸é ¾ÕÀ¸·Î ÀÌ ¹®¼­¸¦ Àдµ¥ Å« µµ¿òÀÌ µÉ°ÍÀÌ´Ù.

3.4. ÃÖ´ë ¼ýÀÚ Ã£±â

ÄÚµåÀÇ À̸§Àº maximum.s·Î ÇÑ´Ù.

# data_items¿¡ ÀÖ´Â ¼ýÀÚÀÇ ¸ñ·ÏÁß °¡Àå Å«
# µ¥ÀÌÅ͸¦ ¾ò¾î¿Í¼­ ¸®ÅÏÇÑ´Ù.
#

# º¯¼öµé : ÇÁ·Î±×·¥ÀÇ ÀÛµ¿À» À§Çؼ­ »ç¿ëµÇ´Â ·¹Áö½ºÅ͵é
# %edi - µ¥ÀÌŸ ¸ñ·Ï¿¡¼­ Á¶»çÇÒ ¼ýÀÚÀÇ À妽º ÀúÀå¿ë
# %ebx - °¡Àå Å« ¼ýÀÚ ÀúÀå¿ë
# %eax - ÇöÀç ºñ±³ÇÒ ¼ýÀÚ ÀúÀå¿ë
#

# The following memory locations are used:
#
# data_items - ºñ±³ÇÒ ¼ýÀÚµ¥ÀÌÅ͵é 0Àº ¸¶Áö¸·À» ³ªÅ¸³½´Ù.
#

.section .data

data_items:                         # ¼ýÀÚ µ¥ÀÌÅ͵é
    .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0 
    .section .text
    .globl _start

_start:
    movl $0, %edi                   # move 0 into the index register
    movl data_items(,%edi,4), %eax  # load the first byte of data
    movl %eax, %ebx                 # since this is the first item, %eax is
                                    # the biggest

start_loop:                         # start loop
    cmpl $0, %eax                   # check to see if we ve hit the end
    je loop_exit
    incl %edi                       # load next value
    movl data_items(,%edi,4), %eax
    cmpl %ebx, %eax                 # compare values
    jle start_loop                  # jump to loop beginning if the new
                                    # one isn t bigger
    movl %eax, %ebx                 # move the value as the largest
    jmp start_loop                  # jump to loop beginning
loop_exit:                          # %ebx is the return value,
                                    # and it already has the number

    movl $1, %eax                   #1 is the exit() syscall
    int $0x80
			

ÀÌÁ¦ ¾î¼Àºí°ú ¸µÅ©¸¦ ÀÌ¿ëÇØ¼­ ½ÇÇàÆÄÀÏÀ» »ý¼ºÇÏÀÚ.

# as maximum.s -o maximum.o
# ld maximum.o -o maximum
			
½ÇÇà ÈÄ °á°ú¸¦ È®ÀÎÇØº¸µµ·Ï ÇÏÀÚ.
# ./maximum
# echo $?
			
222°¡ Ãâ·ÂµÈ°ÍÀ¸·Î À§ÀÇ ÇÁ·Î±×·¥ÀÌ ÃÖ´ë ¼ýÀÚ¸¦ Á¦´ë·Î °ñ¶ó³½ °É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·³ À§ÀÇ Äڵ带 ÇÑÁÙ¾¿ ºÐ¼®ÇØ º¸µµ·Ï ÇÏÀÚ. µ¥ÀÌÅÍ ¼½¼Ç¿¡¼­ °¡Àå ¸ÕÀú ¸¸³ª´Â ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.
data_items:                         # ¼ýÀÚ µ¥ÀÌÅ͵é
    .long 3,67,34,222,45,75,54,34,44,33,22,11,66,0 
			
data_items´Â ¼ýÀÚ µ¥ÀÌÅ͵éÀÌ ÀúÀåµÈ À§Ä¡¿¡ ´ëÇÑ ÂüÁ¶¶óº§ÀÌ´Ù. ½ÇÁ¦ µ¥ÀÌÅͰ¡ Á¤ÀÇµÈ Äڵ忡¼­´Â .long ¸¦ ÀÌ¿ëÇØ¼­ ÀúÀåµÉ µ¥ÀÌÅÍÀÇ Çü(type)¸¦ ¸í½ÃÇϰí ÀÖ´Ù. ±×·¡¾ß Á¦´ë·ÎµÈ ¸Þ¸ð¸® ÇÒ´çÀÌ ÀÌ·ç¾îÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌÁ¦ºÎÅÍ data_items´Â µ¥ÀÌÅÍÀÇ Ã¹¹øÂ° ¿µ¿ªÀ» °¡¸®Å²´Ù. data_items°¡ µ¥ÀÌÅÍÀÇ Ã¹¹øÂ° ¿µ¿ªÀ» °¡¸®Å°°í Àֱ⠶§¹®¿¡ ¿ì¸®´Â data_items¿¡ ´ëÇÑ °£´ÜÇÑ ¿¬»êÀ¸·Î ¼ýÀÚ µ¥ÀÌÅ͵éÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ movl data_items, %eax ¸í·ÉÀ» ³»¸®¸é 3ÀÌ %eax ·¹Áö½ºÅÍ¿¡ ÀúÀåµÈ´Ù. ¾î¼Àºí¸®¾î´Â .long ¿Ü¿¡µµ ´ÙÀ½°ú °°Àº ¿©·¯°¡Áö µ¥ÀÌÅÍÇüÀ» Á¦°øÇÑ´Ù.

.byte

1byteÀÇ µ¥ÀÌÅͰªÀ» ¸í½ÃÇÑ´Ù. 0-255¹üÀ§ÀÇ °ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

.int

2byteÀÇ µ¥ÀÌÅͰªÀ» ¸í½ÃÇÑ´Ù. 0-65535¹üÀ§ÀÇ °ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

.long

4byteÀÇ µ¥ÀÌÅͰªÀ» ¸í½ÃÇÑ´Ù. 0-4294967295¹üÀ§ÀÇ °ªÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

.ascii

¸Þ¸ð¸®¿¡ ¹®ÀÚ¿­À» Á÷Á¢ ÀúÀåÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. °¢°¢ÀÇ ¹®ÀÚ´Â 1byteÀÇ °ø°£À» Â÷ÁöÇÑ´Ù. ¸¸¾à .ascii "Hello there\0" ·Î Á¤ÀÇ Çß´Ù¸é ¾î¼Àºí·¯´Â 12byteÀÇ °ø°£À» È®º¸Çϰí È®º¸µÈ °ø°£¿¡ À§ÀÇ ¹®ÀÚ¿­À» ÀúÀåÇÏ°Ô µÈ´Ù. ù¹øÂ° À§Ä¡¿¡´Â H°¡ µÎ¹øÂ° À§Ä¡¿¡´Â e°¡ ÀúÀåµÈ´Ù. Á¦ÀÏ ¸¶Áö¸·¿¡´Â '\0'ÀÌ ÀúÀåµÇ´Âµ¥, ÀÌ °ªÀº È­¸é¿¡ Ãâ·ÂµÇÁö ¾Ê°í ´ÜÁö ¹®ÀÚ¿­ÀÇ ¸¶Áö¸· À̶ó´Â °ÍÀ» ¾Ë·ÁÁÖ±â À§Çؼ­ »ç¿ëÇÑ´Ù. À̿ܿ¡µµ Åǰú °³Ç๮ÀÚ¸¦ Ç¥½ÃÇϱâ À§Çؼ­ '\t'¿Í '\n'°°Àº ¹®Àڵ鵵 »ç¿ëµÈ´Ù.

À§ÀÇ ¿¹Á¦ÀÇ °æ¿ì ¾î¼Àºí·¯´Â ¼ýÀÚÀÇ ¸ñ·ÏÀ» ÀúÀåÇϱâ À§Çؼ­ 4byte * 14 ¸¸Å­ÀÇ ¸Þ¸ð¸® °ø°£À» È®º¸°Ô µÈ´Ù.

¼ýÀÚÀÇ ¸ñ·ÏÀ» ÀúÀåÇϴµ¥ À־ ¸¶Áö¸·¿¡ 0À» »ç¿ëÇß´Ù´Â °ÍÀ» ÁÖ¸ñÇϱ⠹ٶõ´Ù. ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ¼ýÀÚ ¸ñ·ÏÀÇ ¸¶Áö¸·À̶ó´Â °ÍÀ» ¾Ë·ÁÁÖ±â À§Çؼ­ 0À» »ç¿ëÇϰí ÀÖ´Ù. ¼ýÀÚ ¸ñ·ÏÀÇ °¹¼ö¸¦ ¸íÈ®È÷ Çϱâ À§Çؼ­ À̹ۿ¡µµ ¼ýÀÚ ¸ñ·ÏÀÇ Ã³À½¿¡ Àüü ¼ýÀÚÀÇ °¹¼ö¸¦ Àû¾îÁشٰųª ÇÁ·Î±×·¥³»¿¡ Àüü ¼ýÀÚÀÇ °¹¼ö¸¦ Á÷Á¢ ³Ö´Â ¹æ¹ýÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. ÀÌ ¿Ü¿¡µµ ¿©·¯°¡Áö ¹æ¹ýÀ» ÅëÇØ¼­ ¼ýÀÚÀÇ °¹¼ö¸¦ ¸í½ÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ Ã³·³ ¸ñ·ÏÀÇ ³¡À» ³ªÅ¸³»±â À§Çؼ­ ¿©·¯°¡Áö ¹æ¹ýµéÀÌ µ¿¿øµÇ´Â ÀÌÀ¯´Â ÄÄÇ»ÅÍÀÇ °æ¿ì ¿ì¸®°¡ ¸íÈ®ÇÏ°Ô ³¡À» ÁöÁ¤ÇØ ÁÖ±â Àü¿¡´Â ¸ñ·ÏÀÇ ³¡ÀÌ ¾îµòÁö ÃøÁ¤ ÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

ÀÌÁ¦.globl¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. À̰ÍÀº ¾î¶°ÇÑ µ¥ÀÌÅ͵µ °¡ÁöÁö ¾ÊÀ¸¸ç ´ÜÁö ÇÁ·Î±×·¥ÀÌ ½ÃÀ۵Ǵ ½ÇÇà À§Ä¡¸¦ ¾Ë·ÁÁÖ±â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù. Linux´Â ÇÁ·Î±×·¥À» ½ÃÀÛÇϱâ À§Çؼ­ ¾îµðºÎÅͰ¡ ½ÇÇ࿵¿ªÀÎÁö¸¦ ¾Ë°í ÀÖ¾î¾ß Çϸç _start ºÎÅÍ ½ÇÇàÇÑ´Ù. .globlÀº _start¸¦ ÂüÁ¶½ÃŲ´Ù. .globlÀ» »ý·«ÇÒ °æ¿ì ¸µÅ©½Ã ´ÙÀ½°ú °°Àº ¿¡·¯°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù.

# ld maximum.o -o maximum
ld: warning: cannot find entry symbol _start; defaulting to 08048074
			

ÀÌ °É·Î ÇØ¼­ ¿ì¸®°¡ »ç¿ëÇÒ ¸ðµç µ¥ÀÌÅÍÀÇ Áغñ¸¦ ¸¶ÃÆÀ¸´Ï, ÀÌÁ¦ º»°ÝÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÀÌ¿ëÇØ¼­ ÇÊ¿äÇÑ ÀÛ¾÷(°¡Àå Å« ¼ýÀÚ¸¦ °¡·Á³»´Â)À» ÇØ¾ß ÇÑ´Ù. À§ Äڵ带 º¸¸é # º¯¼öµé¶ó°í µÇ¾î ÀÖ´Â ÁÖ¼®À» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌµé º¯¼ö´Â ÀÛ¾÷À» À§Çؼ­ »ç¿ëµÇ´Â µ¥ÀÌÅ͵éÀ» ÀúÀåÇϱâ À§ÇÑ ¿ë±â·Î »ç¿ëÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº º¯¼öµéÀÌ »ç¿ëµÈ´Ù.

  1. ÃÖ±ÙÀÇ ÃÖ´ë°ªÀ» ÀúÀåÇϱâ À§ÇÑ º¯¼ö

  2. ¼ýÀÚ ¸ñ·Ï¿¡¼­ °¡Á®¿Í¾ßÇÒ ¼ýÀÚÀÇ À§Ä¡¸¦ ÀúÀåÇϱâ À§ÇÑ º¯¼ö

  3. ¼ýÀÚ ¸ñ·Ï¿¡¼­ °¡Á®¿Â ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ º¯¼ö

¿ì¸®°¡ ¸¸µç ÇÁ·Î±×·¥Àº ¸Å¿ì °£´ÜÇϹǷΠ´ÜÁö ¸î°³ÀÇ º¯¼ö¸¸ ÇÏ¿ëÇÏ¸é µÇ¸ç, ·¹Áö½ºÅ͸®¸¸À¸·Î ÀÌµé º¯¼ö¸¦ ´ã¾Æ³¾ ¼ö ÀÖ´Ù. ±×·¯³ª ÇÁ·Î±×·¥ÀÌ Ä¿Áö°í °Å±â¿¡ µû¶ó¼­ ´Ù·ç¾î¾ßÇÏ´Â µ¥ÀÌÅ;çÀÌ Ä¿Áú °æ¿ì ·¹Áö½ºÅ͸¸À¸·Î ¸ðµç ÀÛ¾÷À» ÇÒ ¼ö ¾ø°Ô µÈ´Ù. ¿©±â¿¡ ´ëÇØ¼­´Â ³ªÁß¿¡ ´Ù·ç°Ô µÉ°ÍÀÌ´Ù.

ÀÌ ÇÁ·Î±×·¥¿¡¼­ °¡Àå Å« ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§Çؼ­ %ebx¸¦ »ç¿ëÇß´Ù. %edi´Â ÇöÀç °¡Á®¿Í¾ßÇÒ ¼ýÀÚÀÇ À§Ä¡(index)¸¦ ÀúÀåÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. %edi¸¦ ÀÌ¿ëÇØ¼­ ¿ì¸®´Â data_items·Î ºÎÅÍ ¸î ¹øÂ° ¼ýÀÚ¸¦ Àоî¿Í¾ß ÇÒÁö¸¦ °áÁ¤ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÇÁ·Î±×·¥ÀÌ ¸· ½ÃÀÛÇßÀ» ¶§´Â data_itemsÀÇ Ã¹¹øÂ° ¼ýÀÚ¸¦ °¡Á®¿Í¾ß µÇ¹Ç·Î %edi´Â 0ÀÌ ÀԷµȴÙ. ù¹øÂ° ¼ýÀÚ¸¦ °¡Á®¿Ô´Ù¸é %edi¿¡´Â 1ÀÌ µé¾î°¡°í, ´ÙÀ½ ¼ýÀÚ¸¦ °¡Á®¿Ã ¶§´Â data_itemsÀÇ µÎ¹øÂ° ¼ýÀÚ¸¦ °¡Á®¿À°Ô µÈ´Ù.

movl  $0, $edi
			
%edi´Â µ¥ÀÌÅÍ ¸ñ·ÏÀÇ ¸î¹øÂ° µ¥ÀÌÅ͸¦ °¡Á®¿Í¾ß ÇÏ´ÂÁö¸¸À» ¾Ë·ÁÁÖ´Â À妽º ÀÌ´Ù. ¿ì¸®´Â ÀÌ À妽º °ªÀ» ÀÌ¿ëÇØ¼­ data_items·Î ºÎÅÍ °ªÀ» °¡Á®¿Í¾ß Çϴµ¥ ´ÙÀ½°ú °°Àº °°´ÜÇÑ ¿¬»êÀÌ »ç¿ëµÈ´Ù.
movl data_items(,%edi,4), %eax
			
´ÙÀ½Àº ¸ñ·ÏÀ¸·Î ºÎÅÍ ¼ýÀÚ¸¦ °¡Á®¿À°í ÃÖ°í°ªÀ» ÀúÀåÇÏ´Â ·çƾÀÌ´Ù.

  1. data_items´Â ¿ì¸®°¡ °è»ê¿¡ »ç¿ëÇÒ ¼ýÀÚ ¸ñ·ÏÀÇ Ã¹¹øÂ° ¼ýÀÚ¸¦ °¡¸£Å²´Ù.

  2. ¼ýÀÚ¸ñ·ÏÀÇ ¼ýÀÚµéÀº .long ÇüÀ̹ǷΠ4byteÀÇ Å©±â¸¦ Â÷ÁöÇÑ´Ù.

  3. °¢ ¼ýÀÚ°¡ Â÷ÁöÇÏ´Â °ø°£ÀÌ 4byteÀÎ °ÍÀ» ÀÌ¿ëÇØ¼­ ´ÙÀ½ ¼ýÀÚ¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.

  4. ¿ì¸®´Â Áö±Ý ¼ýÀÚ¿Í ´ÙÀ½ ¼ýÀÚ¸¦ ºñ±³Çؼ­ ÃÖ°í Å« ¼ýÀÚ¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.

  5. °¡Àå Å« ¼ýÀÚ´Â ¿ì¸®°¡ ÁغñÇÑ ·¹Áö½ºÅÍ¿¡ º¹»çÇÑ´Ù.

  6. ´Ù½Ã óÀ½À¸·Î µÇµ¹¾Æ °£´Ù.

À§ÀÇ ·çƾÀ» º¸¸é óÀ½À¸·Î µÇµ¹¾Æ °£´Ù°í µÇ¾î ÀÖ´Ù. óÀ½À̶ó ÇÔÀº ·çÇÁÀÇ Ã³À½ÀÎ start_loopÀÌ µÈ´Ù. ·çÇÁÀÇ Ã³À½À¸·Î µÇµ¹¾Æ °£´Ù. ·çÇÁÀÇ Ã³À½¿¡´Â ´ÙÀ½°ú °°Àº ¸í·ÉÀÌ µé¾î °£´Ù.
cmpl  $0, %eax 
je    end_loop
			
cmplÀº 2°³ÀÇ °ªÀ» ºñ±³Çϱâ À§ÇÑ ¸í·ÉÀÌ´Ù. ¿©±â¿¡¼­ ¿ì¸®´Â 0°ú %eax¿¡ ÀúÀåµÈ °ªÀ» ºñ±³Çϰí ÀÖ´Ù. ºñ±³¸¦ Çß´Ù¸é ºñ±³¿¡ ´ëÇÑ °á°ú°¡ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ °á°ú´Â %eax·¹Áö½ºÅͰ¡ ¾Æ´Ñ %eflags·¹Áö½ºÅÍ¿¡ µé¾î°£´Ù. ÀÌ ·¹Áö½ºÅÍ´Â »óÅÂ(status) ·¹Áö½ºÅͶó°íµµ ºÒ¸®¿ì¸ç Á¾Á¾ »ç¿ëµÈ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ³ªÁß¿¡ ´Ù·çµµ·Ï ÇϰڴÙ. ¾î¶µç ºñ±³µÈ °á°ú´Â %eflags¿¡ ÀúÀåµÇ°í ÀúÀåµÈ °ªÀº ´ÙÀ½ Äڵ忡¼­ Á¡ÇÁ¸¦ ÇÒÁö ¾ÈÇÒÁö¸¦ ÆÇ´ÜÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù. ¸¸¾à ºñ±³°á°ú°¡ ÂüÀ̶ó¸é(°°´Ù¸é) end_loop·Î Á¡ÇÁ¸¦ ÇÏ°Ô µÇ°í, ±×·¸Áö ¾Ê´Ù¸é ±×³É ´ÙÀ½ ¶óÀÎÀ¸·Î ³Ñ¾î°¡°Ô µÈ´Ù. ¿ì¸®´Â Á¡ÇÁ¸¦ À§Çؼ­ je¸¦ »ç¿ëÇϰí Àִµ¥, À̿ܿ¡µµ ´Ù¾çÇÑ Á¡ÇÁ ¸í·ÉµéÀÌ Á¸ÀçÇÑ´Ù.

je

µÎ°³ÀÇ °ªÀÌ °°À¸¸é Á¡ÇÁÇ϶ó.

jg

µÎ¹øÂ° °ªÀÌ Ã¹¹øÂ° °ªº¸´Ù Å©¸é Á¡ÇÁÇ϶ó.

jge

µÎ¹øÂ° °ªÀÌ Ã¹¹øÂ° °ªº¸´Ù Å©°Å³ª °°À¸¸é Á¡ÇÁÇ϶ó.

jl

µÎ¹øÂ° °ªÀÌ Ã¹¹øÂ° °ªº¸´Ù ÀÛÀ¸¸é Á¡ÇÁÇ϶ó.

jle

µÎ¹øÂ° °ªÀÌ Ã¹¹øÂ° °ªº¸´Ù ÀÛ°Å´Ù °°´Ù¸é Á¡ÇÁÇ϶ó.

jmp

¹«Á¶°Ç Á¡ÇÁÇÑ´Ù.

À̵é Á¡ÇÁ¿Í °ü·ÃµÈ ¸í·ÉµéÀÇ ¸ñ·ÏÀº Appendix B¸¦ Âü°íÇϱ⠹ٶõ´Ù. ¿ì¸®°¡ ¸¸µç ÇÁ·Î±×·¥¿¡¼­´Â 0°ú %eaxÀÇ °ªÀÌ °°À» °æ¿ì Á¡ÇÁÇϵµ·Ï ÄÚµùµÇ¾î ÀÖ´Ù. %eax°¡ 0°ú °°´Ù¸é Áï ¸ñ·ÏÀÇ ¸¶Áö¸· À̶ó¸é loop_exit·Î Á¡ÇÁÇÑ´Ù.

¸¸¾à ¼ýÀÚ¸ñ·Ï¿¡¼­ °¡Á®¿Â ¼ýÀÚ°¡ 0ÀÌ ¾Æ´Ï¶ó¸é ´ÙÀ½ ¸í·ÉÀÌ ½ÇÇàµÈ´Ù.

incl  %edi 
movl  data_item(,%edi,4),   %eax
			
ÀÌÀüÀÇ ³»¿ëµéÀ» ÁÖÀÇ ±í°Ô Àоî¿Ô´Ù¸é %edi°¡ data_itemsÀÇ ¸ñ·ÏÀÇ À妽º¸¦ ÀúÀåÇϰí ÀÖ´Ù´Â °ÍÀ» ±â¾ïÇÒ °ÍÀÌ´Ù. ÀÌÁ¦ ´ÙÀ½ µ¥ÀÌÅÍ °ªÀ» À妽º ÇØ¾ß ÇϹǷΠ%edi¸¦ 1¸¸Å­ Áõ°¡ ½ÃÄ×´Ù. ÀÌÂë µÇ¾ú´Ù¸é movl·Î ÇÏ´Â ÀÏÀ» ÁüÀÛÇßÀ» °ÍÀÌ´Ù. data_item¿¡¼­ %edi À§Ä¡¸¸Å­ À̵¿Çؼ­ µ¥ÀÌÅ͸¦ °¡Á®¿À°í À̰ÍÀ» %eax¿¡ º¹»çÇÏ´Â ÀÏÀ» ÇÑ´Ù. data_item¿¡ ÀÖ´Â °¢ µ¥ÀÌÅÍÀÇ Å©±â´Â 4¹ÙÀÌÆ® À̹ǷΠ4¹ÙÀÌÆ®¸¸Å­À» %eax¿¡ º¹»çÇϰí ÀÖ´Ù.

cmpl %ebx, %eax
jle  start_loop
			
ÀÌÁ¦ %ebx¿Í %eax¸¦ ºñ±³ÇÑ´Ù. %ebx´Â ÇöÀç±îÁö ã¾Æ³½ °¡ÀåÅ« ¼ýÀÚ°¡ µé¾î ÀÖ´Ù. ¸¸¾à ÇöÀç °ªÀÌ ÀÌÀü ÃÖ°í°ªº¸´Ù À۰ųª °°´Ù¸é start_loop·Î Á¡ÇÁÇÑ´Ù.
movl %eax, %ebx
jmp  start_loop
			
¸¸¾à ÇöÀç °ªÀÌ ÀÌÀü ÃÖ°í°ªº¸´Ù Å©´Ù¸é %ebx¿¡ º¹»çÇϰí start_loop·Î Á¡ÇÁÇÑ´Ù. ÀÌÁ¦ 0À» ¸¸³¯¶§±îÁö À§ÀÇ ·çƾÀ» ¹Ýº¹ÇÑ´Ù. ¸¸¾à 0À» ¸¸³ª¸é loop_exit·Î Á¡ÇÁÇÑ´Ù. ¸¶Áö¸· ºÎºÐ¿¡¼­ ÀÌ ÇÁ·Î±×·¥Àº ¸®´ª½º Ä¿³ÎÀÇ exit¸¦ È£ÃâÇÏ°Ô µÈ´Ù. ½Ã½ºÅÛÄÝÀÇ È£ÃâÀº %eax¿¡ ÀúÀåµÇ¾î ÀÖ´Â ¹øÈ£¸¦ ÅëÇØ¼­ È£ÃâµÈ´Ù. exit½Ã½ºÅÛÄÝÀÇ ¹øÈ£´Â 1¹øÀ̹ǷΠ´ÙÀ½°ú °°Àº Äڵ尡 ÇÊ¿äÇÏ´Ù.
movl $1, %eax
int  0x80 
			

À̰ÍÀ¸·Î ¿ì¸®°¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸ðµç ¼³¸íÀ» ¸¶ÃÆ´Ù. ¸Å¿ì °£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ¿´Áö¸¸ »ó´çÈ÷ ¸¹Àº °ÍÀ» ¹è¿ï¼ö ÀÖ¾ú´Ù. °£´ÜÇÑ ÇÁ·Î±×·¥ À̹ǷΠÀÌÇØ¿¡´Â Å« ¾î·Á¿òÀÌ ¾ø¾úÀ» °ÍÀÌ´Ù. ÀÌÇØ°¡ µÇÁö ¾Ê´Â ºÎºÐÀÌ ÀÖ´Ù¸é ÁÖ¼®°ú ÇÔ²² ÇÁ·Î±×·¥À» ÁÖÀÇ ±í°Ô ÀÐ¾î º¸±â ¹Ù¶õ´Ù. Á»´õ ¿Ïº®ÇÏ°Ô ÀÌÇØÇÏ°í ½Í´Ù¸é ÇÁ·Î±×·¥ÀÇ °¢ ½ºÅܺ°·Î ·¹Áö½ºÅÍÀÇ °ªÀÇ º¯È­¸¦ ±â·ÏÇØ°¡¸é¼­ Äڵ带 È®ÀÎÇØ º¸±â ¹Ù¶õ´Ù.

3.5. Addressing mode

¿ì¸®´Â 2Àå¿¡¼­ ¾î¼Àºí¸®¾î°¡ 2°¡Áö Á¾·ùÀÇ µ¥ÀÌÅÍ Á¢±Ù ¹æ¹ý (Data Accessing Methods)¸¦ °¡Áø´Ù´Â °ÍÀ» ¹è¿ü´Ù. À̹ø Àå¿¡¼­´Â ÀÌ·¯ÇÑ ¾î¼Àºí¸®¾î¿¡¼­ Á¦°øÇÏ´Â ¾îµå·¹½º ±â¹ÝÀÇ µ¥ÀÌÅÍ Á¢±Ù ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

¸Þ¸ð¸® ÁÖ¼Ò¸¦ ÂüÁ¶ÇÏ´Â ÀϹÝÀûÀÎ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

ADDRESS_OR_OFFSET(%BASE_OR_OFFSET, %INDEX, MULTIPLIER)
			
À§ÀÇ ¸ðµç ÇʵåµéÀº Çʼö»çÇ×ÀÌ ¾Æ´Ñ ¿É¼Ç»çÇ×µéÀÌ´Ù. ´ÙÀ½Àº À§ÀÇ ÇʵåµéÀÇ °ªÀ» ÀÌ¿ëÇØ¼­ ÁÖ¼Ò¸¦ °è»êÇØ³»´Â ¹æ¹ýÀÌ´Ù.
FINAL ADDRESS = ADDRESS_OR_OFFSET + %BASE_OR_OFFSET + MULTIPLIER * %INDEX
			
ADDRESS_OR_OFFSET¿Í MULTIPLIER ¸ðµÎ »ó¼ö·Î ·¹Áö½ºÅÍ´Ù. ¸¸¾à ¾î¶² °ªµµ ¾ø´Ù¸é, 0ÀÌ »ç¿ëµÈ´Ù.

Addressing mode´Â 2ÀåÀÇ Data Accessing Method¿¡¼­ ÀÌ¹Ì ¾ð±ÞÇÑÀûÀÌ ÀÖÁö¸¸ º¹½ÀÂ÷¿ø¿¡¼­ °£´ÜÈ÷ ¼³¸íÇϵµ·Ï ÇϰڴÙ.

direct addressing mode

À̰ÍÀº ´ÜÁö ADDRESS_OR_OFFSET ¸¸ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº »ç¿ë¿¹ÀÌ´Ù.

movl ADDRESS, %eax
					
%eax¿¡´Â ¸Þ¸ð¸® ÁÖ¼Ò ADDRESSÀÇ °ªÀÌ Á÷Á¢ º¹»çµÈ´Ù.

index addressing mode

ADDRESS_OR_OFFSET°ú %INDEX°¡ ¸ðµÎ »ç¿ëµÈ´Ù. À妽º ·¹Áö½ºÅÍ¿¡´Â ¾î¶² Á¾·ùÀÇ ÀϹݸñÀû(general-purpose) ·¹Áö½ºÅÍ¶óµµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. À妽º ·¹Áö½ºÅÍ¿¡´Â 1, 2, 4ÀÇ ¹è¼ö°¡ ¿Ã ¼ö Àִµ¥, ÀÌ·¸°Ô µÇ¹Ç·Î½á byte, double-byte, wordsÀÇ ¾î¶°ÇÑ À妽º¶óµµ ½±°Ô °è»êÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼­ ¹®ÀÚ¿­ÀÌ µé¾î ÀÖ´Â string_start º¯¼ö°¡ Àִµ¥ ¿©±â¿¡¼­ 3¹øÂ° ¹®ÀÚ¸¦ °¡Á®¿À°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ Äڵ带 ¸¸µé¸é µÈ´Ù.

movl string_start(,%ecx,1), %eax
					
¹°·Ð À̰æ¿ì %ecx¿¡´Â À妽º°ªÀÎ 3ÀÌ µé¾îÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù. ADDRESS_OR_OFFSET Çʵ尡 ºñ¾î ÀÖÀ¸¹Ç·Î ¿©±â¿¡´Â 0ÀÌ µé¾î°£´Ù. Áï string_startÀÇ Ã³À½ÁÖ¼Ò¸¦ °¡¸®Å²´Ù. À妽ºÀÎ %ecx°¡ 3À̹ǷΠstring_startÀÇ 3¹øÂ° ÁÖ¼Ò¸¦ °¡¸®Å°°í, MULTIPLIER°¡ 1À̹ǷΠ1byte¸¸Å­ %eax·Î º¹»çµÈ´Ù.

(°£Á¢)indirect addressing mode

·¹Áö½ºÅÍÀÇ ÁÖ¼Ò·Î ºÎÅÍ °ªÀ» Á÷Á¢ ÀоîµéÀδÙ. ¿¹¸¦µé¾î %eaxÀÇ °ªÀ» %ebx·Î º¹»çÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

movl (%eax), %ebx
						

base-pointer addressing mode

·¹Áö½ºÅÍÁÖ¼Ò °ª¿¡ »ó¼ö°ªÀ» ´õÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â °£Á¢ÁÖ¼Ò ÁöÁ¤¹æ½Ä°ú ¸Å¿ì ºñ½ÁÇÑ ¹æ½ÄÀÌ´Ù. ¿¹¸¦ µé¾î ´ç½ÅÀÌ ¾î¶² ·¹ÄÚµå·Î ºÎÅÍ 4¹ÙÀÌÆ®ÀÇ

immediate mode

Immediate mode´Â ¸Å¿ì °£´ÙÇÏ´Ù. ¿øÇÏ´Â °ªÀ» ·¹Áö½ºÅͳª ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î Á÷Á¢ ÀúÀåÇÏ´Â ¹æ½ÄÀÌ´Ù. ¿¹¸¦ µé¾î %eax¿¡ 12¶ó´Â °ªÀ» ÀúÀåÇϱ⠿øÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ Immediate mode¸¦ ÀÌ¿ëÇØ¼­ °£´ÜÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ´Ù.

movl $12,  %eax
						
Immediate mode¸¦ ÀÌ¿ëÇÒ ¶§ ¼ýÀÚ ¾Õ¿¡ ´Þ·¯($)Ç¥½Ã°¡ »ç¿ëµÇ°í ÀÖÀ½À» ÁÖ¸ñÇϵµ·Ï ÇÏÀÚ. ¸¸¾à ´Þ·¯Ç¥½Ã¸¦ »ý·«ÇÏ°Ô µÉ°æ¿ì direct addressing mode·Î ¿¬»êÀ» ½ÃµµÇÏ°Ô µÈ´Ù. ÀÌ·¸°Ô µÇ¸é 12°¡ %eax¿¡ ÀúÀåµÇ´Â°Ô ¾Æ´Ï°í 12ÀÇ ¸Þ¸ð¸® À§Ä¡¿¡ ÀÖ´Â °ªÀÌ ÀúÀåµÇ¾î¼­ ÀüÇô ¾û¶×ÇÑ °á°ú¸¦ °¡Á®¿À°Ô µÈ´Ù.

register addressing mode

°£´ÜÇÏ°Ô ÇϳªÀÇ ·¹Áö½ºÅ͸¦ ´Ù¸¥ ·¹Áö½ºÅÍ·Î º¹»çÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.

¸Þ¸ð¸®ÀÇ µ¥ÀÌÅ͸¦ Á¦¾îÇϴµ¥ À־ À§ÀÇ ¸ðµåµé Áß Çϳª°¡ »ç¿ëµÇ¹Ç·Î ¾îµå·¹½Ì ¸ðµå¿¡ ´ëÇØ¼­ ÀÌÇØÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÏ´Ù. Immediate mode¸¦ Á¦¿ÜÇÑ ¸ðµç ¸ðµåµéÀº ¼Ò½º(source)³ª ¸ñÀûÁö ¿ÀÆÛ·£µå¸¦ ¸ðµÎ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¹Ý¸é Immediate mode´Â ´ÜÁö ¼Ò½º ¿ÀÆÛ·£µå¸¸ ÀÌ¿ëÇÑ´Ù.

°¢°¢ÀÇ ¸ðµåµéÀ» ÀÌ¿ëÇØ¼­ ¸Þ¸ð¸® º¹»ç¿Í °°Àº ÀÏÀ» ÇÏ´Ù º¸¸é.. ´Ù¾çÇÑ Å©±âÀÇ µ¥ÀÌÅ͸¦ º¹»çÇØ¾ß ÇÏ´Â °æ¿ì°¡ »ý±æ °ÍÀÌ´Ù. ¾î¼Àºí¸®´Â ÀÌ·¯ÇÑ °æ¿ì¸¦ ´ëºñÇÏ¿©¼­ ÀÚÁÖ »ç¿ëÇÏ´Â µ¥ÀÌÅÍ Å©±â¿¡ ´ëÇØ¼­ »ç¿ë°¡´ÉÇÑ ¸í·ÉµéÀ» ÁغñÇϰí ÀÕ´Ù. ¿öµå ´ÜÀ§ÀÇ µ¥ÀÌÅÍ º¹»ç¸¦ ¿øÇÑ´Ù¸é movl¸¦ »ç¿ëÇϰí, ¹ÙÀÌÆ® ´ÜÀ§·ÎÀÇ º¹»ç¸¦ ¿øÇÏ´Ù¸é movb¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¾Õ¿¡¼­ ´Ù·ç¾ú´Ù ½ÃÇÇ µ¥ÀÌÅ͸¦ ÀúÀåÇϱâ À§ÇÑ ÃÖ¼Ò´ÜÀ§·Î ·¹Áö½ºÅ͸¦ »ç¿ëÇϴµ¥ Å©±â°¡ ¿öµå´ÜÀ§ÀÌ´Ù. ±×·¯¹Ç·Î ¹ÙÀÌÆ®´ÜÀ§·Î ´Ù·ç°íÀÚ ÇÒ°æ¿ì ·¹Áö½ºÅÍÀÇ ÀÏÁ¤¿µ¿ª¸¸À» »ç¿ëÇÒ ¼ö ÀְԵȴÙ(¾î¶»°Ô º¸¸é ³ª¸ÓÁö °ø°£À» ³¶ºñÇÏ´Â °á°ú¸¦ °¡Á®¿Â´Ù°í º¼ ¼ö ÀÖ´Ù).

%eax¸¦ ¿¹·Î µé¾îº¸µµ·Ï ÇÏÀÚ. ¸¸¾à 2¹ÙÀÌÆ®ÀÇ Å©±â¸¦ º¹»çÇϰíÀÚ ÇÒ¶§ %ax¸¦ »ç¿ëÇÑ´Ù. %ax´Â least-significant halt °£´ÜÈ÷ ¸»Çؼ­ 4¹ÙÀÌÆ® Å©±âÀÇ ¿öµå(Áï %eaxÀ¸)¿¡¼­ÀÇ ÇÏÀ§ 2¹ÙÀÌÆ®ÀÇ ¿µ¿ªÀ» °¡¸®Å²´Ù. %ax´Â ´Ù½Ã 1¹ÙÀÌÆ®¾¿ 2°³·Î ³ª´· ¼ö ÀÖ´Ù. %al°ú %ah°¡ ±×°ÍÀ¸·Î %alÀº %axÀÇ ¸¶Áö¸· ¹ÙÀÌÆ® %ah´Â %axÀÇ Ã³À½ ¹ÙÀÌÆ®¸¦ °¡¸®Å²´Ù.

그림 3. %eax ·¹Áö½ºÅÍÀÇ ¸ð½À

주석

[1]

À¯´Ð½º¿Í ¸®´ª½º´Â À©µµ¿ì¿Í ´Þ¸® È®ÀåÀÚ(extensions)¸¦ °¡Áú Çʿ䰡 ¾ø´Ù. À©µµ¿ìÁî¶ó¸é ½ÇÇàÆÄÀÏÀÇ °æ¿ì .exeµîÀÇ È®ÀåÀÚ¸¦ ¸í½ÃÇØ¾ß ÇÏÁö¸¸ À¯´Ð½º¿¡¼­´Â ¾î¶°ÇÑ È®ÀåÀÚµµ °¡Áú Çʿ䰡 ¾ø´Ù.

[2]

°°Àº ÀÏÀ» ÇÏ´Â ÇÁ·Î±×·¥ÀÌ¶óµµ ¸Å¿ì ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ÀÛ¼ºµÉ ¼ö ÀÖ´Ù. ÀϹÝÀûÀÎ ¹æ¹ýÀÌ »ç¿ëµÉ ¼ö ÀÖÁö¸¸ ¿©·¯ºÐ¸¸ÀÇ ³ëÇϿ츦 ÀÌ¿ëÇØ¼­ ÀÛ¼ºµÉ ¼ö ÀÖÀ¸¸ç, À̰æ¿ì ´Ù¸¥ ÇÁ·Î±×·¡¸Ó°¡ Äڵ带 ºÐ¼®Çϴµ¥ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ Æ¯ÀÌ »çÇ×µéÀ» ¸í½ÃÇØ µÎ¸é ´Ù¸¥ ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸¹Àº µµ¿òÀ» ÁÙ ¼ö ÀÖ´Ù.

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