> Página 3

> Página 1 - Página 2 - Página 3 - Página 4 - Página 5 - Página 6

> | 11a - 11b - 11c - 11d - 11e - 12a - 12b - 12c - 13 - 14 - 15 | translate this page

> Página Cero | Basic ROM | Kernal ROM
> VIC II | SID | CIA

> A = Acumulador | X = Registro X | Y = Registro Y

> Nº 11a.- Imprimir un texto en pantalla
> Por Curtis White en _Bonkers_

> * = $1000 |  | ; SYS 4096.
> | LDX #0 | ; Carga X con #0, que es el valor inicial de un bucle.
> BUCLE | LDA TEXTO,X | ; Carga A con el valor de TEXTO y siguientes.
> | JSR $FFD2 | ; Salta a la subrutina en ROM $FFD2 que saca a pantalla el carácter ASCII cuyo código está en A.
> | INX | ; Incrementa el valor del registro X.
> | CPX #13 | ; Compara el valor del registro X con #13, que es el final del texto.
> | BNE BUCLE | ; Salta a BUCLE hasta que el valor del registro X=#13.
> | RTS | ; Retorna al BASIC.
> TEXTO | .TEXT "HOLA A TODOS." | ; Este es el texto a imprimir. Como vemos tiene 13 caracteres.

> Para entender más: Como vemos, este programa utiliza la subrutina en ROM $FFD2 para imprimir y compara X con el número de caracteres que tiene el texto.
> Para aprender más: También podríamos hacer hacer lo siguiente pero ocuparíamos más espacio de memoria, aunque el formato es diferente ya que el texto tiene al final un .BYTE 0, que será el motivo de comparación con el valor de A.

> | LDX #0 | ; Carga X con #0, que es el valor inicial de un bucle.
> BUCLE | LDA TEXTO,X | ; Carga A con el valor de TEXTO y siguientes.
> | CMP #0 | ; Compara el valor de A con #0, que es el final del texto.
> | BEQ FIN | ; Salta a FIN cuando el valor del registro X=#0.
> | JSR $FFD2 | ; Salta a la subrutina en ROM $FFD2 que saca a pantalla el carácter ASCII cuyo código está en A.