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

Rispondi quotando