cifras decimales de un DD

Foro para postear los temas de ensamblador

Moderator: Junta Directiva

Post Reply
Growdes
Posts: 2
Joined: Tue Jun 30, 2009 9:35 pm
Nombre: lester

cifras decimales de un DD

Post by Growdes » Tue Jun 30, 2009 10:54 pm

Hola soy un estudiante, de ingenieria
informatica de cienfuegos y necesito que me aclaren una duda de ensamblador si esta en
sus posibilidades, la cuestion es la sgte:
Se necesita separar las cifras decimales
de una doble palabra, a un arreglo de byte, lo que tengo hecho es lo sgte
Dato DD
54545H
ARR DB ?,?,?,?,?,?,?,?,?,?

Mov AX, word ptr Dato ; pongo el lsb
en ax
MOv DX, word ptr Dato +2 , pongo el msb en dx


Lo que me
sucede es que no puedo dividir por 10 o por 100 y luego por 1000 por que el cociente y
el resto no me cabrian en ax o dx, mi pregunta es como puedo extraer estas cifras
decimales del numero de doble palabra, saludos al experot y disculpe la molestia;
por favor responder tambien a:
inf200717@ucf.edu.cu

FJ_Sanchez
Usuario Desarrollador
Usuario Desarrollador
Posts: 1082
Joined: Wed Jun 07, 2006 11:09 pm
Nombre: Francisco Javier Sánchez
Location: Vejer de la Frontera
Contact:

Re: cifras decimales de un DD

Post by FJ_Sanchez » Wed Jul 01, 2009 3:05 am

Muy buenas, en primer lugar darte la bienvenida. En segundo lugar, yo no pondría mi mail así por la buenas en un foro, puede que se te llene de más SPAM el buzón de entrada. Y para concluir esta parte, la gente no va a molestarse en contestarte a tu correo, en cualquier caso contestarán al foro para que sirva a más gente.

Ahora con tu problema, no estaría de más decir con que micro se supone que trabajas, porque ensamblador no es algo universal, sino que depende de cada dispositivo. Por ejemplo, no se si trabajas con un micro de 8,16 o 32 bits, tampoco que instrucciones tiene, etc.

Así te digo que nadie te va a poder ayudar.
Un saludo.
_ _ _ _ _ _ _ _ _ _

Hack your mind \\ F.J. Sánchez

Okupa tu mente. \\ _ _ _ _ _ _ _ _ _ _ _ _

dragonet80
Usuario Desarrollador
Usuario Desarrollador
Posts: 1323
Joined: Wed Oct 03, 2007 12:15 am
Location: Ibiza

Re: cifras decimales de un DD

Post by dragonet80 » Wed Jul 01, 2009 11:40 am

Por los registros que hace referencia (AX, DX) supongo que se refiere a un micro compatible x86. Aquí tratamos sobre todo microcontroladores, y no tanto microprocesadores, pero quizá haya alguien que controle del tema. Yo hace muuuucho que ya no me acuerdo del ensamblador de los "PC".

FJ_Sanchez
Usuario Desarrollador
Usuario Desarrollador
Posts: 1082
Joined: Wed Jun 07, 2006 11:09 pm
Nombre: Francisco Javier Sánchez
Location: Vejer de la Frontera
Contact:

Re: cifras decimales de un DD

Post by FJ_Sanchez » Wed Jul 01, 2009 11:53 am

Puff, entonces ni idea... Lo más parecido que yo he usado es el ensamblador del 68000, y de eso hace ya 2 o 3 añitos...
_ _ _ _ _ _ _ _ _ _

Hack your mind \\ F.J. Sánchez

Okupa tu mente. \\ _ _ _ _ _ _ _ _ _ _ _ _

Growdes
Posts: 2
Joined: Tue Jun 30, 2009 9:35 pm
Nombre: lester

Re: cifras decimales de un DD

Post by Growdes » Wed Jul 01, 2009 5:56 pm

