Conversion de bases, consulta

Iniciado por fofaso, 4 Noviembre 2014, 05:05 AM

0 Miembros y 1 Visitante están viendo este tema.

fofaso

Hola Gente!! quizás alguien tenga la amabilidad para contestar una pregunta que tengo sobre Assembler, desde hace rato...

Estoy tratando de hacer un programa en Assembler para que pueda convertir un numero dado en base 10 a cualquier base (desde base 2 hasta base hexadecimal).

No tengo grandes conocimientos en este lenguaje, pero sé lo básico. Hasta ahora pude armar toda la estructura del programa, pidiendo el número a convertir y los resultados dados luego de la conversión.

Mi pregunta es: Como puedo hacer para convertir un numero en esas condiciones? Hasta ahora no pude encontrar una manera, se me hace muy difícil.

No les estoy pidiendo que me resuelvan el programa completo ni mucho menos. Solo les pido algun centro, con algún código que resuelva ese numero convertido a alguna base (ninguna en particular), así yo después puedo relacionar ese código con las restantes conversiones y poder terminar mi anhelado programa.

Ojala me puedan contestar, seria de muchísima ayuda.

En ese caso, voy a estar eternamente agradecido. Soy un visitante de esta pagina con frecuencia, ya que de aca saco gran información y por esa misma razon decidi registrarme, ya qe siempre lo hacia en modo anonimo!!

Mis respetos y saludos a toda esta comunidad, saludos!

ivancea96

El código ya es cosa tuya, pero el algoritmo es muy sencillo (desde base 10 a base X).

Tedejoe stá página que lo explica bien (by Google): http://www.ceibal.edu.uy/UserFiles/P0001/ODEA/HTML/091111_binario.elp/cambio_de_base_10_a_otras_bases.html

plataplomo2948

#2
Exactamente que quiere hacer?. En ASM todo ya es base 2, pero lo leamos en base 16. En ASM todo lo siguente es igual


mov eax , 0xf

mov eax, 15d

mov eax, 00001111b


Si no refiere a eso, tendria que estar hablando de punteros del string asi? en ese caso puede usar strtol de libc



string = "12344321" // d
base = 2

push string
push NULL // no se necisita por convercion
push base
call strtol()

cmp eax, 0 // eax tendra la respuesta
jnz etc etc...



Seria mejor si postea su codigo pra mostrar su problema





fofaso - Recibi su mensaje privado, seria mejor si usted postea su codigo aqui para tener mas opiniones.

Eternal Idol

Cita de: plataplomo2948 en  9 Noviembre 2014, 02:01 AM
fofaso - Recibi su mensaje privado, seria mejor si usted postea su codigo aqui para tener mas opiniones.

plataplomo2948: no escribas mensajes consecutivos.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

fofaso

Respondiendo a plataplomo2948 dejo mi codigo hasta ahora es el esqueleto!!

;PROGRAMA DE CONVERSION DE NUMEROS
#make_COM#
org 100h
include emu8086.inc ;libreria donde hay algunas funciones basicas
gotoxy 5,1
printn 'Programa conversor de numeros'
printn

;Inicio del codigo
call OTRO_PARRAFO
call FIN_DE_LINEA
call PEDIR_NUMERO   ;pide un numero
call CONV_B2
;call CONV_B3
;call CONV_B4
;call CONV_B5
;call CONV_B6
;call CONV_B7
;call CONV_B8
;call CONV_B9
;call CONV_BHEXA

printn         ;printn ES UN ENTER!
;call print_num      ;MUESTRA LO QE HAY EN AX!
call TERMINAR_PROGRAMA

;DESARROLLO DE FUNCIONES
CONV_B2:
   putc 10
   putc 13
   
   mov ax,cx
   mov cx,10
   div cx
   call print_num
   putc 10
   putc 13
   ;Codigo para resolver numero a base 2
   print 'Numero convertido base 2: '
   ret
;CONV_B3:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 3
   print 'Numero convertido base 3: '
   ret
;CONV_B4:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 4
   print 'Numero convertido base 4: '
   ret
;CONV_B5:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 5
   print 'Numero convertido base 5: '
   ret
;CONV_B6:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 6
   print 'Numero convertido base 6: '
   ret
;CONV_B7:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 7
   print 'Numero convertido base 7: '
   ret
;CONV_B8:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 8
   print 'Numero convertido base 8: '
   ret
;CONV_B9:
   putc 10
   putc 13
   ;Codigo para resolver numero a base 9
   print 'Numero convertido base 9: '
   ret
;CONV_BHEXA:
   putc 10
   putc 13
   ;Codigo para resolver numero a base hexa
   print 'Numero convertido base hexa: '
   ret
PEDIR_NUMERO:
   print 'Numero a convertir:  '
   call scan_num   ;funcion de la libreria incluida
   ret      ;vuelve a donde habian llamado a la funcion
TERMINAR_PROGRAMA:
   mov ah,4ch
   int 21h
FIN_DE_LINEA:
   print 10
   print 13
   ret
OTRO_PARRAFO:
   print 10
   print '--------------------------'
   print 13
   ret
   
define_scan_num
define_print_string
define_print_num
define_print_num_uns
define_pthis
define_clear_screen
end

Se nota que estan todas las bases indicadas, pero falta el codigo (importante -.-).
Bueno, se asume qe se ingresan decimales.
Desde ahi se tendrian qe hacer divisiones constantes respecto al total de caracteres ingresados, para que el resto de cada una de esas divisiones pueda conformar mi numero convertido.

Mi primer problema es como saber cuantos caracteres se ingresaron? Luego el siguiente problema es como guardar el resto y poder mostrarlos todos juntos para formar el numero convertido?

Estuve investigando desde hace 2 semanas este problema y no pude tener muchos resultados qe me sirvan, espero alguna ayuda. Ojala me puedan ayudar/orientar. Gracias chicos, saludos!