Último OCB: Día 1
This commit is contained in:
parent
87f25fcd99
commit
d4b2142558
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue