Assembly ±âÃÊ ´ÙÁö±â
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

assembly ±âÃÊ´ÙÁö±â

assembly ±âÃÊ´ÙÁö±â

À±»ó¹è

dreamyun@joinc.co.kr

교정 과정
교정 0.92003³â 11¿ù 26ÀÏ 1½Ã
assembley À§Å°¿¡¼­joinc ±â»ç·Î ¿Å±è
교정 0.82003³â 11¿ù 26ÀÏ 23½Ã
ÃÖÃÊ ¹®¼­ÀÛ¼º


1절. ½ÃÀÛÇϱâ Àü¿¡

1.1절. ½ºÅ͵𸦠½ÃÀÛÇÏ°ÔµÈ ÀÌÀ¯

À¯´Ð½º ȯ°æ¿¡¼­ C¿Í C++À» ÁÖ·ÎÇØ¼­ ½Ã½ºÅÛ/³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ùº¸´Ï ¾îÂî¾îÂî ÇÏ´Ù°¡ Ä¿³Î¸ðµâ ÇÁ·Î±×·¡¹Ö°ú °°Àº ¸Å¿ì ³·Àº ¼öÁØ¿¡¼­ ÇÁ·Î±×·¡¹ÖÀ» ÇØ¾ßµÉ Çʿ伺À» ´À³¢°ÔµÇ¾ú´Ù. ¶ÇÇÑ ±»ÀÌ ±×·¯ÇÏÁö ¾Ê´õ¶óµµ À¯´Ð½ºÀÇ ½Ã½ºÅÛȯ°æÀ» Á¦´ë·Î ÀÌÇØÇϰí À̸¦ ÅëÇØ¼­ È¿°úÀûÀ̰í È¿À²ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀ» Çϱâ À§Çؼ­´Â °á±¹ ¾î¼Àºí¸®¾î¸¦ ÇØ¾ß ÇÑ´Ù´Â °á·Ð¿¡ µµ´ÞÇß´Ù. ¿¹¸¦ µé¾î ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» À§Çؼ­ º¸Åë Pthread¸¦ »ç¿ëÇϴµ¥, ´ëºÎºÐÀÇ °æ¿ì ÃæºÐÇÑ ¼º´ÉÀ» º¸¿©ÁØ´Ù. ±×·¯³ª °¡²û Pthread¸¦ ÀÌ¿ëÇÑ ¾²·¹µå »ý¼ºÀÌ ³Ê¹« ¹«°Ì´Ù°í ´À²¸Áö´Â ±×·¯ÇÑ °æ¿ìµµ ¹ß»ýÇÑ´Ù. ÀÌ·²°æ¿ì Á»´õ °¡º­¿î ¾²·¹µå¸¦ Á÷Á¢ ±¸ÇöÇØ¾ß Çϴµ¥, ¾î¼Àºí¸®¾îÀÇ È°¿ë¾øÀÌ´Â °ÅÀÇ ºÒ°¡´ÉÇÏ´Ù´Â °á·Ð¿¡ µµ´ÞÇÑ´Ù. ƯÈ÷ ¸®´ª½ºÀÇ °æ¿ì clone()¿Í ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇØ¼­ ¾²·¹µå¸¦ »ý¼ºÇϴµ¥, ¸Å¿ì ¸¹Àº ºñ¿ëÀÌ µå´Â ÀÛ¾÷ÀÌ´Ù. ÀÌ·²°æ¿ì ¾î¼Àºí¸®¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. Ä¿³Î°ü·Ã ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ À־´Â ¹°·Ð ¸¹Àº µµ¿òÀ» ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. °á·ÐÀûÀ¸·Î Ư¼öÇÑ »óȲ¿¡ ´ëóÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¡¹Ö ´É·ÂÀ» Ű¿ì·Á¸é ¾î¼Àºí¸®¾î°¡ Çʼö¶ó´Â °á·Ð¿¡ µµÂøÇÏ°Ô µÇ¾ú´Ù. ¸¸¾à ÇÊÀÚ°¡ ½Ã½ºÅÛ/³×Æ®¿öÅ© ÇÁ·Î±×·¡¸Ó°¡ ¾Æ´Ñ Á»´õ ³ôÀº ¼öÁØÀÇ ÀÀ¿ë ÇÁ·Î±×·¡¸Ó¿´´õ¶ó¸é ÀÌ·± Çʿ伺À» ´À³¢Áö ¸øÇßÀ» °ÍÀÌ´Ù(ȤÀº ¾ÆÁ÷±îÁö´Â).


2절. ¼Ò°³

2.1절. ¼ýÀÚ ½Ã½ºÅÛ(Number System)

ÄÄÇ»ÅÍ´Â ¸ðµç Á¤º¸¸¦ ¼ýÀÚ·Î ´Ù·é´Ù. ÀÌ ¶§ ÄÄÇ»ÅÍ ¸Þ¸ð¸®´Â ÀÌ·¯ÇÑ ¼ýÀÚ¸¦ 10Áø¼ö ÇüÅ·ΠÀúÀåÇÏÁö ¾Ê´Â´Ù. Çϵå¿þ¾î´Â °¡´ÉÇÏ¸é ´Ü¼øÇØ¾ß Çϴµ¥ 10Áø¼ö´Â Àΰ£¿¡°Ô´Â Ä£¼÷ÇϰÚÁö¸¸ Çϵå¿þ¾î·Î À̸¦ ´Ù·ç±â´Â ³Ê¹« º¹ÀâÇÑ ¸éÀÌ ÀÖ´Ù. ±×·¡¼­ 2Áø¼ö ÇüÅ·Π´Ù·ç°Ô µÈ´Ù. 10°³ÀÇ ½ºÀ§Ä¡¸¦ °¡Áø Çϵå¿þ¾î¿Í 2°³ÀÇ ½ºÀ§Ä¡¸¦ °¡Áø Çϵå¿þ¾î ¾î´ÀÂÊÀÌ ´õ ¼³°è°¡ ½¬¿ïÁö¸¦ »ý°¢ÇØ º¸¸é µÉ°ÍÀÌ´Ù.


2.1.1절. 10Áø¼ö

Àΰ£¿¡°Ô ¸Å¿ì Ä£¼÷ÇÑ Áø¼ö·Î½á 0-9±îÁöÀÇ 10°³ÀÇ ¼ýÀÚÀÇ Á¶ÇÕÀ¸·Î ÀÌ·ç¾îÁø´Ù. °¢ ÀÚ¸®ÀÇ °ªÀº ÀÚ¸´¼ö °öÇϱâ 10ÀÇ ÀÚ½ÂÀ¸·Î °è»êµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î 234´Â ´ÙÀ½°ú °°ÀÌ °è»êÇÒ ¼ö ÀÖ´Ù.

234 = 2x(10^2) + 3x(10^1) + 4x(10^0)
				


2.1.2절. 2Áø¼ö

binary¶ó°í Çϸç 0°ú 1 2°³ÀÇ ¼ýÀÚ¸¸ »ç¿ëµÈ´Ù. °¢ ÀÚ¸®ÀÇ °ªÀº ÀÚ¸´¼ö °öÇϱâ 2ÀÇ ÀÚ¼þÀ¸·Î °è»êµÈ´Ù. ´ÙÀ½ÀÇ ¿¹¸¦ Âü°íÇϱ⠹ٶõ´Ù.

11001 = 1x(2^4) + 1x(2^3) + 0x(2^2) + 0x(2^1) + 1x(2^0) 
      = 16 + 8 + 1
      = 25
				
