• Domingo 22 de Diciembre de 2024, 07:41

Autor Tema:  Conversion De Binario A Decimal  (Leído 2264 veces)

Ericka

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Conversion De Binario A Decimal
« en: Miércoles 12 de Mayo de 2004, 23:52 »
0
Disculpen la molestadera, pero estoy iniciandome en Assembler y necesito hacer un programa que convierta de binario a decimal en ensamblador y muestre el resultado en pantalla, poer ej. que se lea 25h e imprima el decimal 37 :ayuda: porfavor... se que estoy empezando y mas de alguno de ustedes sabe como hacerlo... Cuando yo aprenda un poco mas me sentire satisfecha de poder ayudar a alguien...  :beer: GRACIAS!!!!!!!

deldar

  • Miembro activo
  • **
  • Mensajes: 93
    • Ver Perfil
Re: Conversion De Binario A Decimal
« Respuesta #1 en: Jueves 13 de Mayo de 2004, 10:34 »
0
Existe un polinomio de conversión que biene a ser tal que:
 (Dígito n) * base(en tu caso 16) exp (n-1) + ... Dígito 2º * base exp 1 + Dígito 1º * base exp 0= resultado

siendo "exp" exponente ó "elevado a".

En tu ejemplo (esto será más claro):

            2 * 16 exp 1 + 5 * 16 exp 0 = resultado

            2 * 16 exp 1=32
            5 * 16 exp 0=  5
                                 __
                resultado= 37

¿como usamos esto? facil...
16= 2 exp 4 lo que significa 4 multiplicaciones por dos que es lo mismo que en un registro que cuatro desplazamientos a la izquierda.

Considerando que en 25h tenemos el 2 en un registro p.ej. AH y el 5 en otro p.ej. AL el código quedaría tal cual sigue:

xor dl,dl  ; voy a guardar el resultado en dx y me interesa que esté vacio = mov dx,0
mov dl,ah  ; introduzco el primer dígito en dx
shl dl,4      ; desplazo dl 4 a la izquierda, o lo que es lo mismo lo multiplico por 16
add dl,al     ; sumamos el cinco con lo que ya tenemos el resultado

En el caso de tener el número hexadecimal en un registro p.ej. al=25h nos ahorramos casi todo el trabajo porque el número directamente está en la base que queramos siempre que lo extraigamos correctamente, digamos que el paso anterior ya está hecho. Para extraer el numero en base decimal basta con dividir entre 10 :
37|_10__        ax |_10__
  7  3               ah  al
Segun esto en al obtenemos los digitos. Cuando al <10 nos faltará un digito que está ah.

Me temo que la el post ha quedado un tanto caotico si concretas un poco más  podremos centrar mejor la solución y por supuesto la respuesta.

Un placer.
Quien de verdad sabe de qué habla, no encuentra razones para levantar la voz.