Bonjour, je suis assez nul en programmation et j'ai un problème qui doit être assez élémentaire:
Il s'agit de programmer un code en C qui construit une liste de disons 10 nombres. Le programme appelle ensuite une fonction bubblesort écrite en assembleur.
Mon problème est élémentaire: Évidement je n'envoie pas la liste de tous les nombres, je veux envoyer l'adresse mémoire du premier nombre à Assembleur, et c'est déjà ca qui coince. J''ai commencé par écrire une programme qui en fait ne fait rien - l'algorithme bubblesort on verra plus tard.
Mon programme se contente d'envoyer la premiere adresse à ma fonction assembleur, qui d'après ce que j'ai compris d'assembleur, attérit dans le registre "rdi" (je travaille en linux 64bit). Ma fonction assembleur ne fait (pour l'instant) que copier rdi dans rax. C'est donc le résultat.
Mon programme en C fait un printf de cette adresse, puis il appelle la fonction, puis il refait un printf du résultat de la fonction.
les deux printf devraient être identiquent, il ne le sont pas. le deuxième ne me donne que la deuxième moitié car ma fonction est un int, donc trop petite pour 64 bits. Mais si je la fait plus grande, avec double par exemple, les résultats sont totalement faux...
Quelqu'un a une idée? Sûrement qu'il faut s'y prendre complètement autrement.
Merci d'avance.
Christophe
PS: voilà les codes en question
Code:--- #include<stdio.h> int bubblesort(); int main() { int laenge = 10; int i; int j; int liste[laenge]; printf("%p \n", &liste[0] ); for (i = 0; i < laenge; i++) { liste[i] = 1; } printf("%x \n\n", bubblesort(&liste[0])); return 0; } ---ASSEMBLEUR section .text global bubblesort bubblesort: mov rax, rdi jmp ende ende: ret
-----