À§ÀÇ ¿¹´Â 2Áø¼ö·Î Ç¥ÇöµÈ °ªÀ» 10Áø¼ö·Î º¯È¯ÇÏ´Â °úÁ¤À» º¸¿©ÁÖ°í ÀÖ´Ù. À§ÀÇ ¿¹Á¦¿¡¼­ 2Áø¼ö °ªÀÌ ¾î¶»°Ô °è»êµÇ¾îÁö´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù. ´ÙÀ½Àº 0¿¡¼­ 15±îÁöÀÇ 10Áø¼ö¸¦ 2Áø¼ö·Î º¯È¯ÇÑ °á°úÀÌ´Ù.

표 1. 10Áø¼ö¿¡¼­ 2Áø¼ö·ÎÀÇ º¯È¯

10Áø¼ö2Áø¼ö10Áø¼ö2Áø¼ö
0000081000
1000191001
20010101010
30011111011
40100121100
50101131101
60110141110
70111151111


2.1.3절. 16Áø¼ö(Hexdecimal)

16Áø¼ö´Â 0-9A-F ÀÇ 10°³ÀÇ ¼ýÀÚ¿Í 6°³ÀÇ ¿µ¹®À¸·Î °ªÀ» ³ªÅ¸³»¸ç, 2Áø¼ö¸¦ °£´ÜÇÏ°Ô Ç¥ÇöÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ¼ÖÁ÷È÷ ½ÊÁø¼ö 15¸¦ 1111·Î ³ªÅ¸³»´Â°Ç ³Ê¹« ±æ±âµµ ÇÏ°í º¹ÀâÇϱ⵵ ÇÏ´Ù. 16Áø¼ö·Î Ç¥ÇöÇÏ¸é °£´ÜÇÏ°Ô F·Î Ç¥Çö°¡´ÉÇÏ´Ù. A´Â 10À» B´Â 11À» ³ªÅ¸³»´Â ½ÄÀ¸·Î 16±îÁö Ç¥ÇöÇÑ´Ù. ´ÙÀ½Àº 16Áø¼ö¸¦ ³ªÅ¸³»´Â ¹æ¹ý¿¡ ´ëÇÑ ¿¹ÀÌ´Ù.

2BD = 2x(16^2) + 11x(16^1) + 13x(16^0)
    = 512 + 176 + 13
    = 701
				

À§ÀÇ ¿¹¸¦ º¸¸é 16Áø¼öÀÇ °ªÀÌ ¾î¶»°Ô °è»êµÇ¸ç ¾î¶»°Ô 10Áø¼ö·Î º¯È¯ÇÒ ¼ö ÀÖ´ÂÁö ¾Ë¼ö ÀÖÀ» °ÍÀÌ´Ù. À§¿¡¼­ 16Áø¼ö´Â 2Áø¼ö¸¦ °£´ÜÇÏ°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¿ëµµ·Î »ç¿ëµÈ´Ù°í ¼³¸íÇß´Ù. 2BD¸¦ 2Áø¼ö·Î º¯°æÇØ º¸¸é 1010111101Àε¥ ÀÏ´Ü ±æÀ̰¡ ±æ»Ó¸¸ ¾Æ´Ï¶ó À̰ÍÀ» ´Ù¸¥ 10Áø¼öµîÀ¸·Î º¯°æÇϱâ À§Çؼ­´Â ¿©·¯¹øÀÇ °è»ê°úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù. 16Áø¼ö´Â ´Ü 3°³ÀÇ ¼ýÀÚ¿Í ¹®ÀÚ·Î ³ªÅ¸³¾ ¼ö ÀÖÀ¸¸ç 2Áø¼ö¿¡¼­ 16Áø¼ö·Îµµ ½±°Ô º¯È¯ °¡´ÉÇÏ´Ù. 16Áø¼ö´Â (2^4)ÀÇ Å©±â¸¦ °¡Áö¹Ç·Î º¯°æÇϰíÀÚ ÇÏ´Â 2Áø¼ö¸¦ 4ÀÚ¸®¾¿ ³ª´©¾î¼­ º¯°æÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î 110000001011010011111110À̶ó´Â 2Áø¼ö°¡ ÀÖ´Ù¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ½±°Ô º¯°æ°¡´ÉÇÏ´Ù.

그림 1. 2Áø¼öÀÇ 16Áø¼ö·ÎÀÇ Ç¥Çö

À§ÀÇ ±×¸²À» º¸¸é 2Áø¼ö°ªÀ» 4bit¾¿ ³ª´©¾î¼­ Ç¥±âÇϰí Àִµ¥, À̵é 4bitÀÇ ¼ýÀÚµéÀ» nibble¶ó°í ºÎ¸¥´Ù. °¢°¢ÀÇ nibbleÀº ÇϳªÀÇ 16Áø¼ö °ªÀ¸·Î º¯°æµÈ´Ù. nibbleÀÌ 2°³ ¸ðÀ̸é byte°¡µÇ¸ç 2-digit 16Áø¼ö°¡ µÈ´Ù. byte´Â 2Áø¼ö·Î 0¿¡¼­ 11111111 ±îÁöÀ̸ç, 16Áø¼ö·Î´Â 0¿¡¼­ FF, 10Áø¼ö·Î´Â 0¿¡¼­ 255ÀÇ °ªÀ» °¡Áø´Ù.


3절. ÄÄÇ»ÅÍ ±¸Á¶

3.1절. ¸Þ¸ð¸®(Memory)

¸Þ¸ð¸®´Â µ¥ÀÌÅͰ¡ ÀúÀåµÇ´Â ¿µ¿ªÀ¸·Î byte¸¦ ±âº» ÀúÀå´ÜÀ§·Î ÇÑ´Ù. 32¸Þ°¡ ¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸®¸¦ °¡Áö°í ÀÖ´Â ÄÄÇ»ÅÍ´Â 32¹é¸¸ ¹ÙÀÌÆ®ÀÇ Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ÀúÀåµÈ Á¤º¸´Â ÇÊ¿äÇÒ ¶§ ²¨³»¿Ã ¼ö ÀÖ¾î¾ß ÇϹǷΠ¸Þ¸ð¸®´Â °¢°¢ÀÇ ¹ÙÀÌÆ® ¸¶´Ù À¯ÀÏÇÑ ÁÖ¼Ò°ªÀ» °¡Áö°í ÀÖ´Ù. ÀÌ·¯ÇÑ ÁÖ¼Ò´Â ´ÙÀ½°ú °°ÀÌ ¸Þ°ÜÁø´Ù.

그림 2. ¸Þ¸ð¸®¿¡ µ¥ÀÌÅÍ ÀúÀ广½Ä

¸Þ¸ð¸®ÀÇ ±âº»À¯´ÖÀº byteÀε¥, byte¸¸À¸·Î ¸Þ¸ð¸®´ÜÀ§¸¦ ³ªÅ¸³»±â´Â ºÎÁ·ÇÑ °¨ÀÌ ÀÖ´Ù. ±×·± ÀÌÀ¯·Î ¾Æ·¡¿Í °°ÀÌ byte¸¦ ´õ Å«´ÜÀ§·Î ¹­¾î¼­ »ç¿ëÇϰí ÀÖ´Ù.

표 2. byte ¹­À½ ´ÜÀ§

word2 bytes
double word4 bytes
quad word8 bytes
paragraph word16 bytes

