Press

Header Ads

PETICIÓN DE ENTRADA TECLADO ENSAMBLADOR 8086

Cómo ingresar un número asembler 8086

Muchas veces necesitamos ingresar alguna letra o número en nuestro proyecto, es decir, hacer una petición de entrada de teclado, a continuación vamos a ver unos comandos que les hará la vida más fácil.

Primero necesitamos conocer el código ascii, que se muestra a la figura 01.


Código ASCII emu808
Figura 01: Código ASCII


Conociendo los valores del código ascii, podremos utilizar los siguientes comandos para nuestra conveniencia.

inicio:
mov ah,08h ; con el 08h en ah
int 21h ; la interrupción 21h, solicita ingreso de un número
cmp al,'S' ; comparación con el valor que acepte
je fin ; si es igual salta a una etiqueta.
jmp inicio ; si no, continúa el bucle
fin:
mov ax,4c00h ; devuelve el control
int 21h

El código anterior me hace recordar por poner ejemplo, al lenguaje c++ (While), veremos como funciona el código.

Figura 02: memoria emu8086

El código primero hace una petición de ingreso de un valor, lo guarda en la memoria AX, específicamente en AL, luego comparamos AL con el valor que se espera y si no es el esperado, sigue el bucle, hasta que se ingrese el valor esperado.

En la figura 02, se observa que el valor ingresado en AL es 53, que si vemos en la figura 01, observamos que el número 53 representa como código ascii a la "S", hasta aquí este pequeño tip de lenguaje ensamblador x86.

Los siguientes comandos se utiliza el 01h en AH ejecutando la interrupción 21h, y dicho valor se guarda en AL, para este caso, se ingresa el valor 35, que si vemos la figura 1 corresponde al código ascii del número 5, a diferencia del comando mov ah, 08h con int 21h, este comando permite que se muestre la entrada ingresada por teclado.

inicio: 
mov ah,01h 
int 21h       
cmp al,35h ; comparación con el valor que acepte
je fin
jmp inicio ; si no, continúa el bucle
fin:
mov ax,4c00h ; devuelve el control
int 21h

Figura 03: Registro AX

En la figura 03, podemos observar en AL, el valor de 35h, valor ascii que le corresponde al número 5.

El siguiente código te permite imprimir el valor ascii guardado en el registro DL, como vemos en la figura 01, el valor ascii del número 5 es 35h, de esa manera podremos imprimir en pantalla cualquier carácter, conociendo sus valores ascii,  poniendo el 02h en ah y ejecutando la interrupción 21h.

mov dl,35h   ;ingresamos valor ascii del número 5
mov dl,bl    ;imprime en pantalla el valor dl
mov ah,02h
int 21h      ;imprimirá el número 5 en pantalla
mov ah,07h   ;esperar entrada de teclado para que veas lo que se imprime en pantalla
int 21h           

Hasta aquí con los tips. Les comparto un video que podría ayudarles.


.model small
.stack
.data
     msg db "Ingrese cadena:",13,10,"$"
    cadena db 100 dup(' '),"$"  ; reservando 100 espacios 
.code
   main proc
   mov ax, seg @data
   mov ds,ax
   mov ah,09h
   lea dx, msg                    ; imprime msg
   int 21h
   mov ah,3fh                     ; función para mover la cadena ingresada
   mov bx,00      
   mov cx,100                     ; tamaño reservado para este caso 100
   mov dx, offset [cadena]  ;guarda cadena de caracteres en DX
   int 21h
   
   mov ah,09h
   mov dx,offset[cadena]    ;pasa cadena de caracteres a DX para imprimirla
   int 21h
    .exit
   main endp
end


Publicar un comentario

0 Comentarios