Escriba un programa en lenguaje ensamblador para ingresar dos números hexadecimales de un dígito desde el teclado y agregarlos para mostrar el resultado. Se requiere que el resultado se muestre como un número decimal.
segmento dseg
Buf1 db 4, ?, 4 dup( ? )
Ermsg db 'Error de entrada, ¡ingrese de nuevo!', 0ah, 0dh, ' $'
flag db 0
num1 db ?
dseg termina
sseg segmento pila
dw 512 dup( ? )
sseg termina
segmento cseg
asume ds:dseg, cs:cseg, ss:sseg
COMIENZO:
mov ax, dseg
mov ds, ax
llamar a inputnum
mov num1, bl
llamar inputnum
agregar bl, num1
mov al, bl
llamar a dectobinary
mov ah, 04ch
int 21h
inputnum proc
Entrada:
mov ah, 1
int 21h
mov bl, al
mov ah, 2
mov dl, 0ah
int 21h
mov ah, 2
mov dl, 0dh
int 21h
cmp bl, 'f'
jg InputError
cmp bl, 'a' p>
jl LessThanLa
sub bl, 87
jmp InputDone
LessThanLa:
cmp bl, 'F'
jg InputError
cmp bl, 'A'
jl LessThanUa
sub bl, 55
jmp InputDone
MenosThanUa:
cmp bl, '9'
jg InputError
cmp bl, '0'
jl InputError
sub bl, 48
jmp InputDone
InputError:
lea dx, Ermsg
mov ah, 9
int 21h
jmp Entrada
InputDone:
ret
inputnum endp p> p>
proc dectobinario
push cx
mov flag, 0
lea si, Buf1
mov dl, 10
mov cl, 10
Bucle1:
xor ah, ah
div dl
cmp al , 0
jne Next2
cmp flag, 0
je Next3
Siguiente2:
mov flag, 1
mov [si], al
agregar byte ptr[si], '0'
inc si
Siguiente3:
empujar hacha
mov ax, 0
mov al,dl
div cl
mov dl, al
pop ax
mov al, ah
cmp dl, 0
jne Loop1
mov byte ptr[si], ' '
mov byte ptr[si+1], '$'
lea dx, Buf1
mov ah, 9
int 21h
pop cx
ret
dectobinary endp
cseg termina
end BEGIN
Instrucciones:
Ingrese una letra primero. El rango legal es: 0~9, A~F, a~f. Si es legal, entonces ingresa el segundo. Si alguna entrada es ilegal, se le pedirá que vuelva a ingresar. Una vez que ambas letras son legales, se genera el resultado.
MASM6.15+DEBUG, pasó la prueba.