¸Þ¸ð¸®¿¡ ÀúÀåµÈ ¸ðµç µ¥ÀÌÅÍ´Â ¼ýÀÚ´Ù. ¹®ÀÚÀÇ ÀúÀåÀº ¹®ÀÚÄÚµå¿Í ¸ÅÇεǴ ¼ýÀÚ¸¦ ÀÌ¿ëÇØ¼­ ÀÌ·ç¾îÁø´Ù. °¡Àå ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ¹®ÀÚÄÚµå´Â ASCII(American Standard Code for Information Interchange)´Ù. ASCIIÄÚµå´Â Ç¥ÇöÇÒ ¼ö ÀÖ´Â ¹®ÀÚÀÇ Á¾·ù°¡ Á¦ÇѵǹǷΠÃÖ±Ù¿¡´Â Unicode°¡ »ç¿ëµÇ¾îÁö°í ÀÖ´Ù. ASCIIÄÚµå·Î Ç¥½ÃÇÒ ¼ö ÀÖ´Â ¹®ÀÚÀÇ Á¾·ù°¡ Á¦ÇѵǴ ÀÌÀ¯´Â ÇϳªÀÇ ¹ÙÀÌÆ®°¡ ÇϳªÀÇ ¹®ÀÚ¿¡ ´ëÀÀµÇ±â ¶§¹®À¸·Î ¿µ¾î¿Í °°Àº ¹®ÀÚ¶ó¸é 1¹ÙÀÌÆ®·Î Ç¥Çö°¡´ÉÇÏÁö¸¸ ÇѱÛ, Çѹ®, ÀϾî¿Í °°Àº °æ¿ì Ç¥Çö°¡´ÉÇÏÁö ¾Ê±â ¶§¹®ÀÌ´Ù. À¯´ÏÄÚµå´Â ÇϳªÀÇ Ä³¸¯Å͸¦ ³ªÅ¸³»±â À§Çؼ­ 2¹ÙÀÌÆ®(¿öµå)¸¦ »ç¿ëÇϱ⠶§¹®¿¡ ÀÌµé ¹®ÀÚ¿ª½Ã Ç¥Çö°¡´ÉÇÏ´Ù.


3.2절. CPU

Áß¾Ó ¿¬»ê ÀåÄ¡(Central Processing Unit)ÀÎ CPU´Â ¿¬»ê(¸í·É)À» ÇÏ´Â ¹°¸®ÀûÀÎ ÀåÄ¡´Ù. CPU¿¡¼­ ¼öÇàÇÏ´Â ÀÌ·¯ÇÑ ¸í·ÉµéÀº º¸Åë ¸Å¿ì ´Ü¼øÇÏ´Ù - ¸¸¾à CPU¿¡¼­ º¹ÀâÇÑ ¸í·ÉµéÀ» ¼öÇàÇØ¾ß ÇÑ´Ù¸é CPUÁ¦ÀÛ¿¡ ¾öû³­ ºñ¿ëÀÌ ¼Ò¸ðµÉ °ÍÀÌ´Ù -. ÀÌ·¯ÇÑ ¸í·ÉÀ» ¼öÇàÇϱâ À§Çؼ­´Â µ¥ÀÌÅ͸¦ ÇÊ¿ä·Î Çϴµ¥ CPU´Â ÀÌ·¯ÇÑ µ¥ÀÌÅ͸¦ registerÀ̶ó°í Çϴ Ưº°ÇÑ ÀúÀå°ø°£¿¡ µ¥ÀÌÅ͸¦ ³Ö¾îµÎ°í ¿¬»êÀ» ¼öÇàÇÑ´Ù. CPU¿¡¼­ »ç¿ëÇÏ´Â register´Â ÀÏ¹Ý µ¥ÀÌÅͰ¡ ÀúÀåµÇ´Â memoryº¸´Ù ´õ ºü¸£°Ô Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

CPUÀÇ ¸í·É ¼öÇàÀº CPU¿¡ ÀÇÁ¸ÀûÀÎ ±â°è¾î(machine language)¿¡ ÀÇÇØ¼­ ÀÌ·ç¾îÁø´Ù. ±â°è¾î´Â (C, pascal °ú °°Àº)°í±Þ ¾ð¾î¿¡ ºñÇØ¼­ ¸Å¿ì ´Ü¼øÇÑ ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù. ±×·¯³ª ´Ü¼øÇÑ ±¸Á¶¸¦ °¡Áö°í ÀÖ´Ù°í ÇØ¼­ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖÀ»°Å¶ó°í »ý°¢ÇÏÁö´Â ¸¶¶ó. ±â°è¾î´Â Àΰ£ÀÌ ½±°Ô ÀÎÁöÇÒ ¼ö ÀÖ´Â ÅØ½ºÆ® Æ÷¸ËÀÌ ¾Æ´Ñ ¼ýÀÚ·Î ÀÌ·ç¾îÁ® Àֱ⠶§¹®ÀÌ´Ù. ÀÌµé ±â°è¾î´Â CPU¿¡¼­ ¸Å¿ì »¡¸® ÇØ¼®ÇÏ°í ¼öÇàÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÃÖÀûÀÇ ¼º´ÉÀ» º¸¿©ÁÖ±ä ÇϰÚÁö¸¸ Àΰ£ÀÌ ÀÌ¿ëÇϱ⠽±Áö ¾Ê´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. °Ô´Ù°¡ ÀÌµé ±â°è¾î´Â CPU¿¡ ÀÇÁ¸ÀûÀÌ¿©¼­ ´Ù¸¥ CPU¸¦ »ç¿ëÇÑ´Ù¸é ±â°è¾î ¿ª½Ã ´Þ¶óÁø´Ù.

ÄÄÇ»ÅÍ´Â CPU¸¦ ÀÌ¿ëÇÑ ¸í·ÉÀÇ ¼öÇàÀÇ µ¿±âÈ­¸¦ À§Çؼ­ clock¸¦ ÀÌ¿ëÇÑ´Ù. clockÀÇ Áøµ¿(pulse)´Â Ŭ·°¼Óµµ(clock speed)¶ó°í ºÒ¸®´Â °íÁ¤µÈ °ªÀ» °¡Áø´Ù. ´ç½ÅÀÇ ÄÄÇ»ÅͰ¡ 1.5GHz ÄÄÇ»Å͸¦ »ò´Ù¸é, ÀÌ ÄÄÇ»ÅÍ´Â 1.5GHzÀÇ Å¬·°¼Óµµ¸¦ °¡Áø´Ù´Â ¶æÀÌ´Ù.


3.2.1절. 80x86 CPU

IBMÇü½Ä PCµéÀº IntelÀÇ 80x86 CPU±ºÀ» Æ÷ÇÔÇÑ´Ù. ÀÌ CPUµéÀº ¸í·ÉÀ» ¼öÇàÇϱâ À§Çؼ­ ¸ðµÎ µ¿ÀÏÇÑ ±â°è¾î¸¦ »ç¿ëÇÑ´Ù. ¶ÇÇÑ °¡Àå ¸¹ÀÌ »ç¿ëµÇ°í Á¢Çϱ⵵ ½¬¿î CPUµé À̱⵵ ÇÏ´Ù. 80x86 CPU±º¿¡´Â ´ÙÀ½°ú °°Àº CPUµéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.

8088,8086,80286,80386,80486/Pentium/Pentium Pro/Pemtium MMX/Pentium II
				
µÚ·Î °¥¼ö·Ï ÃÖ±Ù¿¡ °³¹ßµÈ CPUÀÌ´Ù.


3.2.2절. 8086 16-bit Registers

