Questo listato ASM converte una stringa ASCII in un numero intero.
Ho questo problema: all'etichetta "negativo", se io elimino il comando "movl $1, nega" il programma funziona correttamente, ma se includo questo comando il programma non va bene. Ovviamente a me serve che il comando sia applicato.

Grazie.


codice:
.section .data

car:	.byte 0
nega:   .long 0

.section .text
.global atoi

.type atoi, @function 

atoi:

  	pushl %ebx 
  	pushl %ecx  
  	pushl %edx  

  	xorl %eax, %eax
  	jmp inizio

inizio:

  	pushl %eax

  	movl  $3, %eax
  	xorl  %ebx, %ebx 
  	leal  car, %ecx 

  	mov   $1, %edx 
  	int   $0x80 
  	cmp   $10, car      	# se e' stato letto il carattere '\n'
  	je    fine_ciclo

  	cmp   $45, car      	# se e' stato letto il carattere '-'
  	je    negativo

  	subb  $48, car      	# converte il codice ASCII della cifra nel numero corrisp.
  	popl  %eax
  	movl  $10, %ebx
  	mull  %ebx 

  	addl  car, %eax
  	jmp   inizio

negativo:
	movl $1, nega
  	popl %eax
  	jmp inizio

fine_ciclo:
  	cmp $0, nega
  	je non_negativo	

  	popl %eax
  	neg %eax
  	jmp fine

non_negativo:
  	popl %eax

fine:
  	popl %edx
  	popl %ecx 
  	popl %ebx

  	ret