http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1140 [º¹»ç]
Á¦ 7 Àå . ¹Ýº¹ ±â¹ý
--------------------------------------------------------------------------------
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'
<ABC> $'
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
À§¹®Á¦´Â »ó´çÈ÷ ³í¸®°¡ ¾î·Á¿î ¹®Á¦ÀÔ´Ï´Ù.±×·¯³ª ²ÙÁØÈ÷ ÃßÀûÇسª°¡¸é °ð ÀÌÇØÇÒ¼ö
ÀÖÀ» °ÍÀÔ´Ï´Ù.±×·¯³ª ÀÌ ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ ÀÌÇØÇß´Ù¸é ¾î¼Àºí¸® ¾ð¾îÀÇ »ó´çÇÑ ¼öÁØ
À» ÆľÇÇÏ°Ô µÈ¼ÀÀÌ¸ç ¾ÕÀ¸·Î ¾î¶² º¹ÀâÇÑ ¾î¼Àºí¸® ¾ð¾î ÇÁ·Î±×·¥µµ ÀÌÇØ ÇÒ¼öÀÖ´Â
´É·ÂÀÌ »ý±ä °ÍÀÔ´Ï´Ù.
°øºÎÇÒ‹š ¾µ·Á´ø°Å ´Ù Æۿ°ſ¹¿ä ¤»¤»...
Àç°¡ º¸¸é¼ ÇÔ Çغ¼·ÁÇÞ´õ´Ï ¾ÆÁ÷ Àú°¡ Á» ¾î·Á¼ ¸ó¸»ÀÎÁöµµ ¸ô¸£°Ú´õ¶ó±¸¿ä ;;
±×·¡¼ ´Ù¸¥ºÐµéÀÌ¸é µµ¿ò´î±î ÇÔ ¿Ã·Á”f¼¿ä ;; ;
Àü Áß 1?............¾Æ³¶ ¤Ð¤Ð¤Ð¤Ð¤Ð¤Ð¤Ð¤Ð
À¯¿ëÇÏ°Ô ¾²¿´À¸¸é ÇÏ³×¿ä ¤¾¤¾¤¾¤¾¤¾¤¾¤¾¤¾ |
Hit : 11377 Date : 2008/12/13 11:10
|