ÀÏ¹Ý 8086 CPU´Â AX, BX, CX, DX 4°³ÀÇ 16bit register¸¦ Á¦°øÇÑ´Ù. ÀÌµé °¢°¢ÀÇ ·¹Áö½ºÅ͵éÀº 2°³ÀÇ 8bit ·¹Áö½ºÅÍ·Î ´Ù½Ã ºÐ¸®µÈ´Ù. ¿¹¸¦µé¾î AX ·¹Áö½ºÅÍÀÇ °æ¿ì ¾Æ·¡ÀÇ ±×¸²Ã³·³ AH¿Í AL·¹Áö½ºÅÍ·Î ºÐ¸®µÈ´Ù.

그림 3. 16ºñÆ® AX·¹Áö½ºÅÍ

AH·¹Áö½ºÅÍ´Â AXÀÇ »óÀ§ 8ºñÆ®¸¦ Æ÷ÇÔÇϰí AL·¹Áö½ºÅÍ´Â AXÀÇ ÇÏÀ§ 8ºñÆ®¸¦ Æ÷ÇÔÇÑ´Ù. Á¾Á¾ AH¿Í ALÀº 1¹ÙÀÌÆ® ·¹Áö½ºÅ͸®¿¡ Á¾¼ÓµÇ±âµµ ÇÑ´Ù. ÀÌµé ·¹Áö½ºÅÍ´Â µ¥ÀÌÅÍÀÇ À̵¿°ú »ê¼ö¿¬»êÀ» À§Çؼ­ ¸¹ÀÌ »ç¿ëµÈ´Ù.

¶ÇÇÑ SI¿Í DI 2°³ÀÇ 16ºñÆ® index ·¹Áö½ºÅͰ¡ ÀÖ´Ù. À̵éÀº Á¾Á¾ Æ÷ÀÎÅ͸¦ À§Çؼ­ »ç¿ëµÇÁö¸¸ À§ÀÇ ·¹Áö½ºÅ͵é°ú ¸¶Âù°¡Áö·Î µ¥ÀÌÅÍ À̵¿°ú »ê¼ö¿¬»êÀ» À§Çؼ­ »ç¿ëµÇ±âµµ ÇÑ´Ù. ±×·¯³ª 8bit·¹Áö½ºÅÍ·Î ºÐ¸®ÇÒ ¼ö´Â ¾øµµ·Ï µÇ¾î ÀÖ´Ù.

2°³ÀÇ 16ºñÆ® BP, SP ·¹À̽ºÅͰ¡ Àִµ¥ À̵éÀº ±â°è¾î ½ºÅÃ(stack)¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ °¡¸®Å°±â(pointer)À§ÇÑ ¿ëµµ·Î »ç¿ëµÈ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ³ªÁß¿¡ ´Ù·çµµ·Ï ÇϰڴÙ.

16ºñÆ® CS, DS, SS, ES ·¹Áö½ºÅÍ´Â ¼¼±×¸ÕÆ®(segment)·¹Áö½ºÅÍÀÌ´Ù. ÀÌ ·¹Áö½ºÅ͵éÀº ÇÁ·Î±×·¥ÀÇ °¢ ºÎºÐ¿¡¼­ »ç¿ëµÇ´Â µ¥ÀÌÅ͸¦ Ç¥½ÃÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù. CS´Â Code¼¼±×¸ÕÆ®¸¦ À§Çؼ­, DS´Â µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®, SS´Â ½ºÅü¼±×¸ÕÆ®, ES´Â È®Àå(Extra)¼¼±×¸ÕÆ®¸¦ Ç¥½ÃÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù.

IP(Instruction Pointer)·¹Áö½ºÅÍ´Â CS·¹Áö½ºÅÍ¿Í ÇÔ²² »ç¿ëµÇ´Âµ¥, CPU¿¡ÀÇÇØ¼­ ½ÇÇàµÇ´Â ´ÙÀ½ ¸í·ÉÀÇ ÁÖ¼ÒÀÇ °æ·Î¸¦ ¸í½ÃÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù. ÀϹÝÀûÀ¸·Î ¸í·ÉÀÌ ½ÇÇàµÇ¸é IP´Â ¸Þ¸ð¸®»óÀÇ ´ÙÀ½¿¡ ½ÇÇàµÉ ¸í·ÉÀ» °¡¸®Å²´Ù. FLAGS·¹Áö½ºÅÍ´Â ÀÌÀü¿¡ ½ÇÇàµÈ ¸í·ÉÀÇ °á°ú¸¦ ÀúÀåÇϱâ À§ÇÑ ¿ëµµ·Î »ç¿ëµÈ´Ù. ÀÌ °á°ú´Â ·¹Áö½ºÅÍ¿¡ ´ÜÀÏ ºñÆ®·Î ÀúÀåµÈ´Ù.


3.2.3절. 80386 32-bit Registers

80386°ú ÀÌ ÀÌÈÄÀÇ CPUµéÀº È®ÀåµÈ ·¹Áö½ºÅ͸¦ °¡Áö°í ÀÖ´Ù. ¿¹¸¦ µé¾î 16ºñÆ® AX·¹Áö½ºÅÍ´Â 32ºñÆ®·Î È®Àå µÇ¾ú´Ù. ±×·¯³ª ÇÏÀ§ ȣȯ¼ºÀ» À§Çؼ­ AX´Â ¿©ÀüÈ÷ 16ºñÆ® ·¹Áö½ºÅ͸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ´Ù. AX¸¦ ¿¹·Î µé¾îº¸ÀÚ¸é AX¸¦ ÀÌ¿ëÇØ¼­ 16ºñÆ® ·¹Áö½ºÅ͸¦ ¿©ÀüÈ÷ »ç¿ëµÉ¼ö ÀÖÀ¸¸ç, EAX(Extended EX)¸¦ ÀÌ¿ëÇØ¼­ 32ºñÆ® ·¹Áö½ºÅ͸¦ »ç¿ëÇÒ¼ö ÀÖ´Ù. AX¸¦ »ç¿ëÇÒ °æ¿ì EAXÀÇ ÇÏÀ§ 16ºñÆ®¸¸À» »ç¿ëÇÑ´Ù. AX¸¦ ÀÌ¿ëÇÒ °æ¿ì EAXÀÇ »óÀ§ 16ºñÆ®¸¦ »ç¿ëÇÒ ¼ö ¾ø°Ô µÈ´Ù.

¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ´Â 80386¿¡¼­µµ ¿©ÀüÈ÷ 16ºñÆ®¸¦ À¯ÁöÇϰí ÀÖÀ¸¸ç, FS¿Í GS µÎ°³ÀÇ ¼¼±×¸ÕÆ® ·¹Áö½ºÅͰ¡ ´õ Ãß°¡µÇ¾ú´Ù.


3.2.4절. Real Mode

¸®¾ó ¸ðµå¿¡¼­ ¸Þ¸ð¸®´Â 1¸Þ°¡ ¹ÙÀÌÆ®(2^20 ¹ÙÀÌÆ®)·Î Å©±â°¡ ÇÑÁ¤µÈ´Ù. ÁÖ¼Ò¿µ¿ªÀ¸·Î ³ªÅ¸³»ÀÚ¸é 0000¿¡¼­ FFFFF±îÁö°¡ µÈ´Ù. ÀÌµé ¾îµå·¹½º´Â 20bitÀÇ °ø°£À» ÇÊ¿ä·ÎÇÑ´Ù. 8086ÀÇ 16ºñÆ® ·¹Áö½ºÅÍ¿¡´Â 20ºñÆ® Á¤º¸¸¦ Áý¾î ³ÖÀ»¼ö ¾ø´Ù. ÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§Çؼ­ ÀÎÅÚÀº ÁÖ¼Ò¸¦ ³ªÅ¸³»±â À§Çؼ­ 2°³ÀÇ 16ºñÆ®¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇß´Ù. ù¹øÂ° 16ºñÆ®¿¡ ÀúÀåµÈ °ªÀº selectorÀ̶ó°í ºÎ¸¥´Ù. selector°ªÀº ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ¿¡ ÀúÀåµÈ´Ù. µÎ¹øÂ° 16ºñÆ®¿¡ ÀúÀåµÈ °ªÀº offsetÀ̶ó°í ºÎ¸£¸ç, ¹°¸®Àû ÁÖ¼Ò¸¦ ÂüÁ¶Çϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÈ´Ù. ´ÙÀ½Àº 2°³ÀÇ 16ºñÆ® °ªÀÎ selector¿Í offsetÀ» ÀÌ¿ëÇØ¼­ ÁÖ¼Ò¸¦ °è»êÇϳ»±â À§ÇÑ °ø½ÄÀÌ´Ù.

