J'ai un problème très simple; J'ai un tableau qui devrait me stocker les résultats d'une routine d'assembleur en ligne . La question que j'ai est maintenant comment puis-je déplacer les données de l'assembleur en ligne dans la matrice? J'utilise gcc pour compiler sur une machine x86. Considérons le code simple suivant fragement:Déplacement des données de l'assemblage en ligne dans la matrice en C
int main() {
int result[32];
__asm__ __volatile__( ".mov esi, 32 \n\t");
__asm__ __volatile__( ".mov edi, 32 \n\t");
__asm__ __volatile__( ".rept 32 \n\t");
__asm__ __volatile__( ".mov eax, esi \n\t");
__asm__ __volatile__( ".sub eax, edi \n\t");
__asm__ __volatile__( ".sub edi, 1 \n\t");
//Code here for storing eax in result[0], result[1], ... result[31],
__asm__ __volatile__( ".endr \n\t");
for(i=0; i<32; i++)
printf("%d\n", results[i]);
return (0);
}
A la fin, la sortie devrait ressembler à quelque chose comme ça:
résultat[0] = 32; résultat [1] = 31; résultat [2] = 30; ... résultat [31] = 1;
Quelqu'un d'une idée, comment cela pourrait être simple fait?
Merci!
Pour commencer, ne séparez pas votre assembleur en déclarations séparées. Le compilateur peut en théorie écraser vos registres dans l'intervalle entre eux. – bdonlan