Si se pudiese dar una explicación más exhaustiva de ¿Cuál es la mejor forma de usarlo?
Un ejemplo mediante la arquitectura IA-32 para hacer operaciones como de lectura y escritura se tienen dos alternativas:
- System calls de linux.
- Usar las funciones externas de C como printf, scanf.
Usando las system calls o llamadas del sistema sería:
Código
section .data msg: db "Coding in asm", 10, 0 ;define a string smsg: equ msg ;length of msg section .text global _start: ;define a macro for print %macro print 2 mov eax, 4 ;call to the O.S. for write mov ebx, 1 ;file descriptor mov ecx, %1 ;put the msg mov edx, %2 ;put the length of msg int 80h ; generate one interruption mov eax, 1 ;call to the system out mov ebx, 0 ;pass one parameter int 80h %endmacro _global: print msg, smsg
Para generar el código objeto y ejecutarlo se usa los sisguientes comandos
nasm -f elf msg.asm
ld -m elf_i386 -s -o msg msg.o
./msg
Usando las funciones externas de C
Código
section .data msg: db "Coding in asm", 10, 0 ;define a string section .text extern printf ;include the printf function in asm program global main main: push ebp mov ebp, esp ;pass the reference of reg esp to ebp push msg call printf ;print the current element in the stack mov esp, ebp pop ebp ;free the stack ret