TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Bombillo en 07 de Enero de 2008, 19:46:02

Título: Como dividir dos numeros con assembler
Publicado por: Bombillo en 07 de Enero de 2008, 19:46:02
Buenas tardes amigos. Como puedo hacer para dividir dos numeros con assembler? Espero que me puedan ayudar. Gracias...
Título: Re: Como dividir dos numeros con assembler
Publicado por: MGLSOFT en 07 de Enero de 2008, 20:08:43
Creo que no sirve de mucho así, que tal si quiero dividir un número de 16 bits en uno de ocho??
Ejemplo:
16356 / 4

Si lo haces con restas, debes tener unas cuantas iteracciones, no ??

Sirve eso entonces??
Título: Re: Como dividir dos numeros con assembler
Publicado por: Bombillo en 07 de Enero de 2008, 20:42:43
Con restas sucesivas hasta donde ya no alcances.

Ejemplo: 25/4

25 - 4 = 21 (alcanzó 1 vez)
21 - 4 = 17 (alcanzó 2 veces)
17 - 4 = 13 (alcanzó 3 veces)
13 - 4 = 9 (alcanzó 4 veces)
9 - 4 = 5 (alcanzó 5 veces)
5 - 4 = 1 (alcanzó 6 veces) Resultado
1 - 4 = -3 (ya no alcanzó) Residuo

Resultado = 6, Residuo = 1


OK Gracias amigo por la ayuda. Ya tengo la idea de como desarrollar el assembler
Título: Re: Como dividir dos numeros con assembler
Publicado por: aitopes en 07 de Enero de 2008, 21:07:17
Así es, el procedimiento es el mismo así sean números de 24 bits ó de 32 bits. Por ejemplo, las rutinas de Microchip para dividir un número de 16 bits en uno de ocho toman entre 176 y 294 ciclos de instrucción,


Miercoles!!!!  :shock:

Nunca crei que fuese tan burdo el sistema. Claro, de ASM no tengo ni idea, pero pense que las rutinas de division serian algo mas sofisticadas, como por ejemplo una implementacion de un algoritmo parecido al que se usa para dividir a mano, pero en binario.....

Me has sorprendido! :)

Un abrazo!
Título: Re: Como dividir dos numeros con assembler
Publicado por: aitopes en 07 de Enero de 2008, 21:09:31
Me referia a algo asi:

 División de números binarios

La división en binario es similar a la decimal, la única diferencia es que a la hora de hacer las restas, dentro de la división, estas deben ser realizadas en binario. Por ejemplo, vamos a dividir 100010010 (274) entre 1101 (13):

 100010010 |1101
                 ——————
 - 0000      010101
———————
 10001
- 1101
———————
  01000
 - 0000
 ———————
   10000
  - 1101
  ———————
    00111
   - 0000
   ———————
     01110
    - 1101
    ———————
     00001


(Sacado de la wikipedia (http://es.wikipedia.org/wiki/Sistema_binario#Divisi.C3.B3n_de_n.C3.BAmeros_binarios), claro!)
Título: Re: Como dividir dos numeros con assembler
Publicado por: aitopes en 07 de Enero de 2008, 22:19:33
Vos sabes que no use nunca ASM en los PICs. En la epoca de las Commodore, hice algunas rutinas en el ASM del 6510 o 6502 (ya ni el numero del micro me acuerdo). Si bien es una pesadilla, esta bueno para aguzar el ingenio.

Voy a ver si me hago tiempo de darle una mirada a esas AN de Microchip. Aunque posiblemente nunca necesite hacer una division en binario usando ASM, no esta demas ver como se resuelve un problema aparentemente simple, pero que para ser eficiente requiere una gran dosis de sapiencia.

Saludos!
Título: Re: Como dividir dos numeros con assembler
Publicado por: Leon Pic en 07 de Enero de 2008, 23:02:46
Hola.También, se puede hacer rotando el bit a la izquierda.

 Sugerencia:

Este tema debería estar en assemblerr, no en offtopic.
Título: Re: Como dividir dos numeros con assembler
Publicado por: SavageChicken en 08 de Enero de 2008, 01:52:10
En Almacén de Assembler, hay unas rutinas de mi autoría, una para dividir y una multiplicar, que están bien comentadas.

Te dejo el Link (http://www.todopic.com.ar/foros/index.php?topic=17479.0), y espero te sirvan

Salud  8)