Á¦ ¸ñ:[°­ÁÂ] ÀζóÀÎ ¾î¼Àºí¸®¸¦ ºÐ¼®ÇÏÀÚ. (2) °ü·ÃÀÚ·á:¾øÀ½ [570] º¸³½ÀÌ:Çѵ¿ÈÆ (ddoch ) 1997-02-19 02:07 Á¶È¸:1115 2.5 strcmp ¹Ù·Î ¾Õ½Ã°£ÀÇ °­Á¹°¿¡¼­ ¼öÁ¤ÇØ¾ß ÇÒ °÷ÀÌ Çϳª ÀÖ´Ù. ^^; strcatÀÇ repe/repz ¼³¸íÁß 340 ¶óÀο¡¼­ ùºÎºÐ "si°¡ °¡¸£Å°´Â ..."À» "di°¡ °¡¸£Å°´Â "À¸·Î ¼öÁ¤ÇÑ´Ù. ¸ÕÀú µé¾î°¡±â Àü¿¡ ¼Ò½º±¸¹® Áß¿¡ ºÙ¾î ÀÖ´Â "\n\t"¿¡ ´ëÇØ¼­ Àá½Ã ¤ °í ³Ñ¾î°¡ÀÚ. ÇöÀç commandsÀÇ ¿©·¯ ¶óÀεéÀº ÇϳªÀÇ ¹®ÀÚ¿­¿¡ ºÒ°úÇÏ´Ù. µû¶ó¼­, "cld" "lodsb" "jne" µîÀ¸·Î »ç¿ëÇÒ °æ¿ì ÄÄÆÄÀÏ·¯´Â "cldlodsbjne"ÀÇ ¹®ÀÚ¿­·Î ÇØ¼®ÇÒ °ÍÀÌ ´Ù. µû¶ó¼­ Á¦´ë·Î ÇØ¼®Çϵµ·Ï, "cld lodsb jne" ¿Í °°ÀÌ Àû¾îÁְųª ¾Æ·¡¿Í °°ÀÌ °¢ ¶óÀθ¶´Ù "\n\t"¸¦ ±¸ºÐÇÏ¿© Àû¾îÁÖ ´Â °ÍÀÌ ÁÁ´Ù. ÇÊÀÚ°¡ º¸±â¿¡´Â "\n\t"¿Í °°Àº °ÍÀº gcc°¡ "\n"À» ÅëÇØ ¾î¼Àºí¸® ¸í·ÉµéÀ» °¢°¢ ±¸ºÐÇϰí ÀÖ´Â °Í°°´Ù. ÀÌÁ¦ strcmpÀÇ ºÐ¼®¿¡ µé¾î°¡º¸ÀÚ. extern inline int strcmp(const char * cs,const char * ct) { register int __res; __asm__ __volatile__( "cld\n" "1:\tlodsb\n\t" "scasb\n\t" "jne 2f\n\t" "testb %%al,%%al\n\t" "jne 1b\n\t" "xorl %%eax,%%eax\n\t" "jmp 3f\n" "2:\tsbbl %%eax,%%eax\n\t" "orb $1,%%eax\n" "3:" :"=a" (__res):"S" (cs),"D" (ct):"si","di"); return __res; } * ¸ÕÀú C¿¡¼­ int·Î __res·Î Çϳª ¼±¾ðÇÑ´Ù. * À̹ø ¼Ò½º¿¡´Â outputÇʵ尡 ÀÖ´Ù. commands¿¡¼­ °è»êµÈ %%eaxÀÇ °á°ú¸¦ __res·Î ³Ñ°ÜÁÖ´Â °ÍÀÌ´Ù. strcmp¿¡¼­ÀÇ ¸®ÅϰªÀ» »ý°¢ÇÏ¸é µÈ´Ù. %%eaxÀÇ °ªÀº C¿¡¼­ ±âº»ÀûÀ¸·Î ¸®ÅϰªÀ¸·Î »ç¿ëµÇ±â ¶§¹®¿¡ C¿¡¼­ ¸®ÅÏÇü ¸¸ ¸í½ÃÇØ ÁÖ¸é ±»ÀÌ __res °°Àº °ÍÀ¸·Î outputÀ» ÇÏÁö ¾Ê´õ¶óµµ ±âº»À¸·Î ¸®ÅϵȴÙ. * input Çʵå´Â ´ÙÀ½°ú °°´Ù. movl cs, esi movl ct, edi ºñ±³ÇÒ µÎ°³ÀÇ ¹®ÀÚ¿­À» °¡¸£Å°´Â Æ÷ÀÎÅÍÀÇ °ªÀ» °¢°¢ source index¿Í dest index¿¡ ÀúÀåÇß´Ù. ¿ø·¡´Â ¸Þ¸ð¸®ÀÇ cs¸¦ 1(cs)¿Í °°Àº Çü½ÄÀ¸·Î ÂüÁ¶ÇØ¾ß ÇÏÁö¸¸ ¼³¸íÀÇ ÆíÀÇ»ó ±×³É cs¿Í °°ÀÌ Àû°Ú´Ù. * registers Çʵ带 º¸¸é si¿Í di¸¦ »ç¿ëÇÑ´Ù°í ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁÖ°í ÀÖ´Ù. À̹ø ÇÁ·Î±×·¥¿¡¼­ ax´Â °è»ê°á°úÀÇ ¸®ÅÏ ¿ëµµ·Î »ç¿ëµÇ±â ¶§¹®¿¡ ÀÌ ÇÊµå ¿¡ Æ÷ÇÔÀ» ½ÃÄѹö¸®¸é ¾Æ¸¶µµ Á¦´ë·Î µÈ °ªÀ» ¸®ÅÏÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ax ´Â C·Î ´Ù½Ã Á¦¾î±ÇÀÌ ³Ñ¾î¿Ã ¶§±îÁö ±× °ªÀÌ º¸°üµÇ¾î¾ß ÇÏ´Â µ¥ ÄÄÆÄÀÏ ·¯¿¡¼­ push, pop À» ÇÏ´Â ·çƾÀ» Áý¾î³Ö¾î ¹ö¸®¸é ¾î¶²ÀÏÀÌ »ý±æ±î? * commands ±¸¹®À» »ìÆìº¸ÀÚ. * sbb ( Subtract with Borrow ) À̹ø strcmp¿¡¼­ »õ·Ó°Ô ³ª¿Â ¸í·ÉÀÌ´Ù. À̰ÍÀÌ ¿Ö ÇÊ¿äÇÑ Áö ¾Ë¾Æº¸ÀÚ. sbb´Â op2(sbbÀÇ µÎ¹øÂ° ÀÎÀÚ)¿¡¼­ op1+cf(ij¸®Ç÷¡±×)ÀÇ °ªÀ» »«´Ù. °á °ú´Â op2¿¡ µÇµ¹·ÁÁø´Ù. sbb¸í·ÉÀº º¹¼ö¹ÙÀÌÆ®, ¿öµå, ´õºí¿öµåÀÇ »¬¼À ¿¡ »ç¿ëµÈ´Ù. op1°ú op2ÀÇ ¹ÙÀÌÆ®¼ö´Â ÀÏÄ¡ÇØ¾ß Çϸç sub¸í·É°ú µ¿ÀÏÇÏ °Ô Ç÷¡±×µéÀÌ ¼¼Æ®µÈ´Ù. Áï, ÀÛÀº ¼ö¿¡¼­ Å« ¼ö¸¦ »©¸é ÀÚ¸®¼ö¸¦ Çϳª ºô·Á¿Í¾ß Çϴµ¥, À̶§ cf°¡ 1·Î ¼¼Æ®µÈ´Ù. µû¶ó¼­ ´ÙÀ½¿¡ sbbl %%eax, %%eax°ú °°Àº °è»êÀ» Çϸé -1ÀÌ µÈ´Ù. subl %%eax, %%eax´Â 0ÀÌ µÇÁö¸¸ sbblÀ» °°Àº ÇÇ¿¬»êÀÚ¿¡ ÀÛµ¿Çϸé ÀÚ¸®³Ñ±èÀÌ ¹ß»ýÇϴ°¡ÀÇ ¿©ºÎ¿¡ µû¶ó (cfÀÇ °ª¿¡ µû¶ó) 0 À̳ª -1 ÀÌ µÇ´Â °ÍÀÌ´Ù. ÀÌÁ¦ óÀ½ºÎÅÍ »ìÆìº¸ÀÚ. * cld ·Î df¸¦ 0À¸·Î ¼³Á¤Çϰí, lodsb·Î esi(cs)°¡ °¡¸£Å°´Â °÷¿¡¼­ 1¹Ù ÀÌÆ®¸¦ al ·Î °¡Á®¿Â´Ù. * scasb ´Â edi°¡ °¡¸£Å°´Â °ª°ú alÀÇ °ªÀ» ºñ±³.°Ë»öÇÑ´Ù. °°Áö ¾Ê´Ù¸é (zf°¡ 0À̶ó¸é) 2f·Î ºÐ±âÇÑ´Ù. ºñ±³½Ã¿¡´Â al ¿¡¼­ edi°¡ °¡¸£Å°´Â °ª À» °¡»óÀûÀ¸·Î »©º¸´Â µ¥, edi°¡ ´õ Å©¼­ ÀÚ¸®³Ñ±èÀÌ ¹ß»ýÇÑ´Ù¸é cf¸¦ 1·Î ¼¼Æ®ÇÑ´Ù. µû¶ó¼­ 2f¿¡¼­ÀÇ sbbl %%eax, %%eax´Â edi°¡ °¡¸£Å°´Â °ªÀÌ ´õ Å©´Ù¸é %%eax¿¡´Â -1ÀÌ ÀúÀåµÉ °ÍÀÌ°í ±×·¸Áö ¾Ê´Ù¸é 0ÀÌ ÀúÀå µÉ °ÍÀÌ´Ù. orb $1, %%eax ÇöÀç %%eax´Â 0 (al(esi)°¡ °¡¸£Å°´Â °ªÀÌ ´õ Ŭ °æ¿ì)À̰ųª -1 (edi°¡ °¡¸£Å°´Â °ªÀÌ ´õ Ŭ °æ¿ì)Àε¥ ¿©±â¿¡ 1À» or¿¬»êÀ» ÇØº¸ÀÚ. -1ÀÏ °æ ¿ì¿¡´Â -1ÀÌ µÇ°í, 0ÀÏ °æ¿ì¿¡´Â 1ÀÌ µÈ´Ù. Çѹø ¿¬½ÀÀå¿¡ ÀûÀ¸¸é¼­ °Ë »çÇØº¸ÀÚ. À̷μ­ strcmp¿¡¼­ÀÇ cs¿Í ctÀÇ ºñ±³°¡ ÀÌ·ç¾îÁ® Å©±â°¡ cs°¡ Å©¸é 1ÀÌ , ct°¡ Å©¸é -1ÀÌ µ¹·ÁÁüÀ» ¾Ë ¼ö ÀÖ´Ù. * ¹®ÀÚ¿­ÀÌ ³¡±îÁö °°Àº °æ¿ì¸¦ º¸ÀÚ¸é, lodsb, scasb, testb, jne 1b¸¦ °ÅÃÄ ·çÇÁ¸¦ ¹Ýº¹ÇÑ´Ù. ±×·¯´Ù ¸¶Áö¸· ³Î¹®ÀÚ¸¦ ¸¸³ª¸é testb %%al, %%al·Î alÀÌ 0Àΰ¡¸¦ °Ë»çÇØ¼­ 0À̹ǷΠxorl %%eax, %%eaxÀÇ °á°ú°ªÀº 0ÀÌ µÇ¾î %%eax¿¡ ÀúÀåÀÌ µÇ°í, 3f·Î ºÐ±âÇØ¼­ Á¾·áÇÏ°Ô µÈ´Ù. * eaxÀÇ -1, 0, 1ÀÇ °è»ê°á°ú°ªÀº output Çʵ忡¼­ "=a" (__res) Ç׿¡ ÀÇÇØ __res¿¡ µÇµ¹·ÁÁø´Ù. * ¿ä¾àÇϸé, lodsb¿Í scasb·Î csÀÌ °¡¸£Å°´Â °ªÀ» ¿Å±ä alÀÇ °ª°ú ediÀÇ °ªÀ» ºñ±³ÇÏ¿© ³Î¹®ÀÚ°¡ ³ª¿Ã¶§ ±îÁö °°À¸¸é xor¿¬»êÀ¸·Î 0À», alÀÇ °ªÀÌ ´õÅ©¸é or¿¬»êÀ¸·Î 1À», edi°¡ °¡¸£Å°´Â °ªÀÌ ´õ Å©¸é -1À» µ¹·Á ÁÜÀ» ¾Ë ¼ö ÀÖ´Ù. 2.6 strncmp extern inline int strncmp(const char * cs,const char * ct,size_t count) { register int __res; __asm__ __volatile__( "cld\n" "1:\tdecl %3\n\t" "js 2f\n\t" "lodsb\n\t" "scasb\n\t" "jne 3f\n\t" "testb %%al,%%al\n\t" "jne 1b\n" "2:\txorl %%eax,%%eax\n\t" "jmp 4f\n" "3:\tsbbl %%eax,%%eax\n\t" "orb $1,%%al\n" "4:" :"=a" (__res):"S" (cs),"D" (ct),"c" (count):"si","di","cx"); return __res; } * output Çʵå´Â strcmp ¶§¿Í °°ÀÌ eaxÀÇ °è»ê°á°ú °ªÀ» __res·Î µÇµ¹¸®°í, input Çʵ忡¼­´Â Æ÷ÀÎÅÍ csÀÇ °ªÀº esi¿¡, Æ÷ÀÎÅÍ ctÀÇ °ªÀº edi¿¡, countÀÇ °ªÀº ecx¿¡ ¹Ì¸® ÀúÀåÀ» ÇÑ´Ù. registers Çʵ忡¼­µµ ¾Õ°ú ¸¶Âù °¡Áö·Î ¸®ÅϰªÀÌ µé¾î°¥ eax¸¦ Á¦¿ÜÇÑ º¯°æµÇ´Â ·¹Áö½ºÅ͵éÀÌ ÀûÇôÀÖ´Ù. * ¾Õ¼­µµ À̾߱â ÇßÁö¸¸ output, input ÀÌ commands¿¡¼­ %0, %1 µîÀ¸·Î Âü Á¶µÇ´Â ÂüÁ¶µÇ´Â ¼ø¼­´Â output, input ¼øÀÌ´Ù. * cld·Î df¸¦ 0À¸·Î Ŭ¸®¾îÇÑ´Ù. * decl %3Àº ÂüÁ¶¼ø¼­¿¡ µû¶ó decl %%ecx¿Í ¶È°°À¸¸ç °Ë»çÇÒ Ä«¿îÆ®¸¦ ÇÏ ³ª °¨¼Ò½ÃŲ´Ù. ¸¸ÀÏ À½¼öÀ̸é (sf-ºÎÈ£Ç÷¡±×-°¡ 1À̸é) js 2f±¸¹®¿¡ µû¶ó 2f·Î ºÐ±âÇÑ´Ù. ¶óº§ 2f¿¡¼­´Â eax¸¦ xor¿¬»êÀ¸·Î 0À¸·Î ¸¸µé°í 4f ·Î ºÐ±âÇÏ¿© Á¾·áÇÑ´Ù. * decl¿¡ ÀÇÇØ À½¼ö°¡ ¾Æ´Ò °æ¿ì¿¡´Â esi(cs)°¡ °¡¸£Å°´Â À§Ä¡·ÎºÎÅÍ ÇѹÙÀÌ Æ®¸¦ al·Î ¿Å°Ü (lodsb) edi(ct)°¡ °¡¸£Å°´Â À§Ä¡ÀÇ °ª°ú °¡»óÀûÀ¸·Î »© º½À¸·Î½á °°Àº°¡ °Ë»ç¸¦ ÇÑ´Ù. °°Áö ¾Ê´Ù¸é 3f·Î ºÐ±âÇÏ¿© sbbl±¸¹®°ú orb±¸¹®¿¡ ÀÇÇØ alÀÇ °ªÀÌ ´õ Å©¸é 1ÀÌ edi(ct)°¡ °¡¸£Å°´Â À§Ä¡ÀÇ °ªÀÌ ´õ Å©¸é -1ÀÌ eax¿¡ ÀúÀåµÇ¾î µÇµ¹·ÁÁø´Ù. strcmp¿¡¼­ÀÇ orb $1, %%eax º¸´Ù´Â orb %1, %%alÀÇ ±¸¹®ÀÌ Á¤È®ÇØ º¸ÀδÙ. * À§ÀÇ scasb ·Î alÀÇ °ª°ú edi(ct)ÀÇ °ªÀÌ °°´Ù¸é testb±¸¹®¿¡ ÀÇÇØ alÀÇ °ªÀÌ 0ÀÎÁö¸¦ °Ë»çÇÏ¿© 0ÀÌ ¾Æ´Ï¶ó¸é 1b·Î °¡¼­ ·çÇÁ¸¦ µ¹°í 0À̶ó¸é 2: ¿¡¼­ xor·Î eax°¡ 0À¸·Î µÇ°í 4f·Î ºÐ±âÇÏ¿© Á¾·áµÈ´Ù. * eaxÀÇ °ªÀº "=a" (__res) ±¸¹®¿¡ ÀÇÇØ __res¿¡ ÀúÀåµÇ¾î C·çƾÀ¸·Î µ¹·Á Áø´Ù. * ¿ä¾àÇϸé, decl·Î count¸¦ ¸ÕÀú 1À» »«´ÙÀ½¿¡ lodsb, scasb·Î cs¿Í ct ÀÇ ¹®ÀÚµéÀ» ºñ±³¸¦ ÇÏ¿© °°Áö ¾Ê´Ù¸é 3f¿¡¼­ -1, 1À» ±× Å©±â¿¡ µû¶ó ¹ÝȯÇϰí, °°°í ³Î¹®ÀÚ¸¦ ¸¸³ª¸é xor·Î eax°¡ 0ÀÌ µÇ¾î ¹ÝȯµÇ°í, °°°í ³Î¹®ÀÚ°¡ ¾Æ´Ï¶ó¸é ·çÇÁ¸¦ µ¹´Ù°¡ count°¡ À½¼ö°¡ µÇ¸é ³¡À» ³½´Ù. 2.7 strchr C¿¡¼­ strchrÀÇ ¿øÇüÀº ´ÙÀ½°ú °°´Ù. char *strchr(const char *s, int c); ¹®ÀÚ¿­ s¿¡¼­ ¹®ÀÚ c°¡ óÀ½À¸·Î ³ªÅ¸³ª´Â °÷ÀÇ À§Ä¡¸¦ µ¹·ÁÁÖ´Â °ÍÀÌ´Ù. ¾î¼Àºí¸® ·çƾÀ» »ìÆìº¸ÀÚ. extern inline char * strchr(const char * s, int c) { register char * __res; __asm__ __volatile__( "cld\n\t" "movb %%al,%%ah\n" "1:\tlodsb\n\t" "cmpb %%ah,%%al\n\t" "je 2f\n\t" "testb %%al,%%al\n\t" "jne 1b\n\t" "movl $1,%1\n" "2:\tmovl %1,%0\n\t" "decl %0" :"=a" (__res):"S" (s),"0" (c):"si"); return __res; } * output Àº ÀÌÀü°ú °°´Ù. * input ¿¡¼­´Â esi¿¡ sÀÇ °ªÀ» ÀúÀåÇϰí, %0¿¡ c¸¦ ÀúÀåÇÑ´Ù. ¿©±â¼­ "0"Àº commands¿¡¼­ %0À¸·Î ÂüÁ¶ÇÒ ¼ö ÀÖ´Â output ÇʵåÀÇ eaxÀÌ´Ù. Áï, eax(%0)Àº ÀԷ°ªÀ¸·Î´Â c°¡ ÀúÀåµÇ°í Ãâ·Â°ªÀ¸·Î´Â ÇØ´ç¹®ÀÚÀÇ Ã£Àº À§Ä¡(Æ÷ÀÎÅÍ)°¡ ÀúÀåµÈ´Ù. * ¸¶Âù°¡Áö·Î registers Çʵ忡¼­´Â si¸¦ ¿ì¸®°¡ »ç¿ëÇÒ °ÍÀÓÀ» ¾Ë¸°´Ù. * movb %%al, %%ah ´Â strchr¿¡¼­ ¿ì¸®°¡ ã´Â ¹®ÀÚÀÎ c°¡ al¿¡ ÀúÀåµÇ ¾î ÀÖÀ¸¹Ç·Î ah·Î ¹é¾÷À» ÇÑºÎ ÇØµÐ´Ù. * lodsb·Î esi(s)°¡ °¡¸£Å°´Â À§Ä¡·Î ºÎÅÍ ÇѹÙÀÌÆ®¸¦ Àоî¿Í¼­ al¿¡ ÀúÀåÇÑ´Ù. * cmpb %%ah, %%al ·Î ã´Â ¹®ÀÚ¿Í esi(s)°¡ °¡¸£Å°´Â °÷À¸·Î ºÎÅÍ °¡ Á®¿Â ¹®ÀÚ°¡ ÀÏÄ¡ÇÏ´Â Áö °Ë»çÇÑ´Ù. °°´Ù¸é je 2f¿¡ ÀÇÇØ movl %1, %0Àº movl %%esi, %%eax¿Í °°ÀÌ ½ÇÇàµÇ¾î ãÀº ´ÙÀ½ÀÇ À§Ä¡¸¦ eax ¿¡ ÀúÀåÇÑ´Ù. lodsb´Â esi°¡ °¡¸£Å°´Â °÷¿¡¼­ ÇѹÙÀÌÆ®¸¦ Àоî¿À°í ³­ ´ÙÀ½¿¡´Â esi¸¦ Çϳª Áõ°¡½ÃŰ´Â °ÍÀ» »ó±âÇÏÀÚ. µû¶ó¼­ decl %%eax·Î ÀÏÄ¡ÇÏ´Â ¹®ÀÚ°¡ ÀÖ´Â À§Ä¡·Î ÇÑÄ­ °¨¼Ò½ÃÄÑ¾ß ÇÑ´Ù. * cmpb¿¡¼­ ah¿Í alÀÌ °°Áö ¾Ê´Ù¸é testb ¿¡ ÀÇÇØ alÀÌ 0ÀÎÁö °Ë»çµÇ °í 0ÀÌ ¾Æ´Ï¸é 1b·Î ºÐ±âÇÏ¿© ´Ù½Ã ºñ±³·çÇÁ¸¦ ¹Ýº¹ÇÑ´Ù. ±×·¯´Ù ¸ø ã°í ³Î¹®ÀÚ¸¦ ¸¸³ª¸é jne¸¦ Áö³ª¼­ movl $1, %%esi·Î esi¿¡ 1ÀÌ ÀúÀåµÇ°í movl %1, %0 ¿¡ ÀÇÇØ esiÀÇ °ªÀÌ eax¿¡ ÀúÀåµÇ°í decl %0 À¸·Î eax°¡ Çϳª °¨¼ÒµÇ¾î 0ÀÌ µÇ°í, À̰ÍÀº ±× À¯¸íÇÑ NULLÀÌ µÈ´Ù. * °á°úÀûÀ¸·Î declÀº ´Ù¸ñÀû ¿ëµµ·Î ¾²ÀÌ´Â ¼ÀÀÌ´Ù. 2.8 strrchr C¿¡¼­ strrchrÀÇ ¿øÇüÀº ´ÙÀ½°ú °°´Ù. char *strrchr(const char *s, int c); ¹®ÀÚ¿­ s¿¡¼­ c¹®ÀÚ°¡ ¸¶Áö¸·À¸·Î ³ª¿À´Â À§Ä¡¸¦ µ¹·ÁÁÖ´Â °ÍÀÌ´Ù. ¾î¼Àºí¸® ·çƾÀ» »ìÆìº¸ÀÚ. extern inline char * strrchr(const char * s, int c) { register char * __res; __asm__ __volatile__( "cld\n\t" "movb %%al,%%ah\n" "1:\tlodsb\n\t" "cmpb %%ah,%%al\n\t" "jne 2f\n\t" "leal -1(%%esi),%0\n" "2:\ttestb %%al,%%al\n\t" "jne 1b" :"=d" (__res):"0" (0),"S" (s),"a" (c):"ax","si"); return __res; } * output Çʵ带 ¸ÕÀú º¸¸é "=d" (__res)¿¡ ÀÇÇØ edx °è»ê °á°ú°ªÀÌ __res·Î µ¹·ÁÁüÀ» ¾Ë ¼ö ÀÖ´Ù. * input Çʵ忡¼­´Â output ÇʵåÀÇ Ã¹¹øÂ° ·¹Áö½ºÅÍÀÎ edx¸¦ "0"À¸·Î ÂüÁ¶Çϰí ÀÖÀ¸¸ç ±× edx¿¡ 0À» Áý¾î³Ö°í ÀÖ´Ù. esi¿¡ s¸¦, eax¿¡ c ¸¦ ´ëÀÔÇϰí ÀÖ´Ù. ¸¶Âù°¡Áö·Î °ªÀ» µÇµ¹¸®´Â output ·¹Áö½ºÅ͸¦ Á¦¿ÜÇÑ º¯°æµÇ´Â ·¹Áö½ºÅ͸¦ ¸¶Áö¸· Çʵå registers¿¡ ¼ö·ÏÇϰí ÀÖ´Ù. * commands Çʵ忡¼­´Â ¸ÕÀú al¿¡ ÀúÀåµÈ ã´Â ¹®ÀÚ¸¦ ah·Î º¹»ç¸¦ ÇÑ ºÎ ÇØµÎ°í ÀÖ´Ù. (movb %%al, %%ah) * ±× ´ÙÀ½ lodsb·Î esi(s)°¡ °¡¸£Å°´Â °÷ÀÇ °ªÀ» Çϳª °¡Á®¿Í¼­ al¿¡ ¼ö·ÏÇÑ´Ù. * cmpb %%ah, %%al·Î Àоî¿Â ¹®ÀÚ¿Í Ã£´Â ¹®ÀÚ°¡ °°Àº Áö ºñ±³ÇÑ´Ù. * °°Áö ¾Ê´Ù¸é 2f·Î ºÐ±âÇÏ¿© Àоî¿Â ¹®ÀÚ(al)°¡ 0ÀÌ ¾Æ´Ï¶ó¸é °è¼Ó °Ë»öÇØ¾ß ÇϹǷΠ1b·Î ºÐ±âÇÏ¿© ·çÇÁ¸¦ µ·´Ù. cmpb¿¡ ÀÇÇØ °°Áö ¾Ê ¾Æ¼­ 2f·Î ºÐ±â Çߴµ¥ testb¿¡ ÀÇÇØ alÀÌ 0À̸é edxÀÇ °ªÀº º¯°æ µÇÁö ¾Ê°í 0ÀÌ µÇ¾î °á°úÀûÀ¸·Î NULL·Î __res¿¡ µÇµ¹·ÁÁø´Ù. * ¸¸ÀÏ cmpb¿¡ ÀÇÇØ ã´Â ¹®ÀÚ¿Í Àоî¿Â ¹®ÀÚ°¡ °°´Ù¸é leal -1(%%esi) ,%0°¡ ¼öÇàµÈ´Ù. -1(%%esi)´Â esi-1°ú °°´Ù. lodsb´Â Çѹø Àоî¿À °í ³­µÚ¿¡´Â esi¸¦ Çϳª Áõ°¡½ÃŰ¹Ç·Î °°´Ù°í ÆÇ´ÜµÉ °æ¿ì¿¡´Â esi ´Â ¹ú½á ´ÙÀ½À§Ä¡¸¦ °¡¸£Å°°í ÀÖÀ¸¹Ç·Î leal -1(%%esi), %0Àº leal -1(%%esi), %edx°¡ µÇ¾î °°Àº ¹®ÀÚ°¡ ÀÖ´Â À§Ä¡¸¦ edx¿¡ ¼ö·Ï ÇÑ´Ù. lea´Â mov¿Í ÀǹÌÀûÀ¸·Î´Â ºñ½ÁÇÏ´Ù. ±×·± ´ÙÀ½ testb¿¡ ÀÇ ÇØ alÀÌ 0ÀÎÁö °Ë»çÇϰí 0ÀÌ¸é ¹®ÀÚ¿­ÀÇ ³¡À̹ǷΠ¸¶Áö¸·À¸·Î Àú ÀåµÈ edxÀÇ °ªÀ» __res¿¡ µÇµ¹¸°´Ù. ¸¸ÀÏ alÀÌ 0ÀÌ ¾Æ´Ò °æ¿ì´Â ¶ó º§ 1b·Î ºÐ±âÇÏ¿© ºÒ·¯¿Í¼­ ºñ±³Çϱ⸦ ¹Ýº¹ÇÏ°í °°À» °æ¿ì´Â leal ·Î ÀÎÇØ ÀÏÄ¡ÇÑ À§Ä¡°¡ edx°¡ ¾÷µ¥ÀÌÆ® µÈ´Ù. ÀÌ·¸°Ô ÇÏ¿© ÀÏÄ¡ÇÑ ¹®ÀÚÀÇ ÃÖÁ¾ Æ÷ÀÎÅͰ¡ edx¿¡ ÀúÀåµÇ´Â °ÍÀÌ´Ù. * ¾ÆÁÖ °£°áÇÏ°Ô Àß Â¥¿©Á® À־ Á¦ ¿ªÇÒÀ» ´ÙÇϰí ÀÖÀ½À» ¾Ë ¼ö ÀÖ ´Ù. ( ´ÙÀ½ ½Ã°£¿¡ °è¼ÓµÈ´Ù. )