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 :)
A voir également:
- Passer un tableau C à un programme ASM
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Comment faire un tableau croisé dynamique - Guide
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
Ç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
Merci encore :)
Ainsi :
pour tab[0] : +0 octet
pour tab[1]: +1 octet
pour tab[2]: +2 octets
C'est ça ? Merci beaucoup pour ton aide :)