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