las instrucciones que puedo utilizar es del 80286 y 80386, se pueden utilizar los registros de proposito general como bx, ax, dx, y los indices como si, di, los extendidos tambien como eax, ebx etc, pero el problema no radica en eso y espero no molestarlos, yo se que la programacion en esnamblador depende de la arquitectura de la maquina pero lo que yo pregunto ejemplificado es lo sgte
supongamos que tengo un registro de 16 bits o sea AX y en la parte baja de AX se pone AL y en la parte alta AH que tienen respectivamente 8 bits, si quiero dividir AX por un numero entero decimal lo que hago es usar la instruccion DIV que pone el resultado en AL y el resto en AH pero si cuando voy a dividir el resultado o el resto es mas grande que AL o AH, se genera int 0 una interrupcion. ESto es lo que me pasa cuando voy a extraer las cifras decimales por Ejemplo:
el numero 65 001 decimal que cabe en un registro de 16 bits
si lo divido por 10 para extraerle la cifras de las decenas el resto
es muy grande y no cabe en el registro AL.
Entonces ¿como podria sacarles las cifras decimales a ese numero?

Juanjo
Usuario Experto
Usuario Experto
Posts: 451
Joined: Sun Dec 17, 2006 9:44 pm
Contact:

Re: cifras decimales de un DD

Post by Juanjo » Thu Jul 02, 2009 10:29 pm

Buenas,

Puedes hacer lo siguiente, división entera:

Dividendo = 57 decimal = 0011 1001
Divisor = 12 decimal = 0000 1100

El registro que contiene el Divisor lo has de desplazar a la izquierda, es decir multiplicar por 2 hasta que el bit más significativo sea 1. Esto te dará un número de desplazamientos que lo vamos a llamar "k". "C" será el cociente, y Ck cada uno de los bits del cociente.

Luego has de restar al Dividendo el divisor desplazado. Esto puede darte dos resultados:

Si el resultado es negativo el valor binario de Ck es 0.
Si el resultado es positivo el valor binario de Ck es 1. Y se toma el resto de la división como nuevo Dividendo.

Se desplaza a la derecha el divisor anterior para seguir con la siguiente iteración.

Proceso:

Primero.- Multiplicamos el divisor por 2 hasta que el bit más significativo sea 1. Divisor = 0000 1100, al desplazarlo nos quedará 1100 0000 y el valor de k = 4.

Segundo.- Procedemos con la primera resta.

0011 1001
1100 0000
---------------
Resultado negativo, esto implica que C4 = 0

Tercero.- Desplazamos el Divisor y el dividendo sigue siendo el mismo.

0011 1001
0110 0000
---------------
Resultado negativo, esto implica que C3 = 0

Cuarto.- Desplazamos el Divisor y el dividendo sigue siendo el mismo.

0011 1001
0011 0000
--------------
0000 1000 Resultado positivo, esto implica C2 = 1 y el dividendo para la sigiente iteración será 0000 1000.

Quinto.- Desplazamos el Divisor y el dividendo es el resto del anterior ya que el resultado fue positivo.

0000 1000
0001 1000
----------------
Resultado negativo, esto implica C1 = 0.

Sexto.- Desplazamos el Divisor y el dividendo sigue siendo el mismo.

0000 1000
0000 1100
--------------
Resultado negativo, esto implica C0 = 0. Está es la última iteración ya que hemos obtenido el último bit del Cociente.

Cociente = 0000 0100

Si quieres hacerlo con más registros de 8 bits, tan solo tienes que tener en cuenta el bit the carry para realizar las operaciones y el bit que desplazas cuando salga de un regitro en el que se encuentran los bits de mayor peso los has de desplazar a los registros donde se encentran los bits de mayor peso. De esta forma puedes hacer operaciones con 8, 16, 24, 32, etc bits. Si prefieres realiza operaciones con 2 registros de 8 bits manualmente antes de programar el algoritmo.

Espero que te sirva.
Sytek

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest