Mirad he hecho mi primer code, muy sencillo un hi World clasico pero con unas cosillas mas:
Código
section .text global _start ;parida para tener al linker contento _start: ;entry point mov edx,len ;colocamos en edx como primer argumento de la llamada a sys_write len mov ecx,msg ;en ecx el segundo argumento que es una define double word (la cadena) mov ebx,1 ;el file descriptor, el out standard mov eax,4 ;llamada a sistema (sys_write) int 80h ;llamamos al kernel para que ejecute jmp segundaLlamada ;salto incondicional a otra seción de codigo segundaLlamada: mov edx,length2 ;lo mismo de antes mov ecx,mensaje2 ;lo mismo mov ebx,1 ;lo mismo mov eax,4 ;mas de lo mismo int 80h ;mas todavia mov eax,1 ;llamamos a 1 (sys_exit) mov ebx,0 ;codigo de salida, o eso he entendido int 80h ;otra vez mi querido linux section .data msg db 'Hola mundo!',10 ;cadena mensaje2 db 'Y buenos dias NASM',10 len equ $ - msg ;cadena length2 equ $ - mensaje2
El problema es que ejecuta 3 veces el syswrite cuando solo deberian ser dos, debuggeo y me fijo en que hace el salto a segundaLlamada y despues de eso la vuelve a ejecutar.
Como es eso?
Otra duda, como es que no puedo poner el valor de salto de linea como ah? si es 0x0a porque no puedo poner ah tengo que poner 10 o 0xa no lo entiendo con 0x80 si me deja pues pongo 80h.
Saludos
Saludos