NASM
From Movaxes
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.