16 * selector + offset
				
¿¡¸¦ µé¾î¼­ 047C:0048ÀÇ ¹°¸®Àû ÁÖ¼Ò¸¦ ÂüÁ¶ÇؾßÇÒ °æ¿ì ´ÙÀ½°ú °°Àº °£´ÜÇÑ °è»êÀ» ÅëÇØ¼­ À§Ä¡¸¦ ãÀ» ¼ö ÀÖ´Ù.
    047C0
    +0048
   ------
    04808
				

Real ¼¼±×¸ÕÆ® ÁÖ¼Ò´Â ´ÙÀ½°ú °°Àº ´ÜÁ¡À» °¡Áø´Ù.

  • ´ÜÀÏ selector °ªÀº ´ÜÁö 64K¸Þ¸ð¸®¸¸À» ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.

  • ¸Þ¸ð¸®¿¡ ÀÖ´Â °¢ ¹ÙÀÌÆ®µéÀº À¯ÀÏÇÑ ¼¼±×¸ÕÆ® ÁÖ¼Ò¸¦ °¡Áú¼ö ¾ø´Ù. °è»ê¹æ½ÄÀÇ ¹®Á¦ ¶§¹®Àε¥ ¿¹¸¦ µé¾î 04808ÀÇ ¹°¸®Àû ÁÖ¼ÒÀÇ ÂüÁ¶´Â 047C:0048, 047D:0038, 047E::0028µî ¿©·¯°¡Áö °è»ê¿¡ ÀÇÇØ¼­ ÂüÁ¶°¡´ÉÇØ Áø´Ù. À̰ÍÀº ¼¼±×¸ÕÆ® ÁÖ¼ÒÀÇ ºñ±³¸¦ À§Çؼ­ º¹ÀâÇÑ °è»êÀÌ ÇÊ¿äÇÏ°Ô ¸¸µç´Ù.


3.2.5절. 16-bit Protected Mode

80286ÀÇ 16ºñÆ® º¸È£ ¸ðµå(protected Mode)¿¡¼­ selector °ªÀº real mode¿¡¼­¿Í´Â ´Ù¸¥ ¹æ¹ýÀ¸·Î °Ô»êµÈ´Ù. ¸®¾ó ¸ðµå¿¡¼­ selector°ªÀº ¹°¸®Àû ¸Þ¸ð¸®ÀÇ paragraph°ªÀÌ´Ù. º¸È£¸ðµå¿¡¼­ selector°ªÀº descriptor tableÀÇ index°¡ µÈ´Ù. ¾çÂÊ ¸ðµå ¸ðµÎ ÇÁ·Î±×·¥Àº ¼¼±×¸ÕÆ®¸¦ ºÐÇÒÇØ¼­ »ç¿ëÇÑ´Ù. ¸®¾ó¸ðµå ¿¡¼­ ÀÌµé ¼¼±×¸ÕÆ®´Â ¹°¸®Àû ¸Þ¸ð¸®¿¡¼­ °íÁ¤µÇ¸ç selector°ªÀº ¼¼±×¸ÕÆ®ÀÇ ½ÃÀÛÁöÁ¡À¸·Î ºÎÅÍ paragraph¼ö·Î Ç¥½ÃµÈ´Ù. º¸È£¸ðµå¿¡¼­ ¼¼±×¸ÕÆ®´Â ¹°¸®Àû ¸Þ¸ð¸®¿¡¼­ °íÁ¤µÈ À§Ä¡¿¡ ÀÖÁö ¾Ê´Â´Ù.

º¸È£¸ðµå´Â °¡»ó¸Þ¸ð¸®(virtual memory)¶ó´Â ±â¹ýÀ» ÀÌ¿ëÇÑ´Ù. °¡»ó¸Þ¸ð¸®ÀÇ ±âº»ÀûÀÎ ¾ÆÀ̵ð¾î´Â ÇÁ·Î±×·¥ÀÌ Áö±Ý ÀÌ¿ëÇÏ´Â µ¥ÀÌÅÍ¿Í Äڵ带 ¸Þ¸ð¸®¿¡ µÎ´Â °ÍÀÌ´Ù. ´Ù¸¥ µ¥ÀÌÅÍ¿Í ÄÚµå´Â ´Ù½Ã »ç¿ëµÉ¶§ ±îÁö µð½ºÅ©¿¡ ÀÓ½Ã(temporarily)·Î ÀúÀåµÈ´Ù. when a segment is returned to memory from disk, it is very likely that is will be put into a different area of memory that it was in before being moved to disk.

º¸È£¸ðµå¿¡¼­ °¢°¢ÀÇ ¼¼±×¸ÕÆ®´Â descriptor table¿¡ ÇÒ´çµÈ´Ù. ÀÌ Å×À̺íÀº ½Ã½ºÅÛÀÌ ¼¼±×¸ÕÆ®¸¦ ´Ù·ç±â À§Çؼ­ ÇÊ¿äÇÑ ¸ðµç Á¤º¸µéÀ» °¡Áö°í ÀÖ´Ù. ¿©±â¿¡´Â ¸¸¾à ¸Þ¸ð¸®¿¡ ÀÖ´Ù¸é ¸Þ¸ð¸®¿¡¼­ÀÇ ÇöÀç À§Ä¡¿Í Á¢±Ù±ÇÇÑ(Àбâ Àü¿ë°ú °°Àº)µîÀÇ Á¤º¸°¡ Æ÷ÇԵȴÙ. Å×ÀÌºí¿¡ ÀÖ´Â ¼¼±×¸ÕÆ®ÀÇ À妽º´Â selector °ªÀ¸·Î ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ¿¡ ÀúÀåµÈ´Ù.

16ºñÆ® º¸È£¸ðµåÀÇ Å« ´ÜÁ¡Àº offsetÇÒ¼ö ÀÖ´Â Å©±â°¡ 16ºñÆ®¶ó´Â Á¡ÀÌ´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î ¿©ÀüÈ÷ ¼¼±×¸ÕÆ® Å©±â´Â 64K·Î Á¦ÇѵȴÙ.


3.2.6절. 32-bit Protected Mode

83086Àº 32ºñÆ® º¸È£¸ðµå¸¦ Á¦°øÇÑ´Ù. 386 32ºñÆ®¿Í 286 16ºñÆ® º¸È£¸ðµå¿¡´Â ´ÙÀ½°ú °°Àº 2°¡ÁöÀÇ Ä¿´Ù¶õ Â÷ÀÌÁ¡À» °¡Áö°í ÀÖ´Ù.

  1. offsetÀÌ 32ºñÆ®·Î È®ÀåµÇ¾ú´Ù. ±×·¯¹Ç·Î ¼¼±×¸ÕÆ®´Â 4billion(4gigabyte)Å©±â¸¦ °¡Áú ¼ö ÀÖ´Ù.

  2. ¼¼±×¸ÕÆ®´Â page(ÆäÀÌÁö)¶ó°í ºÒ¸®¿ì´Â 4Kº¸´Ù ÀÛÀº Å©±â·Î ³ª´­¼ö ÀÖ´Ù. °¡»ó ¸Þ¸ð¸® ½Ã½ºÅÛÀº ¼¼±×¸ÕÆ® ´ë½Å ÀÌ ÆäÀÌÁö¸¦ ÀÌ¿ëÇÏ°Ô µÈ´Ù.

