ciao...

Programmo in assembler e mi serviva una funzione che in assembler non posso ( o meglio non so ) scrivere e l'ho scritta in c per poi richiamarla... fin qui tutto bene!!! Ma il problema si presenta sul ritorno della funzione....

Io so che questa mette il risultato in eax se è di 32bit o eax:edx se è da 64 , io ottengo il risutlato in eax giustamente ma mi viene modificato anche il registro ecx senza motivo... xkè??? Ho forse sbagliato qualcosa??
il codice delle funzioni è questo :

codice getch.c
codice:
extern char getch(void) {

	struct termios presente, modificata; 
	int res, input; 


	res = tcgetattr (STDIN_FILENO, &presente); // salvo le impostazioni correnti della scelta , STDIN_FILENO indica il descritore della sheel
	
	if(res) { 
		perror("Errore nella lettura delle impostazioni del terminale");
		return res; 
	}

	modificata = presente; // assegno il valore all'altra a struttura per poterci lavorare 

	modificata.c_lflag &= (~ICANON);  // tolgo il controllo canonico 

	res = tcsetattr (STDIN_FILENO,TCSANOW, &modificata); // setto il nuovo valore 	

	if (res) { 
		perror("Errore nel settaggio dei valori"); 
		return res; 
	}


	input = (char) getchar(); 

	res = tcsetattr(STDIN_FILENO,TCSANOW, &presente); // rimposto le vecchie impostazioni 


	if (res) { 

		perror("Errore nel settaggio dei valori");
		return res;

	}

	return input; 


}
file assembler :
codice:
.global main 

main : 
	xor %eax, %eax
	xor %ebx, %ebx
	xor %ecx, %ecx
	xor %edx, %edx
	
	call getch
p:
	ret