Commodore manía

Commodore 64 => Desarrollo => Ensamblador => Mensaje iniciado por: albanchez2k en Abril 04, 2012, 12:16:44

Título: Algoritmo de división en ensamblador
Publicado por: albanchez2k en Abril 04, 2012, 12:16:44
Al igual que para la multiplicación, no existe un op-code que haga la división. Este es un algoritmo de división. Está hecho en Kikcass.

:BasicUpstart2(inicio)         // "trampolín" basic llamador del programa

.const D   = $10            //Dividendo
.const d   = $11            //divisor
.const r1  = $12            //cociente
.const r2  = $13            //resto
.const max = $ff            //valor maximo
.const min = $00            //valor minimo
.const ite = $08            //Iteraciones

.pc = $810 "Codigo"

// Codigo del programa

inicio:
         sei            //desactiva interrupciones
         lda V1            //inicializo Dividendo       
         sta D            //
         lda V2            //inicializo divisor   
         sta d            //
         lda #min         //inicializo acumulador
         sta r1            //inicializo r1
         ldx #ite         //inicializo X
         
bucle:
         asl r1            //desplazo r1 a la izquierda
         asl D            //desplazo D a la izquierda
         rol               //roto A a la izquierda
         cmp d            //comparo A con d
         bcc comp         // si A < d comp
         sec               //
         sbc d            //A - d
         inc r1            //incremento r1
comp:      dex               //decremento X
         bne bucle         //si X <> 0 bucle
fin:
         sta r2            //resto
         cli            //activa interrupciones
         rts             // vuelve al BASIC

// Datos
V1:    .byte 0               //Variable Dividendo
V2:    .byte 0               //Variable divisor

V1 es la variable de entrada del Dividendo y V2 del divisor.
r1 es el cociente y r2 es el resto

Se puede probar mediante:

poke2102,MMM:poke2103,mmm
sys2064
print peek(18):print peek(19) 
Título: Re:Algoritmo de división en ensamblador
Publicado por: josepzin en Abril 04, 2012, 12:59:59
Gracias por el aporte :)