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.
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
0 Comentarios
Dejame tus dudas o saludame!