Windows 9X, Windows NT/200/XP, OS/2¿Í ¸®´ª½º´Â 32ºñÆ® º¸È£¸ðµå¿¡¼­ ÀÛµ¿ÇÑ´Ù. º¸È£¸ðµå¿¡ ´ëÇÑ Á»´õ ÀÚ¼¼ÇÑ ³»¿ëÀº º¸È£¸ðµå¸¦ Âü°íÇϱ⠹ٶõ´Ù.


3.2.7절. Interrupts

ÀϹÝÀûÀ¸·Î ºÃÀ» ¶§ ÇÁ·Î±×·¥ ÀÚ½ÅÀÇ ¸ÃÀº ÀÏÀ» ½ÃÀÛ ºÎÅÍ Á¾·áÇÒ ¶§±îÁö Áß´Ü ¾øÀÌ ³¡³»µµ·Ï ÇÏ´Â°Ô ¸Å¿ì °£´ÜÇØ º¸À̱ä ÇÏÁö¸¸ ÀÌ·± Àú·± ÀÌÀ¯·Î ¿ÜºÎ¿¡¼­ "Áß´Ü(Interrupts)"ÀÌ ¿äûµÇ°Ô µÈ´Ù. ¿¹¸¦ µéÀÚ¸é ¸¶¿ì½ºÀÇ ¿òÁ÷ÀÓÀÌ ÀÖÀ» ¶§ ¹ß»ýÇÏ´Â °Í°ú °°Àº ÀÎÅÍ·´Æ®·Î ¸¶¿ì½º ÀåÄ¡´Â ¸¶¿ì½º°¡ ¿òÁ÷ÀÏ ¶§ ÇöÀçÀÇ ÇÁ·Î¼¼½º¿¡ ÀÎÅÍ·´Æ®¸¦ ¹ß»ý½ÃŰ°Ô µÈ´Ù. ÀÌ·¸°Ô ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÏ°Ô µÇ¸é ÀÎÅÍ·´Æ® Çڵ鷯(''interrupt handler'')°¡ ¼öÇàµÈ´Ù. ÀÎÅÍ·´Æ® Çڵ鷯´Â ÇÁ·Î±×·¥À» ÁߴܽÃŰ´Â ·çƾÀ» ¼öÇàÇÑ´Ù.

ÀÎÅÍ·´Æ®´Â ¸¶¿ì½º¿Í °°Àº ÁÖº¯ÀåÄ¡¿¡¼­ ¹ß»ýÇÏ´Â Çϵå¿þ¾î ÀÎÅÍ·´Æ®¿Í ¼ÒÇÁÆ®¿þ¾î¿¡¼­ ÀÎÀ§ÀûÀ¸·Î ¹ß»ý½ÃŰ´Â ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍ·´Æ®°¡ Àִµ¥, ÇÕÇØ¼­ 256°¡ÁöÀÇ ÀÎÅÍ·´Æ®¸¦ °¡Áö°Ô µÇ¸ç, °¢°¢ÀÇ ÀÎÅÍ·´Æ®´Â °íÀ¯ÇÑ ¹øÈ£¸¦ °¡Áö°Ô µÈ´Ù. ÀÎÅÍ·´Æ® Çڵ鷯´Â ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇÑ ¹°¸®ÀûÀÎ ¸Þ¸ð¸®ÀÇ À§Ä¡¸¦ ±â¾ïÇϱâ À§ÇÑ ¼¼±×¸ÕÆ® ¾îµå·¹½º¸¦ Æ÷ÇÔÇÏ°Ô µÈ´Ù. ±×·¡¼­ ÀÎÅÍ·´Æ® Çڵ鷯°¡ ³¡³­ÈÄ Áß´ÜµÈ ÇÁ·Î¼¼½º¿¡¼­ ´Ù½Ã ÇÏ´ø ÀÏÀ» °è¼ÓÇϵµ·Ï Áö½ÃÇÒ ¼ö ÀÖ´Ù.

ÀÌ·¯ÇÑ ÀÎÅÍ·´Æ®ÀÇ Çൿ¹æ½ÄÀº Áö±ØÈ÷ »ó½ÄÀûÀÌ´Ù. ÀÏ»ó»ýȰ¿¡¼­ ¿ì¸®°¡ ¾÷¹«Áß¿¡ ÀüÈ­µîÀ¸·Î ÀÎÇÑ ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ»°æ¿ì ÀüÈ­¿äûÀ» ´Ù ó¸®ÇÑ´ÙÀ½ Áß´ÜµÈ ¾÷¹«ºÎÅÍ ´Ù½Ã ÀÏÀ» ½ÃÀÛÇØ ³ª°¡´Â °Í°ú ¸¶Âù°¡Áö´Ù. ÀÌ·² °æ¿ì ³»°¡ ¾îµð±îÁö ¾÷¹«¸¦ ÁøÇàÇÏ´Ù°¡ Áß´ÜÇϰí ÀüÈ­¸¦ ¹Þ¾Ò´ÂÁö¸¦ ±â¾ïÇϰí ÀÖ¾î¾ß ÇÒ°ÍÀÌ´Ù.

Çϵå¿þ¾î ÀÎÅÍ·´Æ® µéÀº CPU¿ÜÀÇ ´Ù¸¥ ÀåÄ¡µé¿¡¼­ ¹ß»ýÇÑ´Ù. Űº¸µå, µð½ºÅ© µå¶óÀ̺ê, CD-ROM, »ç¿îµå Ä«µå, ¸¶¿ì½º¿Í °°Àº ÀåÄ¡µéÀÌ ÀÌ¿¡ Æ÷ÇԵȴÙ. ³»ºÎ ÀÎÅÍ·´Æ®´Â CPU·Î ºÎÅÍ ¹ß»ýÇÏ´Â ¿î¿µ¿À·ù µîÀÌ Æ÷ÇԵȴÙ. ÀÌ·¯ÇÑ ÀÎÅÍ·´Æ®µéÀº Æ®·¦(traps)À̶ó°í ºÎ¸£±âµµ ÇÑ´Ù.

¼ÒÇÁÆ®¿þ¾î ÀÎÅÍ·´Æ® µéÀº ¸»±×´ë·Î ÇÁ·Î±×·¥¿¡¼­ Çʿ信 µû¶ó ¹ß»ý½ÃŰ´Â ÀÎÅÍ·´Æ® µé·Î °íÀ¯ÀÇ API(Application Programming Interface)¸¦ ÀÌ¿ëÇØ¼­ ¹ß»ý½ÃŲ´Ù. À¯´Ð½º¿Í À©µµ¿ìÁî °°Àº Çö´ëÀûÀÎ ´ëºÎºÐÀÇ ¿î¿µÃ¼Á¦µéÀº C·ÎµÈ ¼ÒÇÁÆ®¿þ¾î ÀÎÅÍ·´Æ® ÀÎÅÍÆäÀ̽º¸¦ °¡Áø´Ù.


3.3절. Assembly ¾ð¾î

3.3.1절. ±â°è¾î

