convertir de hexadecimal a decimal en Assembler

lunes, 4 de agosto de 2008
Como todos ustedes saben los caracteres ingresados por teclado una vez presionada la tecla en el dispositivo, esta emite una señal y esta pasa por uan especie de decodificador ( reconocedor de señales) para así reconocer entre si se presionó una letra 'a' o el numero '1', pero esta señal es un conjunto de bits, que a su vez estos agrupados, van en bloques haciendo una suma de pesos, por ejemplo ( supongamos 8 bits):

PESOS -> 128 64 32 16 8 4 2 1
A7 A6 A5 A4 A3 A2 A1 A0
0 0 1 0 1 0 0 1 Sumando sus pesos =1+8+32 =41

41 es el código hexadecimal de la letra 'a', entonces de reconocer este carácter se habrá presionado la letra a del teclado.

Ahora la idea es convertir ese código ASCII (hexadecimal) al sistema que manejamos nosotros el decimal, no es con un fin específico sino para practicar instrucciones y un poco de programación en assembler.

Bien veamos a continuación el código, no lo comentaré todo porque pretendo mostrarles como es que funcionan algunas instrucciones que están dentro de este código

.MODEL SMALL
.CODE
;leer un carácter e imprimir su código en exa.
INICIO: MOV AH,01 ; instrucción para leer algo de teclado
INT 21H ; realiza el servicio cagado de 01
MOV BL,AL
MOV AH,02H
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
MOV AL,BL
MOV CL,04
SHR AL,CL ; instrucción de rotación de bits
ADD AL,30H
MOV DL,AL
INT 21H
AND BL,0FH
CMP BL,09
JA sig ; es un salto condicional hacia la etiqueta sig
ADD BL,30H
MOV DL,BL
INT 21H
JMP FIN
sig: ADD BL,37H ; etiqueta sig, especie de procedimiento
MOV DL,BL
INT 21H
FIN: MOV AH,4CH
INT 21H
END

3 comentarios:

Anthony dijo...

Oe ese programa te recibe el caracter(a ,2,..) y te sale el codigo hexadecimal

Anónimo dijo...

Este programa no es de H->D si no de HEX->ascii

Anónimo dijo...

Marca error en la linea 5 y 6 podrias decir cual es el problema