Commodore manía
Commodore 64 => Desarrollo => Ensamblador => Mensaje iniciado 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)
-
Gracias por el aporte :)