Ensamblador - Necesito convertir hexa a decimal en ensamblador

 
Vista:

Necesito convertir hexa a decimal en ensamblador

Publicado por Eric (7 intervenciones) el 27/01/2001 16:37:37
Te agradecere la ayuda que me puedas dar

Por ejemplo quiero convertir el número 02F8h a decimal, segun yo se es posible desarrollando el número es decir:
2 1 0
2*(16) + 15*(16) + 8*(16)= 512 + 240 + 8

= 760 decimal

sin embargo ensamblador maneja numeros hexa por lo tanto queda así
2 1 0
2*(10) + F*(10) + 8*(10)= 200 + F0 + 8

es decir el algoritmo solo funciona si los calculos se hacen en decimal, pero ¿como se haria tal converción con operaciones en hexa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Necesito convertir hexa a decimal en ensamblado

Publicado por Pedro Pablo (21 intervenciones) el 30/01/2001 15:52:05
No se entiende nada de lo que preguntas... al menos yo no lo entiendo.
¿Qué es lo que quieres exactamente? El ensamblador no es que maneje números en hexadecimal, simplemente maneja números. Otra cosa es cómo se representen esos números en pantalla, o cómo los escribas tú en tu código.
Además, el algoritmo funciona siempre. La cuestión es no liarse entre el número y la notación que se utilice... La verdad es que esto es un puto lío :-)
Pero vamos, ¿qué es lo que necesitas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito convertir hexa a decimal en ensamblado

Publicado por Eric (7 intervenciones) el 30/01/2001 17:06:05
Gracias por contestar.

¡¡Quiero que los resultados de mis operaciones salgan en pantalla en notación decimal.¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito convertir hexa a decimal en ensamblado

Publicado por Pedro Pablo (21 intervenciones) el 31/01/2001 10:29:13
Imagina que tienes el número 2F8 y quieres saber cuanto vale en decimal. Lo primero que hay que hacer es dividirlo por 10d (o 0Ah). El resultado será 4Ch, y el resto (que también es importante) será 0.Ese 0 será el primer dígito de la derecha del número en decimal.
Seguimos. Tenemos el resultado 4Ch, y repetimos la operación. Al dividirlo por 10d (0Ah) obtenemos el número 07h, y como resto 6. Ese será el siguiente dígito en decimal del número.
Y repetimos. Tenemos el 07h, lo dividimos por 0Ah, y obtenemos como resultado 0, y como resto 7, que será el siguiente dígito.
Por último nos damos cuenta de que el último resultado obtenido es 0, a si es que no continuamos dividiendo.
Total, tenemos los dígitos 0, 6 y 7. Tenemos que escribirlos en orden inverso, es decir: 760, justo el valor de 2F8h en decimal.
Para hacerlo en ensamblador, lo mejor es ir dividiendo y metiendo los restos de cada división en la pila. Cuando el resultado de la división sea 0, sacamos tantos dígitos de la pila como divisiones hayamos hecho, y los vamos escribiendo. Al usar la pila damos "la vuelta" a los restos, es decir sacaremos el último de la pila al primero que hayamos calculado, por lo que lo escribiremos justo en el dígito de la derecha como necesitamos.
Espero que te valga!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Necesito convertir hexa a decimal en ensamblado

Publicado por alexander (1 intervención) el 02/11/2014 04:04:52
pedro pablo : te agradesco mucho despues de 13 años me funciono de maravilla tu explicacion actualmente ando programando microcontroladores freescaler y me sirvio mucho de ayudo tenai todo el dia quebrandome la cabeza por un examen gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito convertir hexa a decimal en ensamblado

Publicado por harold (1 intervención) el 31/12/2015 08:20:50
exelente amigo :) lo entendi a la perfeccion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Necesito convertir hexa a decimal en ensamblado

Publicado por javier (1 intervención) el 25/08/2019 21:26:07
hola... a pasado mucho tiempo, pero esto funciona solo hasta el numero 2559, tienes idea de porque?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Un poco de código...

Publicado por Jorge (126 intervenciones) el 01/03/2001 16:39:42
Creo que Pedro dejó en claro el cómo. Ahora te doy un código que hace lo que querés. Espero que te sirva de algo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
HexToDec PROC NEAR ; Recibe en AX el valor y deja en DS:DI la cadena.
;Siempre deja 5 digitos más el 0 del ASCIIZ. Si lo vas a imprimir con la Int 21h sub 9, cambiá el 0 por un '$'.
    push ax
    push bx
    push dx
    push di
 
    mov bx, OFFSET Hexa
@@Control1:
    cmp ax, 10000
    jb @@PonerDigito1
    inc bx
    sub ax, 10000
    jmp @@Control1
@@PonerDigito1:
    mov dl, [bx]
    mov DS:[di], dl
    inc di
    mov bx, OFFSET Hexa
@@Control2:
    cmp ax, 1000
    jb @@PonerDigito2
    inc bx
    sub ax, 1000
    jmp @@Control2
@@PonerDigito2:
    mov dl, [bx]
    mov DS:[di], dl
    inc di
    mov bx, OFFSET Hexa
@@Control3:
    cmp ax, 100
    jb @@PonerDigito3
    inc bx
    sub ax, 100
    jmp @@Control3
@@PonerDigito3:
    mov dl, [bx]
    mov DS:[di], dl
    inc di
    mov bx, OFFSET Hexa
@@Control4:
    cmp ax, 10
    jb @@PonerDigito4
    inc bx
    sub ax, 10
    jmp @@Control4
@@PonerDigito4:
    mov dl, [bx]
    mov DS:[di], dl
    inc di
    mov bx, OFFSET Hexa
 
    add bx, ax
    mov dl, [bx]
    mov DS:[di], dl
 
    pop di
    pop dx
    pop bx
    pop ax
    ret
HexToDec ENDP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

RE:Un poco de código...

Publicado por marcos (1 intervención) el 09/05/2009 18:26:29
creo que a tu codigo le falta declarar la variable hexa porque no la reconoce
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Un poco de código...

Publicado por agustin (1 intervención) el 31/12/2015 08:53:10
No me suelo meter mucho con asm pero creo que es mucho más sencillo y no es necesario ni tan siquiera usar el truco de la pila ya que con idiv y mult se pueden ir haciendo los cálculos en un solo bucle comprobando el Flag O para ver si hay overflow pudiendo incluso usar más de un registro para números largos y listo. Otra opción sería usar un buffer y otra más la de la pila.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan
Val: 10
Ha mantenido su posición en Ensamblador (en relación al último mes)
Gráfica de Ensamblador

Necesito convertir hexa a decimal en ensamblador

Publicado por Juan (7 intervenciones) el 27/08/2019 19:39:26
Es muy facil , imagina que tienes el 178 en decimal y lo quieres pasar a hexadecimal .
Empiezas asi :

178 / 16 = 11 = B ----> Primer digito Hexadecimal , los decimales los desprecias
16 x 11 = 176
178 - 176 = 2 ------>Segundo digito Hexadecimal

178 Decimal = B2 en Hexadecimal

Un saludo de Juan.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar