Passer un tableau C à un programme ASM
Résolu
Stratosphr
-
Stratosphr -
Stratosphr -
Bonjour, je dispose de deux fichiers, un fichier "fich.c" et un fichier "fich.asm".
Mon code C fait appel à une fonction présente dans mon programme Assembleur. Jusqu'ici, pas de problème.
J'aimerais à présent envoyer un tableau de char à cette fonction.
Apparemment, j'arrive à l'envoyer, mais je voudrais savoir comment faire en Assembleur pour récupérer la valeur de tab[0], tab[1], tab[2], etc.
Je donne un exemple :
fich.c :
int main(){
char tab[3]={'a', 'b', 'c'};
func_asm(tab) //Appel à la fonction
return 0;
}
fich.asm :
segment .text:
global func_asm
func_asm:
//Stocker la valeur de tab[2] dans le registre eax
Que dois-je mettre dans la fonction func_asm ???
Merci d'avance pour votre aide :)
Mon code C fait appel à une fonction présente dans mon programme Assembleur. Jusqu'ici, pas de problème.
J'aimerais à présent envoyer un tableau de char à cette fonction.
Apparemment, j'arrive à l'envoyer, mais je voudrais savoir comment faire en Assembleur pour récupérer la valeur de tab[0], tab[1], tab[2], etc.
Je donne un exemple :
fich.c :
int main(){
char tab[3]={'a', 'b', 'c'};
func_asm(tab) //Appel à la fonction
return 0;
}
fich.asm :
segment .text:
global func_asm
func_asm:
//Stocker la valeur de tab[2] dans le registre eax
Que dois-je mettre dans la fonction func_asm ???
Merci d'avance pour votre aide :)
1 réponse
-
Bonjour
Ça dépend de ton assembleur et de ton C. Mais il y a un truc simple : tu écris ta fonction func_asm en C et tu utilises l'option du compilateur pour voir le code assembleur généré. Tous le compilateurs que j'ai utilisés avaient cette option (faut lire la doc pour la trouver, du côté des options du listing généré par la compilation).
Tu verras très probablement qu'il récupère l'adresse de base du tableau dans la pile, puis qu'il ajoute 3, puis qu'il lit un octet par adressage indirect.
Mais difficile d'être plus précis pour celui qui n'a pas ton compilateur-
D'accord merci beaucoup. Je tourne sous linux et j'utilise la commande "nasm" pour compiler mon fichier ASM, puis "gcc" pour compiler mon fichier C et lier mes fichiers objet. Je vais voir ce que cela donne :). Petite question, pourquoi ajouterait-il 3 et pas un autre nombre ? Il doit y avoir quelque-chose qui m'échappe...
Merci encore :) -
-
-
-
-