Mi sugerencia es actuar con el mejor productor de ensambladores: gcc.
Escriba programas simples en C y luego compílelos con el modificador -S. Obtendrá un archivo .s que contiene el código ensamblador. Juega con él y lo aprenderás. La mejor parte es que si desea aprender un ensamblador diferente, puede simplemente compilar gcc como compilador cruzado y producir ensamblador para cualquier plataforma compatible.
Recuerde desactivar las optimizaciones con -O0, de lo contrario podría encontrar trucos extraños.
Esta es hola mundo en ensamblador
.cstring
LC0:
.ascii "hello world!\0"
.text
.globl _main
_main:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $20, %esp
call L3
"L00000000001$pb":
L3:
popl %ebx
leal LC0-"L00000000001$pb"(%ebx), %eax
movl %eax, (%esp)
call L_puts$stub
movl $0, %eax
addl $20, %esp
popl %ebx
leave
ret
.section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_puts$stub:
.indirect_symbol _puts
hlt ; hlt ; hlt ; hlt ; hlt
.subsections_via_symbols
Eso suena una manera útil de hacerlo. ¿Cómo convierto el archivo .s en un archivo binario? –
con gcc hello.s :) –
¿Mantiene las informaciones de depuración (nombre de la variable, etc.)? –