Código fuente ensamblador para convertir ocho números hexadecimales en números binarios
; convierte cualquier número sin signo dentro de los 16 bits (1 u 8 o 4 o n nlt;=16)
; o modifica el segmento de datos para convertir más bits
; >; p>
; Presione Esc para salir.
Presione Enter para iniciar la conversión
;------------------------------------- ---- -----------
Segmento de datos
Supongamos ds: datos
indata db 16 dup(20h)
inputinfo db 'Ingrese un hex=lt 16 bits:
errorinfo db 'Ingrese error, repita $'
resultinfo db 'El resultado es: $' <
newlineinfo db 0dh, 0ah, '$'
los datos terminan
--------------; ---- -------------------------------
;------- --- ------------------
segmento de código
asume cs: código
proc principal lejos p>
mov ax, data
mov ds, ax
mov es, ax
llamar a inputdata
llamar a hextobin
mov ah, 4ch
int 21h
main endp
-----------; ---- ----------------------- -
;-------------- ---- --------------------
proc hextobin cerca
mov ah, 9
mov dx , offset resultinfo
int 21h
mov si, offset indata
siguiente:
lodsb
mov bl , al; copia de seguridad de al primero, porque sub* cambiará al más tarde
cmp al, 20h
jz exit
cmp al, 3ah ; sémola
p>jl sub1
cmp al, 47h; G
jl sub2
cmp al, 67h; p>
jl sub3
sub1:
sub al, 30h; juez 0--9
jmp comenzar
sub2 :
mov al, bl
sub al, 37h; juez A--F
jmp comenzar
sub3:
mov al , bl
sub al, 57h; juez a---f
jmp comenzar
comenzar:
mov cx, 4; cada 4 dígitos binarios puede representar 1 dígito hexadecimal
mov ah, 2; compruebe a su vez si los 4 ceros y unos inferiores en al son el propósito del bucle
movimiento
bl, al
mov bh, 8; 8h=1000b
show: < bl; Restaurar al
ror bh, 1000b desplazamiento a la derecha 1 bit; a 0100b
loop show
mov ah, 0
jmp next
salida: ret
hextobin endp
;----- ----------------------------------
;------------------------------------------
inputdata proc cerca
entrada:
mov ah, 9
mov dx, offset inputinfo
int 21h p>
mov di, offset indata
inchar:
mov ah, 1
int 21h
push ax p>
cmp al, 1bh; if Esc, exit
je quit
cmp al, 0dh if Enter, que significa finalizar la entrada, saltar a la conversión
je hex
cmp al, 67h tres intervalos condicionales
jnl showerr
cmp al, 61h
jnl start
cmp al, 47h
ducha jnl
cmp al, 41h
inicio jnl
cmp al, 3ah
ducha jnl
cmp al, 30h
inicio jnl
inicio:
hacha pop
mov ah, 0
stosb
jmp inchar
salir:
mov ah, 4ch
int 21h
hex: llamar a nueva línea
llamar a hextobin
ret
showerr:
llamar a nueva línea p>
Llamar a nueva línea
mov ah, 9
mov dx, offset errorinfo
int 21h
Llamar a nueva línea
p>Llamar a nueva línea
jmp input
inputdata endp
------------- ----- -----------------------
;-------------- ---- ---------------------
procesamiento de nueva línea cerca de
mov dx, desplazamiento de nueva línea
mov ah, 9
int 21h
ret
final de nueva línea
;-------------------------------- --------
;-------------------------- ----- --- ---
el código termina
finaliza el principal