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
file assembler :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; }
codice:.global main main : xor %eax, %eax xor %ebx, %ebx xor %ecx, %ecx xor %edx, %edx call getch p: ret

					
					
					
						
  Rispondi quotando
  