NASM
From Movaxes
Line 1: | Line 1: | ||
- | La razón por la que escogí NASM es porque usa la sintaxis de Intel que es menos complicada que la de AT&T y es mejor para aprender, mas adelante pondré algunos tutoriales sobre las diferencias entre las dos sintaxis. | + | La razón por la que escogí NASM es porque usa la sintaxis de Intel que es menos complicada que la de AT&T y es mejor para aprender, mas adelante pondré algunos tutoriales sobre las diferencias entre las dos sintaxis. Claro que el GAS en GNU/Linux es excelente y te enseña a entender todo lo que haces, pero en nuestro caso empezaremos con NASM y luego al programar en Linux usaremos el GAS que se lleva muy bien con el GCC y el G++ (útil para sistemas operativos) |
- | + | ||
- | + | ||
Algunas cosas que debes tener en cuenta es NASM: | Algunas cosas que debes tener en cuenta es NASM: | ||
- | Diferencia entre mayúsculas y minúsculas, así que no es lo mismo '''foo''' que '''FOO''' o que '''Foo'''. | + | *Diferencia entre mayúsculas y minúsculas, así que no es lo mismo '''foo''' que '''FOO''' o que '''Foo'''. |
- | + | *En NASM siempre que quieras acceder al ''contenido'' de una locación de la memoria debes encerrar en '''[]'''. | |
- | En NASM siempre que quieras acceder al ''contenido'' de una locación de la memoria debes encerrar en '''[]'''. | + | *Si una línea es demasiado larga puedes seguir en la de abajo usando '''\''' que le indica a NASM que la línea de abajo es parte de la misma. |
- | + | ||
- | Si una línea es demasiado larga puedes seguir en la de abajo usando '''\''' que le indica a NASM que la línea de abajo es parte de la misma. | + | |
- | + | ||
Otra cosa muy útil es que si te confundes y pones algo como '''loadsb''' cuando lo correcto es '''lodsb''' NASM piensa que estás declarando un label: | Otra cosa muy útil es que si te confundes y pones algo como '''loadsb''' cuando lo correcto es '''lodsb''' NASM piensa que estás declarando un label: | ||
<pre> | <pre> | ||
loadsb | loadsb | ||
</pre> | </pre> | ||
+ | |||
Nasm no se dará cuenta de tu erro y pensará que es un label, me ha pasado y es difícil encontrar el error. Lo que puedes hacer es agregar '''-w+orphan-labels''' cuando compiles, así: | Nasm no se dará cuenta de tu erro y pensará que es un label, me ha pasado y es difícil encontrar el error. Lo que puedes hacer es agregar '''-w+orphan-labels''' cuando compiles, así: | ||
+ | |||
<pre> | <pre> | ||
nasm -w+orphan-labels -o boot boot2.asm | nasm -w+orphan-labels -o boot boot2.asm | ||
</pre> | </pre> | ||
+ | |||
+ | Eso te salvará de errores. |
Revision as of 16:26, 12 March 2007
La razón por la que escogí NASM es porque usa la sintaxis de Intel que es menos complicada que la de AT&T y es mejor para aprender, mas adelante pondré algunos tutoriales sobre las diferencias entre las dos sintaxis. Claro que el GAS en GNU/Linux es excelente y te enseña a entender todo lo que haces, pero en nuestro caso empezaremos con NASM y luego al programar en Linux usaremos el GAS que se lleva muy bien con el GCC y el G++ (útil para sistemas operativos)
Algunas cosas que debes tener en cuenta es NASM:
- Diferencia entre mayúsculas y minúsculas, así que no es lo mismo foo que FOO o que Foo.
- En NASM siempre que quieras acceder al contenido de una locación de la memoria debes encerrar en [].
- Si una línea es demasiado larga puedes seguir en la de abajo usando \ que le indica a NASM que la línea de abajo es parte de la misma.
Otra cosa muy útil es que si te confundes y pones algo como loadsb cuando lo correcto es lodsb NASM piensa que estás declarando un label:
loadsb
Nasm no se dará cuenta de tu erro y pensará que es un label, me ha pasado y es difícil encontrar el error. Lo que puedes hacer es agregar -w+orphan-labels cuando compiles, así:
nasm -w+orphan-labels -o boot boot2.asm
Eso te salvará de errores.