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¸¦ ¹ø¿ªÇؼ ±× °á°ú¸¦
exit.o¶ó´ÂÆÄÀÏ¿¡ ¾´´Ù. exit.o¿Í °°Àº ¹ø¿ªµÈ °á°ú¸¦ ´ã°í ÀÖ´Â ÆÄÀÏÀ»
object file¶ó°í ºÎ¸¥´Ù. ¿ÀºêÁ§Æ® ÄÚµå´Â ±â°è¾î·Î
ÀÌ·ç¾îÁ® ÀÖ´Ù. ¿ÀºêÁ§Æ® Äڵ尡 ±â°è¾î·Î ÀÌ·ç¾îÁ® ÀÖÀ¸´Ï ÀÌ ÀÚü·Î ¿ÏÀüÇÑ
ÇÁ·Î±×·¥À̶ó°í »ý°¢ÇÒ ¼ö ÀÖ°ÚÁö¸¸ ±×·¸Áö´Â ¾Ê´Ù. ´ëºÎºÐÀÇ
±Ô¸ð°¡ ÀÖ´Â ÇÁ·Î±×·¥µéÀº ¿©·¯°³ÀÇ ¼Ò½ºÆÄÀÏ·Î ÀÌ·ç¾î Áö°í ÀÌµé ¼Ò½ºÆÄÀϵéÀº
°¢°¢ º°°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» ¸¸µé¾î ³½´Ù. ±×·¯¹Ç·Î ÀÌ·¯ÇÑ
¿©·¯°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀϵéÀ» ÇÕÃļ ÇϳªÀÇ ½ÇÇàÆÄÀÏ·Î ¸¸µé¾î¾ß ÇÏ´Â
ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.
linker¶ó´Â ÇÁ·Î±×·¥À»
ÀÌ¿ëÇÏ¸é ¿©·¯°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Çϳª·Î ÇÕÃļ Ä¿³Î¿¡¼ ½ÇÇà°¡´ÉÇÑ
ÇÁ·Î±×·¥À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. ¸®´ª½º´Â
ld¶ó´Â
linkerÇÁ·Î±×·¥À» Á¦°øÇÑ´Ù. ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸µÅ©
½ÃÄѼ ¿ÏÀüÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.
À§ÀÇ ¸í·ÉÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀº exit.o¸¦ ¸µÅ©½ÃÄѼ ½ÇÇàÆÄÀÏÀÎ exit¸¦
¸¸µé¾î ³½´Ù. ¸¸¾à À§ÀÇ ¸µÅ© °úÁ¤Áß ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é ÇÁ·Î±×·¥ÀÇ ¼Ò½ºÄڵ带
À߸ø ÀÛ¼ºÇßÀ» °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ÀÌ·± °æ¿ì ¿©·¯ºÐÀº ¼Ò½ºÄڵ带 ÁÖÀÇ
±í°Ô »ìÆì¼ ¹®Á¦°¡ µÈ ºÎºÐÀ» ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ¼Ò½ºÄڵ忡 ´ëÇÑ ¼öÁ¤ÀÌ
ÀÌ·ç¾î Á³´Ù¸é ´Ù½Ã assemble °ú link°úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù.
¾Æ¹«·± ¹®Á¦°¡ ¾øÀÌ ¸µÅ©±îÁö ¼º°øÇß´Ù¸é ´ÙÀ½°ú °°ÀÌ exit
[1]
ÇÁ·Î±×·¥À» ½ÇÇà ½Ãų ¼ö ÀÖ´Ù.
./´Â ÄÄÇ»ÅÍ¿¡°Ô ½ÇÇà½ÃÄÑ¾ß ÇÏ´Â ÇÁ·Î±×·¥ÀÌ ÀϹÝÀûÀÎ
ÇÁ·Î±×·¥ ½ÇÇà
°æ·Î(PATH)°¡ ¾Æ´Ñ ÇöÀç µð·ºÅ丮¿¡ ÀÖÀ½À» ¾Ë·ÁÁÖ±â
À§Çؼ »ç¿ëÇÑ´Ù. À§ÀÇ ÇÁ·Î±×·¥À» ½ÇÇà ½ÃÄѺ¸¸é ¾Æ¹«·± º¯Èµµ ¾øÀÌ
´ÙÀ½ ÇÁ·ÒÇÁÆ®°¡ ¶³¾îÁö´Â °É È®ÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÁ·Î±×·¥Àº ÇÏ´ÂÀÏÀÌ
¾Æ¹« °Íµµ ¾ø´Â °Í °°Áö¸¸ ³»ºÎÀûÀ¸·Î Á¾·áÇÏ¸é¼ Á¾·á°ªÀ» Ä¿³Î¿¡ µÇµ¹·Á
Áִµ¥, ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î exit ÇÁ·Î±×·¥ÀÇ Á¾·á°ªÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
¾Æ¸¶µµ 0ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù. À̰ÍÀº ¿ì¸®°¡ ¸¸µç exitÇÁ·Î±×·¥ »Ó¸¸ ¾Æ´Ï¶ó
´Ù¸¥ ¸ðµç ÇÁ·Î±×·¥¿¡ °øÅëÀûÀ¸·Î Àû¿ëµÈ´Ù. ¸ðµç ÇÁ·Î±×·¥Àº Á¤»óÀûÀ¸·Î
ÁÖ¾îÁø ÀÏÀ» ÇØ°áÇϰí Á¾·á ÇßÀ» ¶§´Â 0À» ¸®ÅÏÇÏ°í ½ÇÆÐÇßÀ» °æ¿ì 0ÀÌ¿ÜÀÇ
´Ù¸¥ ¼ýÀÚ¸¦ ¸®ÅÏÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥ Á¾·á°ªÀ» ÀÌ¿ëÇØ¼ ÇÁ·Î±×·¡¸Ó´Â
½ÇÇà½ÃÄ×´ø ÇÁ·Î±×·¥ÀÌ ÀÏÀ» Á¦´ë·Î ¼öÇàÇß´ÂÁö ¾Æ´Ï¸é ¾î¶² ¿À·ù°¡ ¹ß»ýÇß´Â
Áö¸¦ È®ÀÎÇÒ ¼ö ÀְԵȴÙ. 0Àº Á¤»óÁ¾·á, 1Àº ÆÄÀÏ¿±â ½ÇÆÐ, 2´Â À߸øµÈ
°è»ê µîÀ¸·Î Á¤ÀÇÇØ¼ °¢ »óȲ¿¡ ¸Â°Ô Á¾·á°ªÀ» ³Ñ±â°í Á¾·áÇÏ¸é µÈ´Ù.
3.2. ¾î¼Àºí¸® ÇÁ·Î±×·¥ÀÇ °³¿ä
exit.s¸¦ º¸¸é ¸¹Àº ÁÙÀÌ #ó¸® µÇ¾î ÀÖ´Â°É º¼ ¼ö ÀÖ´Ù.
À̰ÍÀº ÁÖ¼®À̶ó°í ºÒ¸®¿î´Ù. ÁÖ¼®Àº ¾î¼Àºí·¯¿¡ ÀÇÇØ¼ ÇØ¼® µÇÁö ¾Ê´Â
ºÎºÐÀ¸·Î ÁÖ·Î ÇÁ·Î±×·¡¸Ó¿¡°Ô ÇÁ·Î±×·¥ Äڵ忡 ´ëÇÑ ¼³¸í, ÈùÆ®µîÀ»
¸í½ÃÇØ¼ ÇÁ·Î±×·¡¸Ó°¡ Á»´õ ½±°Ô Äڵ带 ÆÄ¾ÇÇÒ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ
»ç¿ëµÈ´Ù. Àß ÀÛ¼ºµÈ ÁÖ¼®Àº ÇÁ·Î±×·¥À» ¸¸µé¾î³½ ´ç»çÀÚ »Ó¸¸ ¾Æ´Ï¶ó
ÇÁ·Î±×·¥À» Àоî¾ß ÇÏ´Â ´Ù¸¥ (ÆÀµ¿·áµî°ú °°Àº)ÇÁ·Î±×·¡¸Ó¿¡°Ô ¸¹Àº µµ¿òÀ»
ÁØ´Ù. Àß ÀÛ¼ºµÈ ÁÖ¼®Àº ´ÙÀ½°ú °°Àº ¿ä¼ÒµéÀ» °¡Áø´Ù.
¸î °³ÀÇ ÁÖ¼®ÈÄ¿¡ ´ÙÀ½°ú °°Àº ÁÙÀÌ µîÀåÇÑ´Ù.
ÅØ½ºÆ® ¼½¼ÇÀÌ ½ÃÀÛÇÔÀ» ¾Ë¸°´Ù. ÅØ½ºÆ® ¼½¼Ç¿¡´Â ÇÁ·Î±×·¥ ¸í·É
(¾î¼Àºí¸® Äڵ尡 À§Ä¡ÇÑ´Ù)
_start:
ÀÌÁ¦ ½ÇÁ¦ÀûÀΠĿǻÅÍ ¸í·ÉÀÌ µîÀåÇÑ´Ù. óÀ½ µîÀåÇÑ ¸í·ÉÀº
´ÙÀ½°ú °°´Ù.
ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ¾úÀ» ¶§ À̸í·ÉÀº ¼ýÀÚ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
·¹Áö½ÃÆ®·² °¡ÁöÀÖ´Ù.
À̵é gerneal-purpose ·¹Áö½ºÅÍ¿Í ÇÔ²² ¸î°³ÀÇ special-purpose
·¹Áö½ºÅ͵µ °¡Áö°í ÀÖ´Ù.
ÀÌµé ·¹Áö½ºÅÍÁß¿¡´Â %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À» ¿Ã¸®±â À§Çؼ´Â ´ÙÀ½°ú °°Àº Äڵ尡 ÇÊ¿äÇÏ´Ù.
¸®´ª½º´Â ½Ã½ºÅÛÄÝÀ» ¸¸µé±â Àü¿¡ ÀÎÀÚÀÇ °ªÀ» Àбâ À§Çؼ
·¹Áö½ºÅÍÀÇ °ªÀ» ¿ä±¸ÇÑ´Ù. %eax´Â ¾ðÁ¦³ª ½Ã½ºÅÛÄÝ ¹øÈ£¸¦ ¿Ã¸®±â
À§Çؼ »ç¿ëµÇ¸ç ÀÎÀÚ¸¦ ¿Ã¸®±â À§Çؼ ´Ù¸¥ ·¹Áö½ºÅ͵éÀ» »ç¿ëÇϰÔ
µÈ´Ù. exit ½Ã½ºÅÛÄÝ¿¡¼ º¸¸é Á¾·á »óŸ¦ ÀúÀåÇϱâ À§Çؼ
%ebx¸¦ ÇÊ¿ä·Î ÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. °¢°¢ÀÇ ½Ã½ºÅÛÄÝÀÌ ÇÊ¿ä·Î ÇÏ´Â
ÀÎÀÚÀÇ °¹¼ö°¡ ¼·Î ´Ù¸£´Ù. À̵鿡 ´ëÇÑ Á¤º¸´Â Appendix C¸¦
Âü°íÇϱ⠹ٶõ´Ù.
´ÙÀ½À¸·Î ¾Æ·¡¿Í °°Àº »ó´çÈ÷ ¼ö»óÇÑ ¸í·ÉÀÌ ³»·ÁÁø´Ù.
int ´Â C¿¡¼ Á¤¼öÇüÀ» ³ªÅ¸³»´Â int°¡ ¾Æ´Ï´Ù.
interruptÀÇ ÁÙÀÓ¸»ÀÌ´Ï È¥µ¿ÇÏÁö ¾Êµµ·Ï ÇÏÀÚ.
0x80Àº »ç¿ëÇÒ ÀÎÅÍ·´Æ®ÀÇ ¹øÈ£´Ù.
ÇÁ·Î±×·¥ÀÇ ¼öÇàÁß
interrupt°¡ °É¸®°Ô µÇ¸é
ÇÁ·Î±×·¥ÀÇ Á¦¾î°¡ Ä¿³Î·Î ³Ñ¾î°¡°Ô µÇ°í Ä¿³ÎÀº ÇÁ·Î±×·¥ÀÌ ¿äûÇÑ
½Ã½ºÅÛÄÝÀ» ¼öÇàÇÏ°Ô µÈ´Ù. À̰ÍÀº ¹èÆ®¸Ç¿¡°Ô ±¸Á¶¿äûÀ» Çϱâ À§Çؼ
½ÅÈ£¸¦ º¸³»´Â °úÁ¤°ú °°´Ù. ¿©·¯ºÐÀº Çʿ信 ÀÇÇØ¼ ¹èÆ®¸Ç¿¡°Ô
½ÅÈ£¸¦ º¸³»°í ¹èÆ®¸ÇÀº ¿©·¯ºÐÀ» ±¸Á¶ÇÏ·¯ ¿Â´Ù. ±¸Á¶°¡ µÈÈÄ¿¡´Â ?
¹°·Ð ÀÏ»ó»ýȰ·Î µÇµ¹¾Æ °¡°Ô µÉ°ÍÀÌ´Ù. ¸¶Âù°¡Áö·Î
Ä¿³ÎÀÌ ÇÊ¿äÇÑ ÀÏÀ» ¸¶Ä¡°Ô µÇ¸é Á¦¾î±ÇÀº ÇÁ·Î±×·¥À¸·Î ´Ù½Ã ³Ñ¾î
°¡°Ô µÈ´Ù. ¸¸¾à interrupt ½ÅÈ£¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é ¾î¶°ÇÑ ½Ã½ºÅÛ
Äݵµ ¼öÇàµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.
ÀÌÁ¦ ³²Àº ÀÏÀº Äڵ带 assemble½Ã۰í, ¸µÅ© ½ÃŰ°í ½ÇÇàÇÏ´Â
ÀÏÀÌ´Ù. Å×½ºÆ®¸¦ À§Çؼ ¾î¼Àºí¸® ÄÚµåÀÇ %ebx¸¦ ´Ù¸¥ °ªÀ¸·Î
¹Ù²ÛÈÄ echo $?ÀÇ Ãâ·Â°ªÀÌ º¯ÇÏ´Â°É È®ÀÎÇØ
º¸±â ¹Ù¶õ´Ù. ´ç¿¬ÇÏÁö¸¸ %ebx°ªÀ» º¯°æÇÑ´ÙÀ½¿¡´Â
assemble->¸µÅ©->½ÇÇà °úÁ¤À» °ÅÃÄ¾ß º¯°æµÈ ³»¿ëÀÌ Àû¿ëµÈ´Ù.
3.3. Planning the Program
À̹ø ÇÁ·Î±×·¥Àº Á»´õ º¹ÀâÇÑ ÀÏÀ» ÇϰԵȴÙ. ¿©·¯°³ÀÇ ¼ýÀÚ°¡
ÁÖ¾îÁö°í ÀÌÁß °¡Àå Å« ¼ýÀÚ¸¦ ã´Â ÀÏÀ» ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
ÄÄÇ»ÅÍ´Â ÇÁ·Î±×·¡¸Ó°¡ ÇÊ¿äÇÑ ¸ðµç°ÍÀ» ¼¼¹ÐÇÏ°Ô ÁöÁ¤ÇØÁà¾ß ÇÏ´Â
±â°è´Ù. ±×·¯¹Ç·Î ¿øÇϴµ¥·Î ÀÛµ¿ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱ⠿øÇÏ´Ù¸é
ÀÛ¼ºÀü¿¡ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸í¼¼¼¸¦ ¸¸µé¾î ÁÖ¾î¾ß ÇÑ´Ù.
¿ì¸®°¡ ¸¸µé°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ¸í¼¼¿¡ ´ëÇÑ Á¤Àǰ¡
ÀÖ¾î¾ß ÇÒ °ÍÀÌ´Ù.
¼ýÀÚÀÇ ¸ñ·ÏÀ» ¾îµð¿¡ ÀúÀåÇÒ °ÍÀΰ¡.
°¡Àå Å« ¼ýÀÚ¸¦ ã±â À§Çؼ ¾î¶°ÇÑ ÇÁ·Î½ÃÁ®¸¦ ÇÊ¿ä·Î Çϴ°¡.
ÇÁ·Î½ÃÁ®¸¦ ¼öÇàÇϱâ À§Çؼ ¾î´ÀÁ¤µµÀÇ °ø°£À» ÇÊ¿ä·Î Çϴ°¡
°ø°£Àº ·¹Áö½ºÅÍ¿¡¼ È®º¸ÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÒ
°ÍÀΰ¡.
¿©·¯ºÐÀº ¸î°³ÀÇ ¼ýÀÚ Áß¿¡¼ °¡Àå Å« ¼ýÀÚ¸¦ ã´Â ÀÏÀ» Çϱâ À§Çؼ
¾î¶² °èȹÀ» ¼¼¿î´Ù°Å³ª ÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ·± ÀÏÀº ±×³É ´ÚÄ¡¸é
Çѹø¿¡ ¾²À¹ º¸°í °¡Àå Å« ¼ýÀÚ¸¦ °ñ¶ó ³¾ °ÍÀÌ´Ù. ¹°·Ð ¼ýÀÚÀÇ
¸ñ·ÏÀÌ ¸¹´Ù¸é ¾à°£ÀÇ °èȹÀ» ¼¼¿ö¾ß ÇϰÚÁö¸¸ Å« ¹®Á¦°¡ µÇÁö´Â
¾ÊÀ» °ÍÀÌ´Ù - ½Ã°£ÀÌ Á» °É¸®±ä ÇϰÚÁö¸¸ -. ¿ì¸®ÀÇ µÎ³ú°¡ °æÇè°ú
ÇнÀ¿¡ ÀÇÇØ¼ °ÅÀÇ ¹Ý»çÀûÀ¸·Î ±×·¯ÇÑ ÀÏÀ» ó¸®Çϱ⠶§¹®ÀÌ´Ù.
¿©·¯°³ÀÇ ¼ýÀÚ ¸ñ·ÏÁß¿¡ °¡Àå Å« ¼ýÀÚ¸¦ ã¾Æ¾ß ÇÑ´Ù¸é, ºÐ¸í ¿©·¯ºÐÀº
¾Õ¿¡¼ ¼ýÀÚ¸¦ ÀÐ¾î °¡¸é¼ ¾ÕÀÇ ¼ýÀÚ º¸´Ù ´õ Å©´Ù¸é ±×°ÍÀ» ¸Ó¸®¿¡
»õ°Ü µÎ°í, ¸Ó¸®¿¡ »õ°ÜµÐ ¼ýÀÚ º¸´Ù ´õ Å« ¼ýÀÚ°¡ ³ª¿Â´Ù¸é ¼ýÀÚ¸¦
¹Ù²ãÄ¡±â ÇÒ °ÍÀÌ´Ù. °á±¹ ¸¶Áö¸· ¼ýÀÚ±îÁö ¸ðµÎ È®ÀÎÇÑ´Ù¸é ¸Ó¸®¿¡
³²¾Æ ÀÖ´Â ¼ö°¡ °¡Àå Å« ¼ö°¡ µÈ´Ù. ÀÌ·¯ÇÑ °úÁ¤Àº °ÅÀÇ ÀÚµ¿À¸·Î
ÀÌ·ç¾îÁø´Ù.
ÄÄÇ»ÅÍÀÇ °æ¿ì ÀÌ·¯ÇÑ °úÁ¤À» ´Ü°èº°·Î ¾Ë·ÁÁÖ¾î¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ
´Ü°è¸¦ ¸íÈ®È÷ Á¤ÀÇ Çϱâ À§Çؼ ¾à°£ÀÇ °èȹÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù.
¿ì¼± °¡Àå Å« ¼ýÀÚ¸¦ °í¸£±â À§Çؼ »ç¿ëµÉ ¼ýÀÚÀÇ ¸ñ·ÏÀÌ ÀÖÀ» °ÍÀ̸ç
ÀÌµé ¼ýÀÚÀÇ ¸ñ·ÏÀº ¸Þ¸ð¸® °ø°£¿¡ ÀúÀåµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. À̵éÀº
data_items°¡ °¡¸®Å°´Â ¸Þ¸ð¸®¿¡ ÀúÀåÇϵµ·Ï
°èȹÇϰڴÙ. ¿ì¸®´Â ¶ÇÇÑ ¼ýÀÚ¸ñ·Ï¿¡¼ ÇöÀç À§Ä¡¸¦ ÀÐ¾î ¿Ã ¼ö ÀÖ¾î¾ß
ÇÑ´Ù. ±×·¡¾ß °ËÅäÇØ¾ßÇÒ ¼ýÀÚ¸¦ ÀÐ¾î ¿Ã ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×¸®°í
°¡ÀåÅ« ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ °ø°£µµ ¸¶·ÃµÇ¾î¾ß ÇÑ´Ù. ÀÌµé ¼ýÀÚ
Á¤º¸¸¦ ÀúÀåÇϱâ À§Çؼ ´ÙÀ½°ú °°Àº ·¹Áö½ºÅ͸¦ »ç¿ëÇϵµ·Ï °èȹÇß´Ù.
%edi ´Â ¸ñ·Ï¿¡¼ ÇöÀçÀÇ À§Ä¡¸¦ ÀúÀåÇÑ´Ù.
%ebx ´Â ÇöÀç ¸ñ·Ï¿¡¼ °¡Àå Å« ¼ýÀÚ¸¦ ÀúÀåÇÑ´Ù.
%eax ´Â °ËÅäÇÒ ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§Çؼ »ç¿ëÇÑ´Ù.
ÇÑ °¡Áö ¿¹¿ÜÀûÀ¸·Î ó¸®ÇؾßÇÒ ¼ýÀÚ°¡ Àִµ¥, ¹Ù·Î ¸ñ·ÏÀÇ °¡Àå
óÀ½ °¡Á®¿Â ¼ýÀÚÀÌ´Ù. ÀÌ ¼ýÀÚ´Â ´Ù¸¥ ¾î¶² ¼ýÀڿ͵µ ºñ±³ÇÒ ¼ö
¾øÀ¸¹Ç·Î ÀÚµ¿ÀûÀ¸·Î °¡Àå Å« ¼ýÀÚ°¡ µÇ¾î¾ß ÇÒ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ
¼Õ½¬¿î ¼öÇàÀ» À§Çؼ ÇöÀç À§Ä¡°¡ °¡¸®Å°´Â ¼ýÀÚ¸¦ 0À¸·Î Çϸé
µÈ´Ù. ±×·¯¸é ¸ñ·ÏÀÇ Ã³À½ ¼ýÀÚ´Â 0°ú ºñ±³µÇ°í ÇöÀç ½ÃÁ¡¿¡¼ °¡Àå
Å« ¼ýÀÚ·Î %ebx¿¡ ÀúÀåµÉ °ÍÀÌ´Ù. ±× ´ÙÀ½¿¡´Â ¸ñ·ÏÀÇ ´ÙÀ½ ¼ýÀÚ¿Í
¹è±³ÇÏ¸é µÈ´Ù. ÀÌ·¯ÇÑ °úÁ¤À» ¼ø¼´ë·Î ±â¼úÇØ º¸µµ·Ï ÇÏÀÚ.
¸ñ·ÏÀÇ Ã³À½ ¼ýÀÚ°¡ 0ÀÎÁö È®ÀÎÇÑ´Ù.
¸¸¾à 0À̶ó¸é Á¾·á(exit)ÇÑ´Ù.
ÇöÀç À§Ä¡¸¦ 1Áõ°¡ ½ÃŲ´Ù(%edi)
´ÙÀ½ °ªÀ» ÀÐ¾î ¿Í¼ %eax ·¹Áö½ºÅÍ¿¡ °ªÀ» ÀúÀåÇÑ´Ù.
ÇöÀç °ª %eax¿Í °¡Àå Å« °ª %ebx¸¦ ºñ±³ÇÑ´Ù.
¸¸¾à ÇöÀç °ªÀÌ ÃÖ±ÙÀÇ °¡Àå Å« °ª º¸´Ù Å©´Ù¸é ÇöÀç °ªÀ»
%ebx¿¡ ÀúÀåÇÑ´Ù.
¹Ýº¹ÇÑ´Ù.
À̰ÍÀ» ÇÁ·Î½ÃÁ®(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
|
½ÇÇà ÈÄ °á°ú¸¦ È®ÀÎÇØº¸µµ·Ï ÇÏÀÚ.
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
|
ÀÌ °É·Î ÇØ¼ ¿ì¸®°¡ »ç¿ëÇÒ ¸ðµç µ¥ÀÌÅÍÀÇ Áغñ¸¦ ¸¶ÃÆÀ¸´Ï, ÀÌÁ¦ º»°ÝÀûÀ¸·Î
µ¥ÀÌÅ͸¦ ÀÌ¿ëÇØ¼ ÇÊ¿äÇÑ ÀÛ¾÷(°¡Àå Å« ¼ýÀÚ¸¦ °¡·Á³»´Â)À» ÇØ¾ß ÇÑ´Ù.
À§ Äڵ带 º¸¸é # º¯¼öµé¶ó°í µÇ¾î ÀÖ´Â ÁÖ¼®À»
º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌµé º¯¼ö´Â ÀÛ¾÷À» À§Çؼ »ç¿ëµÇ´Â µ¥ÀÌÅ͵éÀ»
ÀúÀåÇϱâ À§ÇÑ ¿ë±â·Î »ç¿ëÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº º¯¼öµéÀÌ
»ç¿ëµÈ´Ù.
ÃÖ±ÙÀÇ ÃÖ´ë°ªÀ» ÀúÀåÇϱâ À§ÇÑ º¯¼ö
¼ýÀÚ ¸ñ·Ï¿¡¼ °¡Á®¿Í¾ßÇÒ ¼ýÀÚÀÇ À§Ä¡¸¦ ÀúÀåÇϱâ À§ÇÑ º¯¼ö
¼ýÀÚ ¸ñ·Ï¿¡¼ °¡Á®¿Â ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§ÇÑ º¯¼ö
¿ì¸®°¡ ¸¸µç ÇÁ·Î±×·¥Àº ¸Å¿ì °£´ÜÇϹǷΠ´ÜÁö ¸î°³ÀÇ º¯¼ö¸¸ ÇÏ¿ëÇÏ¸é µÇ¸ç,
·¹Áö½ºÅ͸®¸¸À¸·Î ÀÌµé º¯¼ö¸¦ ´ã¾Æ³¾ ¼ö ÀÖ´Ù. ±×·¯³ª ÇÁ·Î±×·¥ÀÌ Ä¿Áö°í
°Å±â¿¡ µû¶ó¼ ´Ù·ç¾î¾ßÇÏ´Â µ¥ÀÌÅ;çÀÌ Ä¿Áú °æ¿ì ·¹Áö½ºÅ͸¸À¸·Î ¸ðµç
ÀÛ¾÷À» ÇÒ ¼ö ¾ø°Ô µÈ´Ù. ¿©±â¿¡ ´ëÇØ¼´Â ³ªÁß¿¡ ´Ù·ç°Ô µÉ°ÍÀÌ´Ù.
ÀÌ ÇÁ·Î±×·¥¿¡¼ °¡Àå Å« ¼ýÀÚ¸¦ ÀúÀåÇϱâ À§Çؼ %ebx¸¦ »ç¿ëÇß´Ù. %edi´Â
ÇöÀç °¡Á®¿Í¾ßÇÒ ¼ýÀÚÀÇ À§Ä¡(index)¸¦ ÀúÀåÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. %edi¸¦
ÀÌ¿ëÇØ¼ ¿ì¸®´Â data_items·Î ºÎÅÍ ¸î ¹øÂ° ¼ýÀÚ¸¦ Àоî¿Í¾ß ÇÒÁö¸¦
°áÁ¤ÇÒ ¼ö ÀÖ°Ô µÈ´Ù. ÇÁ·Î±×·¥ÀÌ ¸· ½ÃÀÛÇßÀ» ¶§´Â data_itemsÀÇ Ã¹¹øÂ°
¼ýÀÚ¸¦ °¡Á®¿Í¾ß µÇ¹Ç·Î %edi´Â 0ÀÌ ÀԷµȴÙ. ù¹øÂ° ¼ýÀÚ¸¦ °¡Á®¿Ô´Ù¸é
%edi¿¡´Â 1ÀÌ µé¾î°¡°í, ´ÙÀ½ ¼ýÀÚ¸¦ °¡Á®¿Ã ¶§´Â data_itemsÀÇ µÎ¹øÂ°
¼ýÀÚ¸¦ °¡Á®¿À°Ô µÈ´Ù.
%edi´Â µ¥ÀÌÅÍ ¸ñ·ÏÀÇ ¸î¹øÂ° µ¥ÀÌÅ͸¦ °¡Á®¿Í¾ß ÇÏ´ÂÁö¸¸À» ¾Ë·ÁÁÖ´Â
À妽º ÀÌ´Ù. ¿ì¸®´Â ÀÌ À妽º °ªÀ» ÀÌ¿ëÇØ¼ data_items·Î ºÎÅÍ °ªÀ»
°¡Á®¿Í¾ß Çϴµ¥ ´ÙÀ½°ú °°Àº °°´ÜÇÑ ¿¬»êÀÌ »ç¿ëµÈ´Ù.
movl data_items(,%edi,4), %eax
|
´ÙÀ½Àº ¸ñ·ÏÀ¸·Î ºÎÅÍ ¼ýÀÚ¸¦ °¡Á®¿À°í ÃÖ°í°ªÀ» ÀúÀåÇÏ´Â ·çƾÀÌ´Ù.
data_items´Â ¿ì¸®°¡ °è»ê¿¡ »ç¿ëÇÒ ¼ýÀÚ ¸ñ·ÏÀÇ
ù¹øÂ° ¼ýÀÚ¸¦ °¡¸£Å²´Ù.
¼ýÀÚ¸ñ·ÏÀÇ ¼ýÀÚµéÀº .long ÇüÀ̹ǷΠ4byteÀÇ Å©±â¸¦ Â÷ÁöÇÑ´Ù.
°¢ ¼ýÀÚ°¡ Â÷ÁöÇÏ´Â °ø°£ÀÌ 4byteÀÎ °ÍÀ» ÀÌ¿ëÇØ¼ ´ÙÀ½ ¼ýÀÚ¸¦
°¡Á®¿Ã ¼ö ÀÖ´Ù.
¿ì¸®´Â Áö±Ý ¼ýÀÚ¿Í ´ÙÀ½ ¼ýÀÚ¸¦ ºñ±³Çؼ ÃÖ°í Å« ¼ýÀÚ¸¦ ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.
°¡Àå Å« ¼ýÀÚ´Â ¿ì¸®°¡ ÁغñÇÑ ·¹Áö½ºÅÍ¿¡ º¹»çÇÑ´Ù.
´Ù½Ã óÀ½À¸·Î µÇµ¹¾Æ °£´Ù.
À§ÀÇ ·çƾÀ» º¸¸é óÀ½À¸·Î µÇµ¹¾Æ °£´Ù°í µÇ¾î ÀÖ´Ù. óÀ½À̶ó ÇÔÀº
·çÇÁÀÇ Ã³À½ÀÎ
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¹øÀ̹ǷΠ´ÙÀ½°ú °°Àº Äڵ尡 ÇÊ¿äÇÏ´Ù.
À̰ÍÀ¸·Î ¿ì¸®°¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇÑ ¸ðµç ¼³¸íÀ» ¸¶ÃÆ´Ù. ¸Å¿ì
°£´ÜÇÑ ÇÁ·Î±×·¥ÀÌ¿´Áö¸¸ »ó´çÈ÷ ¸¹Àº °ÍÀ» ¹è¿ï¼ö ÀÖ¾ú´Ù. °£´ÜÇÑ
ÇÁ·Î±×·¥ À̹ǷΠÀÌÇØ¿¡´Â Å« ¾î·Á¿òÀÌ ¾ø¾úÀ» °ÍÀÌ´Ù. ÀÌÇØ°¡ µÇÁö
¾Ê´Â ºÎºÐÀÌ ÀÖ´Ù¸é ÁÖ¼®°ú ÇÔ²² ÇÁ·Î±×·¥À» ÁÖÀÇ ±í°Ô ÀÐ¾î º¸±â
¹Ù¶õ´Ù. Á»´õ ¿Ïº®ÇÏ°Ô ÀÌÇØÇÏ°í ½Í´Ù¸é ÇÁ·Î±×·¥ÀÇ °¢ ½ºÅܺ°·Î
·¹Áö½ºÅÍÀÇ °ªÀÇ º¯È¸¦ ±â·ÏÇØ°¡¸é¼ Äڵ带 È®ÀÎÇØ º¸±â
¹Ù¶õ´Ù.
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 ¸¸ »ç¿ëÇÑ´Ù. ´ÙÀ½Àº »ç¿ë¿¹ÀÌ´Ù.
%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·Î º¹»çÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
- base-pointer addressing mode
·¹Áö½ºÅÍÁÖ¼Ò °ª¿¡ »ó¼ö°ªÀ» ´õÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â
°£Á¢ÁÖ¼Ò ÁöÁ¤¹æ½Ä°ú ¸Å¿ì ºñ½ÁÇÑ ¹æ½ÄÀÌ´Ù. ¿¹¸¦ µé¾î ´ç½ÅÀÌ
¾î¶² ·¹ÄÚµå·Î ºÎÅÍ 4¹ÙÀÌÆ®ÀÇ
- immediate mode
Immediate mode´Â ¸Å¿ì °£´ÙÇÏ´Ù. ¿øÇÏ´Â °ªÀ» ·¹Áö½ºÅͳª ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î
Á÷Á¢ ÀúÀåÇÏ´Â ¹æ½ÄÀÌ´Ù. ¿¹¸¦ µé¾î %eax¿¡ 12¶ó´Â °ªÀ» ÀúÀåÇϱ⠿øÇÑ´Ù¸é
´ÙÀ½°ú °°ÀÌ Immediate mode¸¦ ÀÌ¿ëÇØ¼ °£´ÜÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ´Ù.
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ÀÇ Ã³À½ ¹ÙÀÌÆ®¸¦ °¡¸®Å²´Ù.