PROGRAMA DE LECTURA DE CARACTERES CON LOOPE

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:

.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