2010-04-22 8 views
5

Estoy escribiendo un compilador y he seguido todos los pasos (tokenización, análisis sintáctico, estructuras de árbol de sintaxis, etc.) que muestran en todos los libros de compilación. (¡No haga ningún comentario con el enlace a la pregunta "Recursos para escribir un compilador").Elegir el ensamblador correcto y de aprendizaje para compilación

He elegido usar NASM junto con alink como mi back-end.

Ahora mi problema es: simplemente no puedo encontrar ningún recurso bueno para aprender NASM y el montaje en general.

El wikibook (alemán) en el conjunto x86 es horrible. Ni siquiera explican el código que escriben allí, actualmente ni siquiera puedo obtener cosas simples como agregar 1 a 2 y dar salida al resultado.

  • ¿Dónde puedo aprender NASM x86 assembly?
+2

No hay ninguna razón para que un compilador tenga un ensamblador de salida. Haga que emita un idioma que le resulte familiar, como C, y luego use el compilador C (o lo que sea) para producir el ejecutable final. –

+0

su pregunta es más como "¿Dónde puedo aprender NASM x86 ensamblado?" como tú mismo lo dijiste. Elija un tema mejor, ya que no tiene nada que ver con los compiladores. ¿Has considerado llvm? – topskip

+1

Para obtener puntos de bonificación, envíe su código en la misma capa que está compilando. Entonces compila eso. –

Respuesta

1

Bueno, si acepta un libro como referencia. Mi autor favorito de los días que aprendí Pascal en los años 80 fue Jeff Duntemann. Su último libro de asamblea cubre NASM. http://www.duntemann.com/assembly.htm

No está seguro de qué sistema operativo que está destinada a una audiencia, pero el hecho de que el libro anterior se apuntan a Linux debería no ser un problema, las construcciones de montaje son lo que le interesa.

Para ser sinceros, la el montaje real para la generación de código no es la parte más difícil, en mi humilde opinión, creo que la gestión del registro es donde está el verdadero aprendizaje.

¡Buena suerte!

1

A menos que haya comprobado hacia fuera, manual de NASM es muy buen recurso para aprender sobre NASM: http://www.nasm.us/doc/

Comparación de NASM y GAS también ayuda un poco: http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html

canal de IRC en Freenode #asm SE (r) ver proporciona estos enlaces:

que también dedicó algo de tiempo para triturar un poco hola mundo para ti:

bits 32 
section .data 
    greeting db "hello world", 10 
section .text 
global _start 
_start: 
    mov eax, 4 ; sys_write 
    mov ebx, 1 ; stdout 
    mov ecx, greeting 
    mov edx, 12 ; greeting.length 
    int 0x80 ; system call interrupt 

    mov eax, 1 ; sys_exit 
    mov ebx, 0 
    int 0x80 

Armar con esto:

nasm -f elf -o example.o example.asm 
ld -o example example.o -melf_i386 

Yo he escrito un pequeño generador de código en python. Aunque dejé esa cosa en el medio hace un tiempo. Recientemente escribí una herramienta un poco diferente que podría ser útil para cualquier persona que aborde el montaje. Ahora mismo también estoy pidiendo ayuda ...Excepto que parece que tengo que hacer algo de autoayuda allí: x86 instruction encoding tables

La pieza anterior del generador de código que tengo está en http://bitbucket.org/cheery/g386/ hasta que ponga en funcionamiento mi nuevo generador de código basado en tablas.

Cuestiones relacionadas