Ayuda del ensamblador sobre el uso de interrupciones de DOS para recibir y procesar la entrada del teclado
Segmento de código
Supongamos CS: código, DS: código
---- ------- --- ---------- -------
Función: Mostrar la cadena de la dirección especificada (Str_Addr)
;
; Str_Addr = dirección de cadena (obligatoria en el segmento de datos)
; Método de uso: Salida Str_Addr
; >Salida MACRO Str_Addr
lea dx,Str_ Addr
mov ah,9
int 21h
EndM
; ------ ---------- ---------- -----
Función: generar un carácter
;; Entrada: dl= carácter a mostrar
Enter_Chr proc Near
push ax
mov ah,02h
int 21h
hacha pop
ret
Enter_Chr endp
--- ---------- -- - ------- --------
Función: retorno de carro de salida y avance de línea
Enter_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl, 0ah
int 21h
pop dx
pop hacha
ret
Enter_CTLF endp
;------ ---------- ---------- -----
; Función: Cambia los 4 inferiores en AL Convierte números binarios a códigos ASCII para visualización hexadecimal
; Entrada: = ASCII convertido
Salida: = ASCII convertido
AL_ASCII Proc Near
cmp al,10 ;AL<10?
jb @@@To_ASCII ;AL<10, procesado como un número
agregar al, 7 ;AL>=10, tratado como letras mayúsculas
@@To_ASCII: add al,'0' ;Convertir al número correspondiente o letra mayúscula
ret
AL_ASCII EndP
- --- ---------- ---------- -------
; Función: Cambiar AL Convierte los datos del byte a código ASCII y mostrarlo en hexadecimal
; Entrada: AL
Salida: AX= código ASCII convertido
Byte_ASCII cierre del programa
push cx
mov cx,4
xor ah,ah ;Establecer AH en 0
shl ax, cl ;Desplazar AX 4 bits a la izquierda
shr al,cl ;Sh
ift AL a la derecha por 4 bits
xchg ah,al
Llama a AL_ASCII para llamar a una subrutina para convertir el valor en AL en el código ASCII correspondiente
xchg ah ,al
Llamada AL_ASCII
xchg ah,al
pop cx
ret
Byte_ASCII EndP p> p>
; ----- ---------- ---------- ------
; Convierta los datos del byte a código ASCII para que se puedan mostrar en hexadecimal en la posición actual del cursor
; Ingrese: AL
Salir: AX= Código ASCII convertido
ByteD_ASCII el programa está cerrado
Push dx
Push ax
Llame a Byte_ASCII para convertir el número de bytes en AL a código ASCII y mostrarlo en hexadecimal
cmp al,'9'
jbe $+7
mov dl,'0'
llamar a Enter_Chr ; mostrar un carácter
mov dl,al
call Enter_Chr ;Mostrar un carácter
mov dl,ah<
call Enter_Chr ;Mostrar un carácter
mov dl,'H'
call Enter_Chr ;Mostrar un carácter
pop ax
pop dx
ret
ByteD_ASCII EndP
--------- ---------- ---------- --
Prompt_Chr db 'Ingrese un carácter:$' ;Ingrese la información del mensaje de carácter
Inicio: push cs
pop ds
push cs
pop es ;Hacer que el segmento de datos, el segmento adicional y el segmento de código sean el mismo segmento
Input_Chr:Output Prompt_Chr ;Solicitar carácter de entrada
mov ah,1 ;Aceptar un carácter del teclado
int 21h
cmp al,1bh ;Esc?
jz Exit_Proc
CALL Enter_CTLF ;Generar un retorno de carro, avance de línea
call ByteD_ASCII ;Convierte los datos de bytes en AL a código ASCII de visualización hexadecimal y lo muestra en la posición actual del cursor
CALL Enter_CTLF ;Salida de retorno de carro, avance de línea
CALL Enter_CTLF ;Salida de retorno de carro, avance de línea
jmp Input_Chr ;Aceptar siguiente carácter
Exit_Proc: mov ah,4ch ;finalizar programa
int 21h
p ><p>Código FINALIZA
FIN Inicio; La compilación finaliza aquí