RECUADRO

Para poder entender este programa debemos conocer el funcionamiento de la instrucción LOOP (Loop es muy similar al comando FOR en Lenguaje C).

La función del comando LOOP es realizar un salto a la etiqueta indicada si CX-1 es mayor que 0.

También cabe mencionar que el valor de CX es automáticamente decrementado cada vez que se ejecute LOOP. Esto nos sirve para llevar una cuenta regresiva y poder controlar nuestro programa de esa manera. EJEMPLO:

 

MOV CX,10

 

Etiqueta:

 

MOV DH,CL

MOV DL,3

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET Mensaje

MOV AH,09H

INT 21H

 

LOOP Etiqueta

 

Lo que hace el programa anterior es imprimir un mensaje 10 veces (de la fila 1 a la fila 10 son 11 veces). Lo primero que se hace es asignarle al registro CX el valor 10 , después declaramos ETIQUETA. El código entre ETIQUETA y LOOP ETIQUETA será lo que se repita 10 veces. Durante las 10 repeticiones el valor de CX es decrementado cada vez que LOOP salta a ETIQUETA (con lo que CX primero vale 10, en la que sigue 9, luego 8 y así hasta llegar a 1).

La cuenta regresiva que se realiza en CX la podemos aprovechar a nuestro beneficio, si observas los comandos entre ETIQUETA y LOOP ETIQUETA te darás cuenta que son un BLOQUE PARA IMPRIMIR UNA CADENA DE CARACTERES, la única diferencia es que al valor de las Fila (DH) le asignamos el valor que tiene CL, (Recuerda que CL es el byte menos significativo de CX y por lo tanto también vale lo que CX mientras CX sea menor que 256) con lo que desplazaremos el mensaje desde la columna 10 hasta la 0.

Si esto quedo claro no habrá problema con el programa siguiente:

 

.MODEL SMALL

.STACK

.DATA

CARACTER DB "#$"

MENSAJE DB "Presione una tecla para continuar...$"

 

.CODE

RECUADRO PROC FAR

 

MOV AX,@DATA

MOV DS,AX

 

MOV AH,00H

MOV AL,02H

INT 10H

 

MOV CX,80

RETORNO1:

 

MOV DH,0

MOV DL,CL

SUB DL,1

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET CARACTER

MOV AH,09H

INT 21H

 

MOV DH,23

MOV DL,CL

SUB DL,1

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET CARACTER

MOV AH,09H

INT 21H

 

LOOP RETORNO1

 

MOV CX,23

RETORNO2:

 

MOV DH,CL

SUB DH,1

MOV DL,0

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET CARACTER

MOV AH,09H

INT 21H

 

MOV DH,CL

SUB DH,1

MOV DL,80

DEC DL

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET CARACTER

MOV AH,09H

INT 21H

 

LOOP RETORNO2

 

MOV DH,3

MOV DL,3

MOV BH,00H

MOV AH,02H

INT 10H

MOV DX,OFFSET MENSAJE

MOV AH,09H

INT 21H

 

MOV AH,01H

INT 21H

 

MOV AX,4C00H

INT 21H

 

RECUADRO ENDP

 

END RECUADRO

 

Para bajar el archivo ASM haz CLICK aquí.