¸ðµç CPU´Â ÀÚ½ÅÀÇ ±â°è¾î¸¸À» ÀÌÇØÇÒ¼ö ÀÖ´Ù. ±â°è¾î¿¡¼­ ¸í·ÉÀº ¸Þ¸ð¸®¿¡ ÀúÀåµÈ ÀÏ·ÃÀÇ ¼ýÀÚÀÌ¸ç °¢°¢ÀÇ ¸í·ÉÀº operation code¶Ç´Â (ÁÙ¿©¼­)opcode¶ó°í ºÒ¸®¿ì´Â À¯ÀÏÇÑ ¹øÈ£¸¦ °¡Áö°í ¼öÇàµÈ´Ù.

±â°è¾î·Î ÇÁ·Î±×·¥À» ¸¸µå´Â °ÍÀº ¸Å¿ì ¾î·Á¿î ÀÛ¾÷ÀÌ¸ç ¼ýÀÚ·ÎµÈ ¸í·É¾î ÄÚµåÀ¸ ¶æÀ» Àΰ£ÀÌ ÆÇµ¶Çϱâ À§Çؼ­´Â ´ë´ÜÇÑ Àγ»·ÂÀ» ¿ä±¸ÇÑ´Ù. ¿¹¸¦ µé¾î¼­ EAX¿Í EBX ·¹Áö½ºÅ͸¦ ´õÇØ¼­ ±× °á°ú¸¦ EXA¿¡ ÀúÀåÇÏ´Â ±â°è¾î ÄÚµå´Â ´ÙÀ½°ú °°Àº ¸ð½ÀÀ» °¡Áø´Ù.

03C3  
				
À§ÀÇ ÄÚµå´Â ¾Ë¾Æº¸±â ¸Å¿ì Èûµé´Ù. ±×·¯³ª ´ÙÇàÈ÷µµ assembler¶ó°í ºÒ¸®¿ì´Â ¾ð¾î¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¡¸Ó´Â Á»´õ ½±°Ô ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.


3.3.2절. Assembly ¾ð¾î

¾î¼Àºí¸®¾ð¾î·Î µÈ ÇÁ·Î±×·¥Àº (´Ù¸¥ °í¼öÁØ ¾ð¾îµé°ú ¸¶Âù°¡Áö·Î)¹®ÀÚ·Î ¸¸µé¾îÁö°í ÀúÀåµÈ´Ù. °¢°¢ÀÇ ¾î¼Àºí¸® ¸í·ÉÀº ÇϳªÀÇ ±â°è ¸í·ÉÀ¸·Î ÀçÇØ¼®µÈ´Ù. À§ÀÇ EAX¿Í EBX¸¦ ´õÇÏ´Â ÄÚµå´Â ¾î¼Àºí¸®¾î·Î ´ÙÀ½°ú °°ÀÌ ÄÚµùÇÒ ¼ö ÀÖ´Ù.

add eax, ebx
				
¾ð¶æ ºÁµµ ±â°è¾îº¸´Ù ÈξÀ ÀÌÇØÇϱ⠽¬¿ï °ÍÀÌ´Ù. À§¿¡¼­ add¸¦ mnemomonic¶ó°í ºÎ¸¥´Ù. ¾î¼Àºí¸®¾îÀÇ ÀϹÝÀûÀÎ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
mnemonic operand(s)
				
(assembler)¾î¼Àºí·¯´Â ¾î¼Àºí¸® ¸í·É¾îµé·Î ÀÌ·ç¾îÁø ÅØ½ºÆ®ÆÄÀÏÀ» ±â°è¾î ÄÚµå·Î º¯°æÇÏ´Â ÀÏÀ» ÇÑ´Ù. º¸Åë °í¼öÁؾð¾î¿¡¼­ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯¿Í ¸Å¿ì ºñ½ÁÇÏ´Ù. ±×·¯³ª ¾î¼Àºí·¯´Â ÀÌ·¯ÇÑ ÄÄÆÄÀÏ·¯ º¸´Ù´Â ÈξÀ´õ °£´ÜÇÏ´Ù. ¸ðµç ¾î¼Àºí¸® ¾ð¾î´Â ±â°è ¸í·ÉÀ¸·Î ÀÏ´ëÀÏ ÇØ¼®ÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. ¾Ë´Ù ½ÃÇÇ °í¼öÁØ ¾ð¾î¿¡¼­ ÀÌ·±ÀÏÀ» Çϱâ À§Çؼ­´Â ¸¹Àº ±â°è¾î ¸í·ÉµéÀ» ÇÊ¿ä·Î ÇÑ´Ù.

¾î¼Àºí¸®¿Í °í¼öÁØ ¾ð¾î¿ÍÀÇ ¶Ç´Ù¸¥ Áß¿äÇÑ Â÷ÀÌÁ¡Àº ¾î¼Àºí¸®¾ð¾îÀÇ °æ¿ì CPUÀÇ Á¾·ù¿¡ µû¶ó¼­ ¸Å¿ì ´Þ¶óÁú ¼ö ÀÖ´Ù´Â Á¢ÀÌ´Ù. ´Ù¸¥ ±¸Á¶¸¦ °¡Áö´Â ÄÄÇ»ÅͰ£ÀÇ Æ÷ÆÃÀÛ¾÷Àº °í¼öÁØ ¾ð¾î¿¡ ºñÇØ¼­ ¸Å¿ì¾î·Á¿î°Ô º¸ÅëÀÌ´Ù. ´ë°³ÀÇ °í¼öÁØ ¾ð¾îµéÀº ´ÜÁö ÄÄÆÄÀÏ·¯¸¦ Çѹø µ¹·ÁÁÖ´Â Á¤µµ·Î ÄÚµåÀÇ ¼öÁ¤¾øÀÌ Æ÷ÆÃÀÌ °¡´ÉÇÏÁö¸¸ (¿¹¸¦ µé¾î ÀÎÅÚ ¸®´ª½º¿¡¼­ ÀÛ¼ºµÈ ÄÚµå´Â °ÅÀÇ ¼öÁ¤¾øÀÌ ½ºÆÅ ¼Ö¶ó¸®½º·Î Æ÷ÆÃÀÌ °¡´ÉÇÏ´Ù) ¾î¼Àºí¸®¾ð¾îÀÇ °æ¿ì ¸¹Àº ½Ã°£°ú ³ë·ÂÀ» µé¿©¾ß ÇÑ´Ù.


3.3.3절. operandsÀÇ ¼Ò°³

±â°è ÄÚµå ¸í·ÉÀº º¯¼ö¿Í operand(ÀÌÇÏ ¿ÀÆÛ·£µå)ÀÇ Å¸ÀÔÀ¸·Î ±¸ºÐµÇ¸ç, °¢°¢ÀÇ ¸í·ÉÀº °íÁ¤µÈ ¿ÀÆÛ·£µåÀÇ ¼ýÀÚµé(0¿¡¼­ 3)À» °¡Áö°Ô µÈ´Ù. ¿ÀÆÛ·£µå´Â ¾Æ·¡¿Í °°Àº ŸÀÔµéÀ» °¡Áø´Ù.

  1. register : ÀÌ ¿ÀÆÛ·£µå´Â CPUÀÇ ·¹Áö½ºÅ͸¦ Á÷Á¢ ÂüÁ¶ÇÑ´Ù.

  2. memory : ¸Þ¸ð¸®ÀÇ µ¥ÀÌÅ͸¦ ÂüÁ¶ÇÑ´Ù.

  3. immediate : ÀÌ °íÁ¤µÈ °ªµéÀº ¸í·É ±× ÀÚ½ÅÀÇ ¸ñ·ÏÀÌ´Ù. À̰͵éÀº µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®°¡ ¾Æ´Ñ ¸í·ÉÀÚü¿¡ ÀúÀåµÈ´Ù.

  4. implied : ÀÌ ¿ÀÆÛ·£µå´Â Á¤È®ÇÏ°Ô ¸í½ÃµÇ¾î ÀÖÁö ¾Ê´Ù.


