Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------------------------
- * Title :Conversor de Entero a dígitos numéricos en ASCII
- * Written by :Fulgencio
- * Date :
- * Description:Es una rutina de conversión del valor contenido en un registro
- * en una cadena de dígitos numéricos separados en ASCII.
- *-----------------------------------------------------------
- ORG $1000
- START: ; first instruction of program
- MOVE.L #655350123,D0 *Máximo valor 655359999
- MOVE.L #NUMASC,A0
- JSR ITOA
- MOVE.L A0,A1
- MOVE.L #13,D0
- TRAP #15
- SIMHALT ; halt simulator
- ITOA MOVEM.L A0-A1/D0-D2,-(A7)
- CLR.L D1
- MOVE.L A0,A1 *Hace una copia del inicio de la cadena
- CMP.L #655360,D0 *Máximo número + 1 que se puede divir por 10 con resultado .W
- BCS PASO2 *Directos a PASO2 si es menor
- PASO1
- DIVU #10000,D0 *Fraccionamos el número grande para poder dividir por 10 cada parte
- MOVE.W D0,D1 *Guardamos el cociente para el PASO2
- CLR.W D0 *Lo eliminamos de D0
- SWAP D0 *Procesaremos en primer lugar el resto
- MOVE.L #4,D2 *Contador. En este caso hay que sacar las 4 cifras aunque sean ceros
- JSR BUCDIG *Sacamos sus cifras
- MOVE.L D1,D0 *Ahora procesaremos el cociente en el PASO2
- PASO2
- CLR.L D2 *Aquí ya no hay que sacar un número de cifras exacta
- JSR BUCDIG
- *Pasamos a invertir la cadena porque las cifras se calculaban
- *en orden inverso
- MOVE.B #0,(A0) *Marca de fin de cadena
- INVERT *Intercambia los dígitos del final con los del principio.
- MOVE.B -(A0),D0 *Usa D0 como registro intermedio
- CMP.L A1,A0 *¿Se han encontrado los registros en el centro?
- BCS FINITOA *Si es así, hemos acabado
- MOVE.B (A1),(A0) *Intercambiando valores
- MOVE.B D0,(A1)+
- JMP INVERT *bucle
- FINITOA
- MOVEM.L (A7)+,A0-A1/D0-D2
- RTS
- BUCDIG
- DIVU #10,D0
- SWAP D0
- ADD.B #$30,D0 *Suma
- MOVE.B D0,(A0)+ *Va guardando los restos de dividir por 10
- TST.L D2
- BEQ NOSUB *Si es 0 no hay que hacer cuenta atrás
- SUB.L #1,D2 *Descuenta un dígito del contador
- NOSUB
- CLR.W D0 *Borra el resto ya almacenado
- SWAP D0 *Recupera el cociente para seguir dividiendo
- BNE BUCDIG *Hasta que nos de cociente 0
- TST.L D2
- BNE BUCDIG
- RTS
- * Put variables and constants here
- ORG $5000
- NUMASC DS.B 10
- END START ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement