Último OCB: Día 1

This commit is contained in:
jota 2022-01-15 11:12:40 -03:00 committed by Roberto MF
parent 87f25fcd99
commit d4b2142558
1 changed files with 17 additions and 10 deletions

View File

@ -237,7 +237,7 @@ uxntal es el lenguaje ensamblador para la máquina uxn.
estuvimos hablando antes sobre el cpu uxn y las 32 instrucciones que sabe cómo ejecutar, cada una de ellas codificada como una sola palabra de 8 bits (byte).
ese lenguaje ensamblador uxntal implica que hay una relación uno a uno mapeando de una instrucción escrita en el lenguaje a una palabra de 8 bit correspondiente que el cpu puede interpretar.
que uxntal sea un lenguaje "ensamblado" implica que hay una relación uno a uno mapeando de una instrucción escrita en el lenguaje a una palabra de 8 bit correspondiente que el cpu puede interpretar.
por ejemplo, la instrucción ADD (suma) en uxntal es codificada como un byte con el valor 18 en hexadecimal y corresponde al siguiente conjunto de de acciones: toma los dos elementos superiores de la pila, los suma y empuja el resultado a la pila.
@ -272,7 +272,7 @@ ensamblémoslo y corrámoslo:
$ ./bin/uxnasm hola.tal bin/hola.rom && ./bin/uxnemu bin/hola.rom
```
veremos una salida con el siguiente aspecto:
se abrirá una ventana negra, y en la consola veremos una salida parecida a la siguiente:
```
Assembled bin/hola.rom in 5 bytes(0.40% used), 0 labels, 0 macros.
@ -317,13 +317,13 @@ mirando en la tabla de dispositivos de la referencia varvara, podemos ver que el
=> https://wiki.xxiivv.com/site/varvara.html varvara
asique, el dispositivo 18 corresponde a "escribir en consola", o salida estándar.
así que, el dispositivo 18 corresponde a "escribir en consola", o salida estándar.
¡nuestro programa está enviando el valor hexadecimal 68 (carácter 'h') a la salida estándar!
puedes ver los valores hexadecimales de los caracteres ascii en la siguiente tabla:
=> https://wiki.xxiivv.com/site/ascii.html ascii table
=> https://wiki.xxiivv.com/site/ascii.html tabla ascii
### números literales
@ -339,6 +339,13 @@ podemos ver que el ensamblador reporta que nuestro programa es de 5 bytes de tam
Assembled bin/hola.rom(5 bytes), 0 labels, 0 macros.
```
podemos confirmarlo usando el programa wc (word count):
```
$ wc --bytes hola.rom
5 hola.rom
```
para le curiose (¡como tú!), podemos usar una herramienta como hexdump para ver sus contenidos:
```
@ -349,7 +356,7 @@ $ hexdump -C bin/hola.rom
80 es el "opcode" correspondiente a LIT y 17 es el opcode correspondiente a DEO. ¡y ahí están nuestros 68 y 18!
¡osea, efectivamente, nuestro programa ensamblado presenta una correspondencia uno a uno con las instrucciones que acabamos de escribir!
¡o sea, efectivamente, nuestro programa ensamblado presenta una correspondencia uno a uno con las instrucciones que acabamos de escribir!
de hecho, podríamos haber escrito nuestro programa con estos números hexadecimales (el código máquina) y hubiera funcionado igual:
@ -389,7 +396,7 @@ las runas son caracteres especiales que indican a uxnasm algún preprocesamiento
## runa de pad absoluto
ya vimos la primera de ellas: | define un pad absoluto: la dirección donde el siguiente elemento escrito será ubicado en memoria.
ya vimos la primera de ellas: | define un pad absoluto, o sea, la dirección donde el siguiente elemento escrito será ubicado en memoria.
si la dirección es de 1 byte de longitud, es asumido que es una dirección del espacio de entrada/salida o de la página cero.
@ -408,7 +415,7 @@ usando esta runa, podemos reescribir nuestro primer programa como:
|0100 #68 #18 DEO
```
el siguiente tendría el mismo comportamiento que el programa de arriba, pero usando un byte menos (en la siguiente sección/día veremos por qué)
el siguiente tendría el mismo comportamiento que el programa de arriba, pero usando un byte menos (en el siguiente día veremos por qué):
```
( hola.tal )
@ -421,13 +428,13 @@ importante: recuerda que esta runa (y las otras con la palabra "literal" en su n
si solo queremos tener un número específico en la memoria principal, sin empujarlo a la pila, simplemente escribiríamos el número tal cual, "crudo". esta es la forma en que lo hicimos en nuestros primeros programas de arriba.
## runa de carácter crudo o "raw"
## runa de carácter crudo o "raw"
esta es la runa de carácter crudo: '
nos permite que uxnasm decodifique el valor numérico de un carácter ascii.
nuestro "programa hola" luciría de la siguiente manera, usando las nuevas runas que acabamos de aprender:
nuestro programa "hola" luciría de la siguiente manera, usando las nuevas runas que acabamos de aprender:
```
( hola.tal )
@ -556,7 +563,7 @@ usando todos estos macros y runas, nuestro programa puede terminar luciendo como
termina siendo ensamblado en los mismos 25 bytes que los ejemplos de arriba, pero con suerte más legible y mantenible.
podemos "mejorar" este programa haciendo que un bucle imprima los caracteres, pero estudiaremos eso más tarde.
podemos "mejorar" este programa haciendo que un bucle imprima los caracteres, pero estudiaremos eso más tarde :)
# ejercicios