Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo convertir un número hexadecimal a un número binario usando ensamblador

Cómo convertir un número hexadecimal a un número binario usando ensamblador

SEGMENTO DE DATOS

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

MOV AH,09H

INT 21H ;Mensaje de salida

MOV AH,01H

INT 21H ;Ingrese el primer carácter (dieciséis

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

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.