3.3.4절. ¾î¼Àºí¸®¾îÀÇ ±âº»¹®¹ý¿¡ ´ëÇØ¼­

¾î¼Àºí¸®¾îÀÇ °æ¿ì Å©°Ô Intel°ú AT&TÀÇ µÎ°¡Áö °è¿­ÀÇ ¹®¹ýÀÌ ÀÖÀ¸¸ç ¼­·Î ȣȯµÇÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î µÑÁß ÇϳªÀÇ ¹®¹ýÀ» ¼±ÅÃÇØ¾ß ÇÑ´Ù. ÇÊÀÚ´Â ¸®´ª½º °è¿­¿¡¼­ '''as'''¸¦ ÀÌ¿ëÇØ¼­ ½ºÅ͵𸦠ÇÒ »ý°¢Àε¥ as´Â AT&T¹®¹ýÀ» µû¸¥´Ù. °í·Î ¾ÕÀ¸·Î ¸ðµç ¼³¸í°ú ¿¹Á¦´Â AT&T¹®¹ýÀ» ±âÁØÀ¸·Î ÀÌ·ç¾îÁú °ÍÀÌ´Ù. AT&T¹®¹ý¿¡ ´ëÇÑ ³»¿ëÀº ´ÙÀ½ ¹®¼­¸¦ Âü°íÇϱ⠹ٶõ´Ù.

  1. linux assembly ¸Þ´º¾ó

  2. ¸®´ª½º ¾î¼Àºí¸® ȨÆäÀÌÁö

Linux¿¡¼­ as¸¦ ÀÌ¿ëÇÑ AT&A¹®¹ýÀ» ÀÌ¿ëÇÑ ¾î¼Àºí¸® ÇÁ·Î±×·¡¹ÖÀÇ °³·ÐÀûÀÎ ³»¿ëÀº Linux_asm À§Å°¸¦ ÅëÇØ¼­ ²ÙÁØÈ÷ ´Ù·ç¾î ³ª°¡µµ·Ï ÇϰڴÙ.


3.4절. ù¹øÂ° ¿¹Á¦ : hello world

# File : hello.s
# Code : sang bae Yun <yundream@joinc.co.kr>
# Date : 2003/11/23

.data
msg:
    .ascii "hello world\n"

.text
    .global _start

_start:

    movl $0,%edx    # 3¹øÂ° ¾Æ±Ô¸ÕÆ®¿¡ 0ÀÌ º¹»çµÈ´Ù.
    add  $12,%edx   # 3¹øÂ° ¾Æ±Ô¸ÕÆ®¿¡ 12°¡ º¹»çµÈ´Ù.
    movl $msg,%ecx  # 2¹øÂ° ¾Æ±Ô¸ÕÆ®¿¡ "hello world"°¡ º¹»çµÈ´Ù
    movl $1,%ebx    # ù¹øÂ° ¾Æ±Ô¸ÕÆ®¿¡ 1(stdout)ÀÌ º¹»çµÈ´Ù.
    movl $4,%eax    # sys_write ½Ã½ºÅÛÄÝ ¹øÈ£
    int  $0x80      # Ä¿³Î È£Ãâ 

    movl $1, %ebx   # exitÄÚµåÀÇ Ã¹¹øÂ° ¾Æ±Ô¸ÕÆ® Áï exitÀÇ ¸®Åϰª
    movl $1, %eax   # sys_exitÀÇ ½Ã½ºÅÛÄÝ ¹øÈ£
    int $0x80       # Ä¿³Î È£Ãâ
			
´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î as¸¦ ÀÌ¿ëÇØ¼­ object¸¦ ¸¸µé°í ld¸¦ ÀÌ¿ëÇØ¼­ ¸µÅ©½ÃÄѼ­ ½ÇÇàÆÄÀÏÀ» ¸¸µé°í Å×½ºÆ® ÇØº¼ ¼ö ÀÖ´Ù. ¸®´ª½º ½Ã½ºÅÛ ÄÝ¿¡ ´ëÇÑ ³»¿ëÀº ¸®´ª½º ½Ã½ºÅÛ ÄÝ Å×À̺íÀ» Âü°íÇϱ⠹ٶõ´Ù.
# as -o hello.o hello.s 
# ld -s -o hello hello.o
			
Å©±â¸¦ È®ÀÎÇØ º» °á°ú 396¹ÙÀÌÆ® ¿´´Ù. µ¿ÀÏÇÑ ÀÏÀ» ÇÏ´Â C¾ð¾î·Î ÄÄÆÄÀÏµÈ ½ÇÇàÆÄÀÏÀÇ Å©±â°¡ 11kÀΰͿ¡ ºñÇÏ¸é ¾öû³ª°Ô ÀÛ´Ù´Â°É ¾Ë ¼ö ÀÖ´Ù. ±×·¡µµ ½ÇÇàÆÄÀÏÀÌ Å©´Ù°í »ý°¢ÀÌ µÇ¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î Å©±â¸¦ ´õ ÁÙÀÏ ¼öµµ ÀÖ´Ù.
# strip --remove-section .comment --remove-section .bss hello 
			
ÇÊÀÚÀÇ ¸®´ª½º ¹Ú½º¿¡¼­ È®ÀÎÇØ º»°á°ú ¾à 40byteÁ¤µµ°¡ ÁÙ¾îµêÀ» È®ÀÎ Çß´Ù.

À§ÀÇ ¾î¼Àºí¸® Äڵ带 º¸¸é ¾Æ±Ô¸ÕÆ®·Î 1À» ÁÖ°í exit½Ã½ºÅÛ È£ÃâÀ» ÇßÀ½À» ¾Ë¼ö ÀÖ´Ù. Á¤¸»·Î ¿ì¸®°¡ ¿¹»óÇÑ´ë·Î 1À» ¸®ÅÏÇß´ÂÁö ´ÙÀ½°ú °°ÀÌ °£´ÜÈ÷ È®ÀÎÇØ º¸ÀÚ.

# ./hello
# echo $? 
1
#
			
±×·³ 1ÀÌ ¸®ÅÏ µÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. Âü°í·Î $?´Â bash½©¿¡¼­ °¡Àå ÃÖ±Ù¿¡ ½ÇÇà Á¾·áµÈ ÇÁ·Î±×·¥ÀÇ Á¾·á°ªÀ» Ãâ·ÂÇϴ Ư¼öº¯¼ö´Ù. È®ÀÎÀ» ¸¶ÃÆ´Ù¸é 1¿ÜÀÇ ´Ù¸¥ °ªÀ» ÁÖ°í Å×½ºÆ® ÇØº¸µµ·Ï ÇÏÀÚ.

°£´ÜÇÑ ÄÚµåÀε¥ Áö±Ý Àß ÀÌÇØ°¡ °¡Áö ¾Ê´Â´Ù°í ÇØµµ °ÆÁ¤ÇÒ °Ç ¾ø´Ù. ´ÙÀ½¹ø¿¡´Â AT&A¹®¹ýÀ» ±âÁØÀ¸·Î ÀÚ¼¼ÇÑ ¼³¸í¿¡ µé¾î°¥ °ÍÀ̱⠶§¹®ÀÌ´Ù.

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