Cómo convertir un número hexadecimal a un número binario usando ensamblador
MENSAJE DB '¡Bienvenido al sistema!',13,10,13,10
DB 'La función del programa es cambiar los números H(16) a B( 2) números.',13,10,'Como ff,AA,28, etc.',13,10,13,10
DB 'Por favor, ingresa el número.',13, 10,13,10,'$
ERROR1 DB '¡ERROR! ,'Ingrese los números correctos.',13,10,'$' ;Mensaje de error
ERROR2 DB 'ERROR!',13,10,'Ingrese los comunes correctos.',13,10 ,'$'
CR DB 13,.10,'$' ;Retorno de carro para avance de línea
OTRA VEZ DB '¿Quieres intentarlo de nuevo?(S o N)' ,13,10,'$
DATAS FINALES
PILAS SEGMENTO PARA PILA
DB 20 DUP(?)
PILAS FINALES
SEGMENTO CODESG
ASUME CS:CODESG,DS:DATAS,SS:STACKS
INICIO:
CABEZAL:
MOV AX,0
PUSH AX
MOV AX,DATAS
MOV DS,AX
LEA DX,MENSAJE p>
MOV AH,09H
INT 21H ;Mensaje de salida
MOV AH,01H
INT 21H ;Ingrese el primer carácter (dieciséis p>
INT 21H ; Ingrese el primer carácter (dígito alto del número hexadecimal)
MOV AH,01H
INT 21H ;;Ingrese el primer carácter (el dígito alto de el número)
CMP AL,'0';Manejo de excepciones (el carácter de entrada no está en el rango de 0~9,a~f,A~F)
JB OVERFLOW1
CMP AL,'f'
JA OVERFLOW1
CMP AL,9'
JNA QUIT1 p>
CMP AL,'A'
JB OVERFLOW1
CMP AL,'F'
JNA QUIT1
CMP AL,'A'
JB OVERFLOW1
QUIT1:
CALL ASC2BIN; Llamada: convierte carácter hexadecimal ASCII a valor binario
MOV BL,AL
p>
MOV CL,04H
SHL BL,CL ; Utilice la instrucción lógica izquierda para moverse a los cuatro bits superiores de BL. Si AL=abcd, entonces BL=abcd0000
<. p>MOV AH, 01H ;Ingrese el segundo carácter.01H ;Ingrese el segundo carácter (el dígito bajo del número hexadecimal)
INT 21H
CMP AL,'0' ;Manejo de excepciones (el carácter de entrada no es 0~9, a ~f,A~F rango)
JB OVERFLOW1
CMP AL,'f
JA OVERFLOW1
CMP AL, 9 '
JNA QUIT2
CMP AL,'A'
JB OVERFLOW1
CMP AL,'F'
JNA QUIT2
CMP AL,'A'
JB OVERFLOW1
QUIT2:
CALL ASC2BIN llamada: hexadecimal Convertir ASCII; carácter a valor binario
O BL,AL después de la última llamada, los cuatro bits inferiores de BL son 0. 0||X=X, si se establece AL=xyzw, entonces BL=abcdxyzw < / p>
LEA DX,CR
MOV AH,09H
INT 21H
MOV CX,8 ; ciclo 8 veces
LOOPG:
SHL BL,1
JC LOOP1 ;Si CF es 1, salta
MOV DL,'0 ;de lo contrario 0
JMP LOOP2;; Si AL=xyzw, entonces BL=abcdxyzw.
JMP LOOP2
LOOP1:
MOV DL,'1'
LOOP2:
MOV AH, 02H ;Pantalla
INT 21H
LOOP LOOPG ;Emite otro salto de línea antes del final del programa
LEA DX,CR<
MOV AH,09H
INT 21H
SALIDA JMP
;Manejo de excepciones
OVERFLOW1:
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX, ERROR1
MOV AH,09H
INT 21H
SALIDA JMP
OVERFLOW2:
LEA DX,CR
MOV AH,09H
INT 21H
LEA DX,ERROR2<
MOV AH,09H
INT 21H
SALIDA JMP
SALIR:
LEA DX,OTRA VEZ; mensaje para volver a intentarlo
MOV AH,09H
INT 21H
MOV AH,01H
MOV AH,01H.
INT 21H
PUSH AX
LEA DX,CR
MOV AH , 09H
INT 21H
POP AX
CMP AL,'Y'
JZ HEAD
CMP AL ,
CMP AL,'N'
JZ OVER
CMP AL,'N'
JZ OVER
JMP OVERFLOW2
OVER:
MOV AH,4CH ;Fin de salida del programa
INT 21H
;ASCII a binario subrutina de procesamiento
ASC2BIN PROC NEAR
SUB AL,30H; Resta 30H, si es un dígito del 0 al 9, entonces se convierte a binario
CMP AL,9
JNA NEXT ;Salta las siguientes dos líneas si es un dígito.
SUB AL,7 ;Si son las letras mayúsculas A-F, entonces resta 7 y se convierte 0AH-0FH
AND AL,0FH ; Filtra los cuatro dígitos anteriores para que incluso las letras minúsculas sean iguales a las mayúsculas
SIGUIENTE:
RECUPERAR:
SIGUIENTE.
RET
ASC2BIN ENDP
CODESG FINALIZA
END INICIO.