Bienvenidos, el día de hoy trataremos de nueva cuenta otro programa relevante al uso de ciclos condicionales en ensamblador. En este caso repasaremos los loops LOOPE, recordemos que LOOPE seguirá el ciclo mientras el resultado de alguna comparación sea cero y la badera ZF=1.
Veamos el siguiente programa:
El programa anterior se repetirá 10 veces, según lo establecido en el registro CX, recordemos que el registro CX funge el papel de contador en los ciclos condicionales, en fin, el programa recibirá como entrada un carácter por teclado, para que el ciclo continué debemos presionar "S", si en efecto hemos introducido una letra "S" la bandera ZF debe posicionarse en un 1 (puesto que es verdad la igualdad), y por ende el ciclo debe repetirse. En caso contrario, si hemos introducido cualquier carácter distinto de "S" la bandera debe valer cero, por tanto se debe romper el ciclo.
Resultado:
Si solo introducimos "S" el ciclo debe repetirse, en mi caso adicionalmente imprime el carácter ">".
De lo contrario el programa imprime la tecla que he introducido y termina su ejecución.
Veamos el siguiente programa:
.model small .stack 64 .data .code inicio proc far ;INICIO DE PROCEDIMIENTO mov cx,10 ; CX=10 LEER_CAR: ;INICIO DE ETIQUETA mov al,">" ;AL=">" mov ah,0Eh ;0Eh Imprime un caracter en pantalla desplazando el cursor y la pantalla de ser necesario int 10h ;Invoca a los servicios de pantalla mov ah,00 ;00 espera una pulsación del teclado int 16h ;Invoca los servicios del teclado cmp al,"S" ;Si la tecla introducida es una "S" mayuscula y la bandera ZF= 1 loope LEER_CAR ; Entonces el ciclo se repite decrementando CX en 1 ;Si es diferente el valor a "S" mayuscyla y la bandera ZF=0 mov ah,0Eh ;Entonces pido la impresion de un caracter int 10h ;E invoco los servicios de pantalla, esto imprimira en pantalla el ultimo caracter introducido por teclado mov ah,0EH ;Pido la impresion de un caracter mov al,10 ;Pido imprimir el caracter 10 = nueva linea (ENNTER) int 10h ;Invoco los servicios de pantalla mov al,13 ;Pido la impresion de un retorno de carro int 10h ;Invoco los servicios de pantalla mov ax,4c00h ;Pido la terminacion del programa int 21h ;Invoco el servicio 21h end inicio ;Cierre de procedimiento
El programa anterior se repetirá 10 veces, según lo establecido en el registro CX, recordemos que el registro CX funge el papel de contador en los ciclos condicionales, en fin, el programa recibirá como entrada un carácter por teclado, para que el ciclo continué debemos presionar "S", si en efecto hemos introducido una letra "S" la bandera ZF debe posicionarse en un 1 (puesto que es verdad la igualdad), y por ende el ciclo debe repetirse. En caso contrario, si hemos introducido cualquier carácter distinto de "S" la bandera debe valer cero, por tanto se debe romper el ciclo.
Resultado:
Si solo introducimos "S" el ciclo debe repetirse, en mi caso adicionalmente imprime el carácter ">".
De lo contrario el programa imprime la tecla que he introducido y termina su ejecución.
Comentarios
Publicar un comentario