Á¦ 8 Àå . ¹Ýº¹ ±â¹ý -------------------------------------------------------------------------------- 8.1 ·çÇÁ(loop)¸í·É -------------------------------------------------------------------------------- ºñ±³¿Í ºÐ±â¸¦ Çϳª·Î ÇÕÃļ­ ÇѸí·ÉÀ¸·Î ÇÒ¼ö ÀÖµµ·Ï µÈ ·çÇÁ(loop),½ºÆ®¸µ(string) LOOP ¸í·É LOOP ¸í·ÉÀº CX·¹Áö½ºÅ͸¦ »¬¼À½Ä Ä«¿îÅͷμ­ »ç¿ëÇÏ°í ,CX ·¹Áö½ºÅÍ°¡ 0 ÀÌ µÉ¶§±îÁö ¾î¶² ¹®ÀåµéÀ» µÇÇ®ÀÌ ¹Ýº¹ÇÑ µÚ ÁöÁ¤ÇÑ ¶óº§·Î ºÐ±â ÇÏ´Â ¸í·ÉÀÔ´Ï´Ù.Áï, CX ¿¡ ¼³Á¤ ÇÑ È½¼ö¸¸Å­ ¹Ýº¹À» ÇϱâÀ§ÇÑ ¸í·ÉÀÎ°Í ÀÔ´Ï´Ù. LOOP¸í·ÉÀº ¿ÀÆÛ·£µå¿¡ ºÐ±âÇÏ´Â °÷ÀÇ ¶óº§À» ÁöÁ¤ÇÏ¿©, LOOP NEXT ¿Í °°Àº ½ÄÀ¸·Î »ç¿ëÇÕ´Ï´Ù.À̸í·ÉÀº Áö±Ý±îÁö ¾Ë°í ÀÖ´Â ¸í·ÉÀ» Á¶ÇÕÇÏ¿© ½ÇÇàÇÏ·Á°í Çϸé DEC CX CMP CX,0 JNE NEXT ¿Í °°ÀÌ ÇÏ¸é µË´Ï´Ù.Áï , LOOP ¸í·ÉÀº CX ·¹Áö½ºÅÍ »¬¼À¸í·É°ú ºñ±³¸í·É°ú Á¶°ÇºÐ±â ¸í·ÉÀ» ÇÑ ¸í·ÉÀ¸·Î ½ÇÇàÇÏ´Â ¸í·ÉÀÔ´Ï´Ù. ÀÌ°æ¿ì »¬¼À Ä«¿îÅͷμ­ »ç¿ëµÇ´Â °ÍÀº CX·¹Áö½ºÅÍ ¶ó°í Á¤ÇØÁ® ÀÖÀ¾´Ï´Ù.·çÇÁ¸í·ÉÀ» ½ÇÇàÇϸé CX ·¹Áö½ºÅÍ °ªÀ» Çϳª »©°í, 0 À̾ƴϸé ÁöÁ¤µÈ ¶óº§·Î ºÐ±â ÇÕ´Ï´Ù. LOOP¸í·É¿¡ ÀÇÇØ CX·¹Áö½ºÅÍ¿¡ ÁöÁ¤µÈ Ƚ¼ö¸¸Å­ ¹Ýº¹ÇÒ¼ö°¡ ÀÖÀ¾´Ï´Ù. CX ·¹Áö½ºÅÍ¿¡´Â LOOP¸í·É¿¡¼­ ÁöÁ¤ÇÏ´Â ¹Ýº¹¹üÀ§º¸´Ù ¾Õ¼­¼­ ¹Ýº¹Çϴ Ƚ¼ö¸¦ ¼³Á¤ÇØ ÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¿¹Á¦)LOOP1.ASM 1ºÎÅÍ 10H±îÁöÀÇ ¼öÄ¡¸¦ È­¸é¿¡ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ CODE SEGMENT ASSUME CS:CODE,DS:CODE ; INCLUDE PUTAL2.SUB - INCLUDEÈ­ÀÏÀÇ Àü°³ºÎºÐÀÇ ¸®½ºÆ®´Â »ý·«ÇÏ¿´´Ù. ; START: PUSH CS -+DS ¿¡ CSÀÇ °ªÀ» ÁöÁ¤ÇÔ POP DX -+ ; MOV AX,1 MOV CX,10H L1: MOV DS,AL -+ CALL PUTAL | CALL SPACE | À̹üÀ§¸¦ 10Hȸ ¹Ýº¹ÇÑ´Ù. INC AX | LOOP L1 -+ MOV AH,4CH INT 21H ; SPACE PROC NEAR - NEARÁöÁ¤Àº ¾ø¾îµµ ÁÁ´Ù. PUSH AX -+ ·¹Áö½ºÅ͸¦ ÅðÇÇ PUSH DX -+ MOV DL,' ' -+°ø¹é¹®ÀÚ¸¦ Ãâ·Â MOV AH,2 | INT 21H -+ POP DX -+ÅðÇÇÇß´ø ·¹Áö½ºÅÍ°ªÀ» ȸº¹ POP AX -+ RET SPACE ENDP ; CODE ENDS END START À§ÀÇ ÇÁ·Î±×·¥Àº ¸®½ºÆ®´Â INCLUDE È­ÀÏ ÀÌ Àü°³µÈ ºÎºÐÀº »ý·«ÇÏ°í ³ªÅ¸³½°Í ÀÔ´Ï´Ù CX·¹Áö½ºÅÍÀÇ Ãʱ⠼³Á¤Àº ·çÇÁ¹Û¿¡¼­ ¼¼Æ® LOOP¸í·ÉÀº ,±×ÀڽŠ¼Ó¿¡ CXÀÇ °ªÀ» »©´Â ¸í·ÉÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù LOOP : ¹«Á¶°Ç ÁöÁ¤µÈ Ƚ¼ö¸¦ ¹Ýº¹ LOOPE(loop while equal) ,LOOPNE(loop while not equal): ¾î¶² Á¶°ÇÀÌ ÁöÁ¤µÈ Ƚ¼ö À̳»¿¡ ¼­ ¹Ýº¹À» ³¡³¿ ÀÌ ¸í·É ¾Õ¿¡ ºñ±³¸í·É(¶Ç´Â ¿¬»ê¸í·É)À» ³õ°í ±× °á°ú°¡ °°°í ,¶ÇÇÑ CX ·¹Áö½ºÅÍÀÇ 1 ¾¿À» °ªÀ» »« °á°ú°¡ 0 ÀÌ ¾Æ´Ï¸é ¹Ýº¹ÇÏ´Â ¸í·ÉÀÔ´Ï´Ù. »óÇÑÀ» CX ȸ·Î ¼³Á¤ÇØ ³õ°í °°Áö¾ÊÀº °ÍÀÌ ³ªÅ¸³¯ ¶§±îÁö ¹Ýº¹ÇÏ´Â ¸í·ÉÀÔ´Ï´Ù. ÀÌ°ÍÀº µ¥ÀÌÅÍÀÇ ¿­Áß¿¡¼­ ¼­·Î ´Ù¸¥ µ¥ÀÌÅ͸¦ ã´Âµ¥¿¡ »ç¿ëÇÒ¼ö ÀÖÀ¾´Ï´Ù. ¿¹Á¦)LOOP2.ASM ¹®ÀÚ¿­ "_ _ _ _ _HELLO!" ÀÇ °ø¹éÀÇ °¹¼ö¸¦ ¼¼°í,¹®ÀÚ¿­ "HELLO!_ _ _"ÁßÀÇ ¿¬¼ÓµÈ ¹®ÀÚ°¹¼ö¸¦ ¼¼¾î Ãâ·ÂÇÑ´Ù. CODE SEGMENT ASSUME CS:CODE,DS:DATA INCLUDE PUTAL2.SUB -+INCLUDEÈ­ÀÏÀÇ Àü°³ºÎºÐÀº »ý·«ÇÑ´Ù. INCLUDE CRLF.SUB -+ ; SPACE EQU ' ' ; START: MOV AX,DATA MOV DS,AX ; ;COUNT SPACE LENGTH °ø¹é±æÀ̸¦ ¼¾´Ù. MOV CX,10H »óÇÑ È¸¼ö¸¦ 10Hȸ·Î °áÁ¤ÇÑ´Ù. MOV DL,0 °ø¹é¼ö¸¦ DL·¹Áö½ºÅÍ¿¡Ä«¿îÆ® MOV SI,0 ¼±µÎ¹øÁöºÎÅÍ ¸î¹ø°Àΰ¡¸¦ ³ªÅ¸³»´Â SI MOV BX,OFFSET STR1 NEXT1: INC DL INC SI SI °¡ INC SI ¿¡ ÀÇÇؼ­ 1ºÎÅÍ ½ÃÀ۵ǹǷΠMOV AL,[BX+SI-1] -- Çϳª¸¦ »©¾ßÇÑ´Ù. CMP AL,SPACE CX³»¿ë¿¡¼­ 1À» »« °á°ú 0ÀÌ¾Æ´Ñ µ¿¾È ¿©±â¼­ AL°ú LOOPE NEXT1 SPACE¿Í ºñ±³ÇÑ °á°ú °°À¸¸é NEXT1À¸·ÎºÐ±âÇÑ´Ù. DEC DL -----+ °°Áö¾ÊÀ¸¸é ¾Æ·¡·Î °è¼ÓÇÑ´Ù. MOV AL,DL --+ +--- Ä«¿îÆ®¿¡ ´õ ´õÇÑ ¸¸Å­ »«´Ù CALL PUTAL --+------ Ç¥½Ã CALL CRLF --------- ÁÙÀ» ¹Ù²Û´Ù. ; ;COUNT STRING LENGTH ¹®ÀÚ¿­°Ù¼ö¸¦ ¼¾´Ù MOV CX,10H MOV DL,-1 ÃʱⰪÀ» -1·Î Çϴ°ÍÀº MOV SI,-1 0FFFFH¼¼Æ®ÇÏ´Â °Í NEXT2: INC DL INC SI MOV AL,[BX+SI] CMP AL,SPACE -+ CX¸¦ 1°¨¼Ò½ÃÄ×À» ¶§ 0ÀÌ ¾Æ´Ñ¹üÀ§ ³»¿¡¼­ AL¿Í LOOPNE NEXT2 -+ SPACE°¡ °°Áö ¾ÊÀ¸¸é NEXT2·Î ºÐ±âÇÏ¿© ¹®ÀÚ °¹¼ö MOV AL,DL ¸¦ ¼¾´Ù. CALL PUTAL --- Ç¥½Ã CALL CRLF ÁÙÀ» ¹Ù²Û´Ù. ; MOV AH,4CH INT 21H ; CODE ENDS DATA SEGMENT STR1 DB HELLO!' ;¼±µÎ°¡ °ø¹éÀÎ ¹®ÀÚ STR2 DB 'HELLOW! ' ;¼±µÎºÎÅÍ ¹®ÀÚ°¡ µé¾îÀÖ´Â ¹®ÀÚ DATA ENDS END START LOOP ¸í·É°ú Ç÷¹±× ·¹Áö½ºÅÍ: LOOP ¸í·É, LOOPE¸í·É,LOOPNE¸í·ÉÀº ¸ðµÎ CX ·¹Áö½ºÅ͸¦ Ä«¿îÅÍ·Î ÇÏ°í Çѹø ½ÇÇàÇÒ¶§ ¸¶´Ù CX ·¹Áö½ºÅÍ °ªÀ» Çϳª ¾¿ °ªÀ» »©°í ÀÖÀ¾´Ï´Ù.±×·¯³ª ¿©±â¿¡¼­ CX ·¹Áö½ºÅÍ °ª À» »¬¶¼´Â ,°á°ú°¡ ¹«¾ùÀÌµç »ó°ü¾øÀÌ Ç÷¡±× ·¹Áö½ºÅÍÀÇ °ªÀº º¯È­ÇÏÁö ¾Ê½À´Ï´Ù. Áï, LOOP¸í·ÉµîÀÇ ½ÇÇà ÈÄ Ç÷¡±× ·¹Áö½ºÅÍÀÇ °ªÀº ¾ÕÀÇ ¿¬»ê°á°ú¸¦ À¯ÁöÇÏ°í ÀÖÀ¾´Ï ´Ù.µû¶ó¼­ LOOP ¸í·É ÁßÀÇ CX ·¹Áö½ºÅ͸¦ »©´Â ¸í·ÉÀº ´Ü¼øÇÑ DEC ¸í·É°ú ġȯÇÒ¼ö´Â ¾øÀ¾´Ï´Ù.(DEC ¸í·É¿¡¼­´Â CFÀÌ¿ÜÀÇ ·¹Áö½ºÅÍ°¡ º¯È­ÇÑ´Ù.). LOOP¸í·É,LOOPE¸í ·É,LOOPNE ¸í·ÉÀ» ÀÌÇظ¦ µ½±â À§Çؼ­ ´Ù¸¥ ¸í·ÉÀ¸·Î ġȯ ÇÑ´Ù¸é ´ÙÀ½°ú°°ÀÌ µË´Ï´Ù. LOOP¸í·É LOOPE¸í·É, LOOPNE¸í·ÉµéÀÇ ¶È°°Àº ±â´ÉÀ» ´Ù¸¥ ¸í·ÉÀ¸·Î ġȯ +-------------------------------------------------------+ | LOOP L1 LOOPE L1 LOOPNE L1 | | | | PUSHF PUSHF PUSHF | | DEC CX JNZ EXIT JZ EXIT | | JE EXIT DEC CX DEC CX | | JZ EXIT JZ EXIT | | POPF POPF POPF | | JMP L1 JMP L1 JMP L1 | | EXIT:POPF EXIT:POPF EXIT:POPF | +-------------------------------------------------------+ ¿©±â¼­ PUSHF ´Â Ç÷¡±× ·¹Áö½ºÅÍ(flag register)¸¦ ½ºÅÿ¡ ÅðÇǽÃŵ´Ï´Ù. 8.2 ½ºÆ®¸µ(string) ¸í·É -------------------------------------------------------------------------------- ¿¬¼ÓÇÑ µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ¸í·É(5Á¾·ù) ¹®ÀÚ¿­°ú °°Àº ¿¬¼ÓÇÑ µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ¸í·ÉÀÔ´Ï´Ù. ¸®ÇÇÆ® ÇÁ¸®ÇȽº(repeat prefix) ¸í·É°ú Á¶ÇÕÇÏ¿© »ç¿ëÇÔÀ¸·Î½á ,ÇѸí·ÉÀ¸·Î ´ë·®ÀÇ µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ¼ö ÀÖ´Â ÀÌÁ¡ÀÌ ÀÖÀ¾´Ï´Ù. ½ºÆ®¸µ ¸í·É +-----------+-------+-------------------+-------+------------------------+ | | | ¹ÙÀÌÆ® ´ÜÀ§ | | ¿öµå ´ÜÀ§ | +-----------+-------+-------------------+-------+------------------------+ |Àü¼Û ¸í·É±º| LODSB | ¸Þ¸ð¸® ->AL | LODSW | ¸Þ¸ð¸® -> AX | | | STOSB | AL ->¸Þ¸ð¸® | STOSW | AX -> ¸Þ¸ð¸® | | | MOVSB | ¸Þ¸ð¸® ->¸Þ¸ð¸® | MOVSW | ¸Þ¸ð¸® -> ¸Þ¸ð¸® | +-----------+-------+-------------------+-------+------------------------+ |ºñ±³ ¸í·É±º| SCASB | ¸Þ¸ð¸® ALÀÇ ºñ±³ | SCASW | ¸Þ¸ð¸®¿Í AXÀÇ ºñ±³ | | | CMPSB | ¸Þ¸ð¸®³¢¸®ÀÇ ºñ±³ | CMPSW | ¸Þ¸ð¸®¿Í ¸Þ¸ð¸®ÀÇ ºñ±³ | +-----------+-------+-------------------+-------+------------------------+ ¸®ÇÇÆ® ÇÁ¸®ÇȽº ¸í·É +-------------+-------+--------------------------------------------------------+ | Àü¼Û ¸í·É±º | REP | CX ·¹Áö½ºÅÍ¿¡ ÁÖ¾îÁø Ƚ¸¸Å­,´ÙÀ½ÀÇ ½ºÆ®¸µ ¸í·ÉÀ» ¹Ýº¹ | +-------------+-------+--------------------------------------------------------+ | ºñ±³ ¸í·É±º | REPE | ºñ±³°á°ú°¡ 0 ¹× CX·¹Áö½ºÅÍ¿¡ ÁÖ¾îÁø Ƚ¼ö À̳»ÀÌ¸é ´Ù | | | REPZ | À½ÀÇ ½ºÆ®¸µ ¸í·ÉÀ» ¹Ýº¹ÇÑ´Ù. | | +-------+--------------------------------------------------------+ | | PEPNE | ºñ±³°á°ú°¡ 0ÀÌ ¾Æ´Ï°í CX·¹Áö½ºÅÍ¿¡ ÁÖ¾îÁø Ƚ¼ö À̳»ÀÌ| | | PEPNZ | ³» ÀÌ¸é ´ÙÀ½ÀÇ ½ºÆ®¸µ ¸í·ÉÀ» ¹Ýº¹ÇÑ´Ù. | +-------------+-------+--------------------------------------------------------+ ½ºÆ®¸µ ¸í·É¿¡¼­´Â ¸Þ¸ð¸®ÀÇ ¹øÁö¸¦ ÁöÁ¤ÇÏ´Â ¹æ¹ýÀÌ Á¤ÇØÁ® ÀÖ°í,¶ÇÇÑ µ¥ÀÌÅ͸¦ Àд ¹æ¹ý°ú ¾²´Â ¹æ¹ýÀÌ Â÷ÀÌ°¡ ÀÖÀ¾´Ï´Ù. *.µ¥ÀÌÅ͸¦ Àо¶§...DS ³»ÀÇ [SI]·Î Ç¥½ÃµÇ´Â ¹øÁöÀÇ ³»¿ëÀ» Àо´Ù. *.µ¥ÀÌÅ͸¦ ½á³ÖÀ»¶§...ES ³»ÀÇ [DI]·Î Ç¥½ÃµÇ´Â ¹øÁöÀÇ µ¥ÀÌÅ͸¦ ½á³Ö´Â´Ù. +----------+ | DS:[SI] +-----+ LODS¸í·É +----------+ \|/ +-----------------+ MOVS¸í·É | AX ȤÀº AL | (CMP¸í·É) +-----------------+ | +----------+ | STOS¸í·É | ES:[DI] +<----+ ( SCAS ¸í·É) +----------+ »ç¿ëÇÏ´Â ¹øÁöµµ ¹ÙÀÌÆ® ´ÜÀ§¸é AL, ¿öµå ´ÜÀ§À̸é AX ·ÎÁ¤ÇØÁ® ÀÖÀ¾´Ï´Ù.µû¶ó¼­ ½ºÆ® ¸µ ¸í·ÉÀ» »ç¿ëÇϱâ Àü¿¡´Â ÇÊ¿äÇÑ ·¹Áö½ºÅÍ(DS,ES,SI,DI,CX)ÀÇ Ãʱ⼳Á¤À» ÇÏÁö¾ÊÀ¸ ¸é ¾ÈµÇ´Â ´ë½Å¿¡,¸í·ÉÀÚü´Â ¿ÀÆÛ·£µå¸¦ °¡ÁöÁö ¾Ê°í ´Ü¼øÈ÷ LODSB MOVSW ¿Í °°Àº ½ÄÀ¸·Î ´Ü¼øÇÏ°Ô »ç¿ëÇÒ¼ö°¡ ÀÖÀ¾´Ï´Ù. ´Ü,½ºÆ®¸µ ¸í·ÉÀº Àü¼ÛÀ̳ª ºñ±³ µîÀ» ÇàÇÑ ´ÙÀ½,¹øÁöÁöÁ¤¿¡ »ç¿ëµÇ¾î SIȤÀº DI·¹Áö ½ºÅÍÀÇ °ªÀ» ÀÚµ¿ÀûÀ¸·Î 1(¹ÙÀÌÆ® ´ÜÀ§À϶§) ¶Ç´Â 2(¿öµå ´ÜÀ§À϶§) ¸¸Å­ Áõ°¡½Ãŵ´Ï ´Ù. ÀÌ°ÍÀº ´ÙÀ½¹øÁöÀÇ µ¥ÀÌÅ͸¦ Àü¼Û ¶Ç´Â ºñ±³ÇϱâÀ§ÇÑ ÁغñÀÌ°í,½ºÆ®¸µ ¸í·ÉÀ» ¿¬ ¼ÓÇÏ¿© »ç¿ë ÇÔÀ¸·Î½á ¿¬¼ÓµÈ ¹øÁö¿¡ ³õ¿©Áø µ¥ÀÌÅ͸¦ Àü¼Û ¶Ç´Â ºñ±³ÇÒ¼öÀÖÀ¾´Ï´Ù. (µð·º¼Ç Ç÷¹±×°ªÀÌ 1 À϶§´Â ,SI, DI °©Àº °¨¼Ò µÈ´Ù.) LOOP ¸í·ÉÀ» »ç¿ëÇϱâ À§ÇØ,ÆíÀÇ»ó ¹Ì¸® CX ¿¡ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ³Ö¾îµÎÁö ¾ÊÀ¸¸é ¾ÈµË ´Ï´Ù. ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ °è»êÇϱâÀ§ÇÏ¿© ¿øÇÏ´Â ¹®ÀÚ¿­ÀÇ ´ÙÀ½¿¡ ´õ¹Ì(dummy) º¯¼ö MSG2¸¦ ³õ¾Æ¼­ µÎ °³ÀÇ ¿ÀÇÁ¼Â ¹øÁöÀÇ Â÷¸¦ ÃëÇÕ´Ï´Ù. OFFSET MSG2-OFFSET MSG ÀÌ¿Í °°ÀÌ ¸ÅÅ©·Î ¾î¼Àºí¿¡¼­´Â ¹øÁöµîÀÇ µ¡¼À »¬¼ÀÀ» ¼Ò½º ÇÁ·Î±×·¥ Áß¿¡ ¾µ¼ö°¡ ÀÖ À¾´Ï´Ù. ÀÌ ¹æ¹ýÀº Á¤¼®À¸·Î µÇ¾î ÀÖÀ¾´Ï´Ù. LOODSB¸í·ÉÀº ,µ¥ÀÌÅ͸¦ Àü¼ÛÇÑ´ÙÀ½ SI °ªÀ» Çϳª Áõ°¡ ½ÃÅ°¹Ç·Î, ÇÑ ¹®ÀÚ Ãâ·ÂÇÑ ´Ù À½ LOOP¸í·ÉÀ¸·Î µ¹¾Æ¿Í¼­ ´Ù½Ã LODSB ¸í·ÉÀ» ½ÇÇàÇÏ°Ô µÇ¸é, SI ´Â ¾Õ¿¡ Ãâ·ÂÇÑ ¹®ÀÚ °¡ ÀÖ´Â ¹øÁöÀÇ ´ÙÀ½ ¹øÁö¸¦ ³ªÅ¸³»°í ÀÖÀ¾´Ï´Ù.(¿¬¼Ó¹®ÀÚ Ãâ·Â°¡´É) STOS¸í·É ¸Þ¸ð¸®·Î ºÎÅÍ ¸Þ¸ð¸®·Î µ¥ÀÌÅÍ Àü¼Û LODS ¿Í STOS¸¦ Á¶ÇÕÇÏ´Â ¹æ¹ý ,MOVS ¸¦ »ç¿ëÇÏ´Â ¹æ¹ý, ¿¹Á¦)MOVS2.ASM MSG1¿¡µé¾î ÀÖ´Â ½ºÆ®¸µ FUNCTION 09H:DISPLAY STRING À» MSG2·Î Àü¼ÛÇÏ´Â Æã¼Ç 9 ¸¦ È£ÃâÇÏ¿© Ãâ·ÂÇÑ´Ù. CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA ; START: MOV AX,DATA MOV DS,AX MOV ES,AX ; MOV CX,OFFSET MSG2-OFFSET MSG1 MOV SI,OFFSET MSG1 MOV DI,OFFSET MSG2 CLD ;DIÀÇ Áõ°¡ ¼³Á¤ NEXT: LODSB ;DS:[SI]·Î Á¤ÇØÁö´Â ¹øÁö¸Þ¸ð¸® ³»¿ëÀ» ES:[DI]·Î STOSB ;Á¤ÇØÁö´Â ¸Þ¸ð¸®¿¡ Àü¼ÛÇÑ´Ù.´Ü,¹®ÀÚ¿­ÀÇ ±æÀÌ(CX) ¸¸Å­ LOOP NEXT MOV BYTE PTR ES:[DI],'$' MOV DX,OFFSET MSG2 MOV AH,9H INT 21H ; CODE ENDS DATA SEGMENT MSG1 DB 'FUNCTION 09H:DISPLAY STRING' MSG2 DB 20H DUP (?) DATA ENDS END START LODSBÀÇ ½ÇÇàÈÄ SIÀÇ °ªÀÌ Çϳª Áõ°¡ÇÏ°í,STOSBÀÇ ½ÇÇàÈÄ DI ÀÇ °ªÀÌ Çϳª Áõ°¡, 2 °³ÀÇ ¸í·É¿¡ LOOP ¸í·ÉÀ» ´õÇÔÀ¸·Î½á ¿¬¼ÓÇÑ µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ¼ö°¡ ÀÖÀ¾´Ï´Ù. MOVS ¸í·É: À§ÀÇ LODS ¸í·É°ú STOS ¸í·ÉÀ» MOVS ¸í·ÉÀ¸·Î ġȯ CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA ; START: MOV AX,DATA MOV DS,AX ;DS¼³Á¤ MOV AX,EXTRA ;µ¶¸³µÈ ESÀÇ ¼³Á¤ÀÌ ÇÊ¿ä MOV ES,AX ; CLD ;DIÀÇ Áõ°¡ ¼³Á¤ MOV DX,5 ;5¹ø µÇÇ®ÀÌ MOV DI,OFFSET MSG2 NEXT2: MOV CX,OFFSET DMSG - OFFSET MSG1 MOV SI,OFFSET MSG1 NEXT: MOVSB ;CXÀÇ °ªÀÌ 0ÀÌ µÉ¶§ ±îÁö MSG1¹øÁöºÎÅÍ ½ÃÀÛÇÏ´Â ½ºÆ®¸µ LOOP NEXT ;À» MSG2 ¹øÁöÀ§Ä¡ºÎÅÍ ¿Å°Ü ³õ´Â´Ù. DEC DX ;DX ¿¡¼­ 1À» »©¶ó JNZ NEXT2 ;0 ÀÌ ¾Æ´Ï¸é NEXT2·Î °¡¶ó. MOV BYTE PTR ES:[DI],'$' ;¸Þ¸ð¸®¿¡ $(¹®ÀÚ¿­ ³¡Ç¥½Ã)¸¦ ³Ö´Â´Ù. MOV AX,ES MOV DS,AX ;Æã¼ÇÈ£Ãâ 9¹øÀÇ ¾Õ¿¡´Â DSÀÇ ¼³Á¤ÀÌ ÇÊ¿ä MOV DX,OFFSET MSG2 MOV AH,9H ;DX¿¡ ÁöÁ¤µÈ ¹øÁöºÎÅÍ ÀúÀåµÈ ½ºÆ®¸µÀ» $ ÀÚ°¡ ³ªÅ¸ INT 21H ;³¯¶§±îÁö Ãâ·ÂÇÏ´Â ½Ã½ºÅÛ Æã¼Ç È£Ãâ. MOV AH,4CH INT 21H ; CODE ENDS ; DATA SEGMENT MSG1 DB 'REPEAT SAME MESSAGE 5 TIMES!' DMSG DB ? DATA ENDS ; EXTRA DB 100H DUP (?) EXTRA ENDS END START 8.3 ¸®ÇÇÆ® ÇÁ¸®ÇȽº(1) -------------------------------------------------------------------------------- ¸®ÇÇÆ® ÇÁ¸®ÇȽº ¸í·ÉÀº ½ºÆ®¸µ ¸í·É°ú Á¶ÇÕÇÏ¿© »ç¿ëÇÏ°í ,½ºÆ®¸µ ¸í·ÉÀ» ÀÏÁ¤ Ƚ¼ö ¿¬¼ÓÇÏ¿© »ç¿ë ÇÏ´Â°Í ÀÔ´Ï´Ù. REP MOVSB -+- +----->ÀÌ°ÍÀÌ ¸®ÇÇÆ® ÇÁ¸®ÇȽºÀÌ´Ù. CX ¿¡ ÁöÁ¤µÈ Ƚ¼ö¸¸Å­ MOVSB¸¦ µÇÇ®ÀÌ Ç϶ó´Â ÀÇ»ç¸í·É ¸®ÇÇÆ® ÇÁ¸®ÇȽº´Â ½ºÆ®¸µ ¸í·É ¾Õ¿¡ ³õ°í,½ºÆ®¸µ ¸í·ÉÀÇ ±â´É È®ÀåÀ» ÁöÁ¤ ¿©±â¼­ STOSB -->B´Â ¹ÙÀÌÆ®¸¦ ³ªÅ¸³¿ STOSW -->W´Â ¿öµå¸¦ ³ªÅ¸³¿ µû¶ó¼­ AX ¿¡ AB °¡ µé¾î À־ STOSB´Â B ¸¸À» ³ªÅ¸³½´Ù. AX ·¹Áö½ºÅÍ¿¡ 'AB'¸¦ ´ëÀÔÇÏ°í ÀÖÀ¸¹Ç·Î, AL ·¹Áö½ºÅÍÀÇ ³»¿ëÀº 'B'=42H°¡ µË´Ï´Ù. ¿öµå´ÜÀ§ÀÇ ½ºÆ®¸µ ¸í·ÉÀ» »ç¿ëÇÑ °æ¿ì¿¡´Â 20H °³ÀÇ ¹ÙÀÌÆ® ÀÇ µ¥ÀÌÅÍ°¡ Àü¼ÛµË´Ï´Ù. ÀÌ°ÍÀ» ½ÇÇàÇϸé A>MOVS5 BABABABABABABABABABA AX·¹Áö½ºÅÍÀÇ °ª 'AB' °¡ ¸Þ¸ð¸® »ó¿¡ Àü¼Ûµ¹ °æ¿ì¿¡´Â ¿ª¿öµå(reverse word)Çü½ÄÀ¸·Î µÇ±â ¶§¹®¿¡ ,'BA' ¼ø¼­·Î µÇ¾î¹ö¸° Á¡¿¡ ÁÖÀÇ ÇϽʽÿä. REP ¸í·ÉÀº Á¶ÇÕÇÏ´Â ½ºÆ®¸µ ¸í·ÉÀÌ ¹ÙÀÌÆ® ÇüÀΰ¡ ¿öµå ÇüÀΰ¡¿¡ µû¶ó¼­ Àü¼ÛµÇ´Â ¹Ù ÀÌÆ® ¼ö´Â ´Þ¶óÁý´Ï´Ù. ¿¹¸¦µé¸é 20H ¹ÙÀÌÆ®ÀÇ µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ¶§¿¡ MOVSB¸í·ÉÀ» »ç¿ë¤©ÇÑ´Ù°í Çϸé CX ·¹Áö ½ºÅÍÀÇ ÃʱâÄ¡¸¦ 20H·Î ,MOVSW¸í·ÉÀ» »ç¿ëÇÑ´Ù°í Çϸé CX ·¹Áö½ºÅÍÀÇ ÃʱâÄ¡¸¦ 10H ·ÎÇÏÁö ¾ÊÀ¸¸é ¾ÈµÉ°ÍÀÔ´Ï´Ù. Àü¼ÛÇÏ´Â µ¥ÀÌÅÍÀÇ ¼ö°¡ Ȧ¼ö ¹ÙÀÌÆ® À϶§¿¡´Â ¿öµåÇüÀÇ ½ºÆ®¸µ¸í·ÉÀ» »ç¿ëÇÏ¸é ¸¶Áö ¸· µ¥ÀÌÅÍ°¡ Àü¼ÛµÇ´Ï ¾Ê´Â´ÙµçÁö ,¿©ºÐÀÇ µ¥ÀÌÅÍ ±îÁö Àü¼Û µÈ´ÙµçÁö ÇÏ´Â ÀÏÀÌ ÀÖÀ¸ ¹Ç·Î ÁÖÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù. ¹Ì¸® µ¥ÀÌÅͼö¸¦ ¾Ë°úÀÖ´Â °æ¿ì´Â ±¦ÂùÁö¸¸ °æ¿ì¿¡µû¶ó Àü ¼ÛÇÏ´Â µ¥ÀÌÅͼö°¡ º¯È­ ÇÒ¶§¿¡´Â ¹ÙÀÌÆ® ÇüÀÇ ½ºÆ®¸µ ¸í·ÉÀ» »ç¿ëÇÏ´Â ÂÊÀÌ ¾ÈÀü ÇÕ ´Ï´Ù. 8.4 ºñ±³¸í·É±ºÀÇ »ç¿ë¹ý -------------------------------------------------------------------------------- ¸Þ¸ð¸®¿Í ·¹Áö½ºÅÍÀÇ °ªÀ» ºñ±³ÇÏ´Â SCAS¸í·É, ¸Þ¸ð¸®³¢¸®ÀÇ °ªÀ» ºñ±³ÇÏ´Â CMPS¸í·É SCAS¸í·É AL ·¹Áö½ºÅÍÀÇ °ª°ú ES:[DI]¿¡ ÀÇÇØ Ç¥½ÃµÇ´Â ¸Þ¸ð¸®ÀÇ ³»¿ëÀ» ºñ±³ ¸î¹ø ¹Ýº¹Çߴ°¡¸¦ ¾Ë±âÀ§Çؼ­ , ¿ø·¡ÀÇ CX°ªÀ» º¸Á¸Çصξî,·çÇÁ¿¡¼­ ºüÁ®³ª¿Â ÈÄÀÇ CX °ªÀ» »©¸é µÈ´Ù. ¹®ÀÚ¿­±æÀÌÀÇ °è»ê : STR2 - STR1 OFFSET STR2 - OFFSET STR1 °ú ¿ÏÀüÈ÷ °°Àº ¿ªÈ°À» ÇÕ´Ï´Ù. À̰͵µ ÇϳªÀÇ Á¤¼®À¸·Î¼­ ¿Ü¿öµÎ½Ê½Ã¿ä CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ; INCLUDE PUTAL2.SUB START: MOV AX,CODE ; MOV DS,AX MOV ES,AX ;DS¿Í ES ÀÇ ¼³Á¤ CLD ;DI ÀÇ Áõ°¡ ¼³Á¤ MOV AL,'&' ;¹®ÀÚ¿­ Áß¿¡¼­ ã´Â¹®ÀÚ MOV DI,OFFSET STR1 MOV CX,STR2-STR1 ; ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ °è»êÇÏ·Á¸é PUSH CX ;OFFSET À» »ý·«Çصµ ÁÁ´Ù. NEXT: SCASB------------+ÀÏÄ¡ÇÏ´Â ¹®ÀÚ°¡ Àִ°¡ ã´Â´Ù. JE FOUND |(ALÀÇ°ª°ú ES:[DI]·Î ÁöÁ¤µÈ ¸Þ¸ð¸® ³»¿ë°ú ³»¿ëÀ» ºñ±³ÇÑ LOOP NEXT --+ ´Ù,±×¸®°í ÀÚµ¿ÀûÀ¸·Î DI´Â Áõ°¡ CX ´Â °¨¼ÒÇÑ´Ù.) JMP NOTFOUND FOUND: DEC DI MOV DX,OFFSET FOUNDMSG1 MOV AH,9 INT 21H MOV AX,DI --+- ¹ß°ßÇÑ ¹øÁö¸¦ Ç¥½Ã MOV AL,AH | CALL PUTAL | MOV AX,DI | CALL PUTAL --+ MOV DX,OFFSET FOUNDMSG2 MOV AH,9 INT 21H POP AX --+¹®ÀÚ¿­ÀÇ ±æÀÌ-»¬¼À Ä«¿îÅÍ¿¡ ÀÇÇØ ¸î¹ø° ¹®ÀÚ¿¡¼­ SUB AX,CX | ¹ß°ßµÇ¾ú´ÂÁö¸¦ °è»êÇÏ¿© Ç¥½Ã CALL PUTAL --+ JMP EXITP NOTFOUND: MOV DX,OFFSET NOTFOUNDMSG MOV AH,9 INT 21H EXITP: MOV AH,4CH INT 21H ; FOUNDMSG1 DB 'FOUND ADDRESS = $' FOUNDMSG2 DB 'H COUND = $' NOTFOUNDMSG DB 'NOT FOUND $' STR1 DB 'ABCDEFG&ABC' STR2 DB ? CODE ENDS END STRAT CMPS ¸í·É : 2°³ÀÇ µ¥ÀÌÅÍ¿­ÀÌ °°Àº°¡ ´Ù¸¥°¡¸¦ ºñ±³Çϴµ¥ »ç¿ëÇÕ´Ï´Ù. DS:[SI]°¡ ÁöÁ¤ÇÏ´Â ¸Þ¸ð¸® ÇÑ ¹ÙÀÌÆ® ³»¿ë°ú ES:[DI]°¡ ÁöÁ¤ÇÏ´Â ¸Þ¸ð¸® ÇÑ ¹ÙÀÌÆ® ³»¿ëÀ» ºñ±³ÇÏ´Â ¸í·ÉÀÌ´Ù. CMPSB¸í·ÉÀ» Çϸé SI,DIÀÇ°ªÀÌ ÀÚµ¿ÀûÀ¸·Î Çϳª¸¸Å­ Áõ°¡ ÇÑ´Ù´Â Á¡ÀÔ´Ï´Ù. ¿¹Á¦)CMPS2.ASM ¸Þ¸ð¸® ¹øÁö CMP-STRING ºÎÅÍ ÀúÀåµÇ¾î ÀÖ´Â "ABC" ¹®ÀÚ¿Í Å°º¸µå·Î ºÎÅÍ ÀÔ·ÂÇÏ¿© ¸Þ¸ð¸® ¹øÁö BUFFºÎÅÍ ÀúÀåµÈ ¹®ÀÚ ½ºÆ®¸µ ¼Ó¿¡ °°Àº "ABC" °¡ ¸î ¹ø° ±ÛÀÚºÎÅÍ ÀÖ ´Â°¡ ¾Ë¾Æ ³½´Ù. CODE SEGMENT ASSUME CS:CODE,DS:CODE,ES:CODE ; INCLUDE CRLF.SUB INCLUDE PUTAL2.SUB START: MOV AX,CS MOV DS,AX MOV ES,AX CLD MOV DX,OFFSET OPENING_MSG CALL DISP CALL CRLF MOV DX,OFFSET MAX_CHARS -+¸®ÅÍÅ°°¡ ´­¸±¶§±îÁö Å°º¸µå·ÎºÎÅÍ ÀÔ·ÂµÈ MOV AH,0AH |½ºÆ®¸µÀ» ¿¬¼ÓÀûÀ¸·Î BUFF¼Ó¿¡ ÀúÀåÇÏ°í ÃÑ INT 21H -+ÀÔ·ÂµÈ ¹®ÀÚ°¹¼ö¸¦ CHARS-ENTERED¿¡ ÁöÁ¤ÇÏ CALL CRLF ´Â ½Ã½ºÅÛ Æã¼Ç A ¹øÀÌ´Ù. MOV CH,0 MOV CL,CHARS_ENTERED MOV BP,OFFSET BUFF DEC BP INC CX NEXT: DEC CX CMP CX,3 JB NOTFOUND INC BP MOV DI,BP MOV SI,OFFSET CMP_STRINGS CMPSB <---+DS:[SI]·Î ÁöÁ¤µÇ´Â ¸Þ¸ð¸®³»¿ë°ú ES:[DI] ·Î ÁöÁ¤µÇ´Â JNE NEXT |¸Þ¸ð¸® ³»¿ëÀ» ºñ±³ÇÑ´Ù.ºñ±³ÇÑÈÄ,ÀÚµ¿ÀûÀ¸·Î DI,SI°ª CMPSB <---+À» Áõ°¡½ÃÄÑ ´ÙÀ½°ÍÀ» ºñ±³ÇÑ´Ù. JNE NEXT | CMPSB <---+ JNE NEXT MOV DX,OFFSET FOUND_MSG1 CALL DISP -+¸î¹ø° ¹®ÀÚ¿¡¼­ ¹ß°ßµÇ¾ú´ÂÁö¸¦°è»êÇ¥½Ã MOV AL,CHARS_ENTERED | SUB AL,CL -+ CALL PUTAL JMP EXITP NOTFOUND: MOV DX,OFFSET NOTFOUND_MSG CALL DISP EXITP: MOV AH,4CH INT 21H DISP PROC MOV AH,09H INT 21H RET DISP ENDP OPENING_MSG DB 'INPUP STRINGS INCLUDE' $' FOUND_MSG1 DB 'FOUND CHARACTERS AT $' NOTFOUND_MSG DB 'NOT FOUND $' MAX_CHARS DB 80 CHARS_ENTERED DB ? BUFF DB 80H DUP (0) +-->ÃÖ´ë ÀԷ°¡´É ¹®ÀÚ °¹¼ö(CRÆ÷ÇÔ):1¹ÙÀÌÆ® +--+---------+---------+----------------------+ | | | ¹öÆÛ --+-->ÀÔ·ÂµÈ ½ÇÁö ¹®ÀÚ°¡ µé¾î°¡´Â°÷ +------------+--+------+----------------------+ +---->½ÇÁ¦·Î ÀÔ·ÂµÈ ¹®ÀÚ°¹¼ö(CRÆ÷ÇÔÇÏÁö ¾ÊÀ½) : 1¹ÙÀÌÆ® CMP_STRINGS DB 'ABC'------>ºñ±³´ë»óÀ̵Ǵ ¹®ÀÚ¿­ CODE ENDS END START À§¹®Á¦´Â »ó´çÈ÷ ³í¸®°¡ ¾î·Á¿î ¹®Á¦ÀÔ´Ï´Ù.±×·¯³ª ²ÙÁØÈ÷ ÃßÀûÇسª°¡¸é °ð ÀÌÇØÇÒ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.±×·¯³ª ÀÌ ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ ÀÌÇØÇß´Ù¸é ¾î¼Àºí¸® ¾ð¾îÀÇ »ó´çÇÑ ¼öÁØ À» ÆľÇÇÏ°Ô µÈ¼ÀÀÌ¸ç ¾ÕÀ¸·Î ¾î¶² º¹ÀâÇÑ ¾î¼Àºí¸® ¾ð¾î ÇÁ·Î±×·¥µµ ÀÌÇØ ÇÒ¼öÀÖ´Â ´É·ÂÀÌ »ý±ä °ÍÀÔ´Ï´Ù.