Mi primer programa en NASM

Iniciado por Debci, 2 Abril 2010, 11:51 AM

0 Miembros y 1 Visitante están viendo este tema.

Debci

Hola a a todos, me va gustando esto del asm xD
Mirad he hecho mi primer code, muy sencillo un hi World clasico pero con unas cosillas mas:

Código (asm) [Seleccionar]

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

Eternal Idol

¿Como que se ejecuta tres veces el sys_write? ¿No sera que al olvidarte de poner el 0 terminador de cadena al escribir msg tambien sale mensaje2?

¿Probaste con 0Ah?
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci

Cita de: Eternal Idol en  2 Abril 2010, 12:10 PM
¿Como que se ejecuta tres veces el sys_write? ¿No sera que al olvidarte de poner el 0 terminador de cadena al escribir msg tambien sale mensaje2?

¿Probaste con 0Ah?
pero se supone que solo lo llamo una vez como es que escribe dos veces la cadena?

Saludos

Eternal Idol

Cita de: ..::| D3Bć1 |::. en  2 Abril 2010, 12:17 PMpero se supone que solo lo llamo una vez como es que escribe dos veces la cadena?

Llamas a sys_write dos veces (lineas 10 y 19). No es cosa del 0 terminador ya que pasas el tamaño exacto de la cadena como parametro pero tal vez eso este mal, fijate que valores tienen ahora y que valores toman si definis las variables asi:

Código (asm) [Seleccionar]
msg db 'Hola mundo!',10 ;cadena
len equ $ - msg ;cadena
mensaje2 db 'Y buenos dias NASM',10
length2 equ  $ - mensaje2
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci


Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci