Ceci fait partie de l'implémentation de l'algorithme de cryptographie légère PRESENT, optimisé pour la vitesse, 8 bits, implémenté par C, lié à pLayer de l'algorithme implémenté par l'assemblage en ligne.comment résoudre une erreur dans l'assemblage en ligne dans C: 'impossible de trouver un registre en classe' GENERAL_REGS 'lors du rechargement' asm '
// ****************** pLayer ******************************
asm volatile("clr %0 \n"
"clr %1 \n"
"clr %2 \n"
"clr %3 \n"
"clr %4 \n"
"clr %5 \n"
"clr %6 \n"
"clr %7 \n"
"sbrc %8,0 \n"
"sbr %0,1 \n"
"sbrc %8,1 \n"
"sbr %2,1 \n"
"sbrc %8,2 \n"
"sbr %4,1 \n"
"sbrc %8,3 \n"
"sbr %6,1 \n"
"sbrc %8,4 \n"
"sbr %0,2 \n"
"sbrc %8,5 \n"
"sbr %2,2 \n"
"sbrc %8,6 \n"
"sbr %4,2 \n"
"sbrc %8,7 \n"
"sbr %6,2 \n"
"sbrc %9,0 \n"
"sbr %0,4 \n"
"sbrc %9,1 \n"
"sbr %2,4 \n"
"sbrc %9,2 \n"
"sbr %4,4 \n"
"sbrc %9,3 \n"
"sbr %6,4 \n"
"sbrc %9,4 \n"
"sbr %0,8 \n"
"sbrc %9,5 \n"
"sbr %2,8 \n"
"sbrc %9,6 \n"
"sbr %4,8 \n"
"sbrc %9,7 \n"
"sbr %6,8 \n"
"sbrc %10,0 \n"
"sbr %0,16 \n"
"sbrc %10,1 \n"
"sbr %2,16 \n"
"sbrc %10,2 \n"
"sbr %4,16 \n"
"sbrc %10,3 \n"
"sbr %6,16 \n"
"sbrc %10,4 \n"
"sbr %0,32 \n"
"sbrc %10,5 \n"
"sbr %2,32 \n"
"sbrc %10,6 \n"
"sbr %4,32 \n"
"sbrc %10,7 \n"
"sbr %6,32 \n"
"sbrc %11,0 \n"
"sbr %0,64 \n"
"sbrc %11,1 \n"
"sbr %2,64 \n"
"sbrc %11,2 \n"
"sbr %4,64 \n"
"sbrc %11,3 \n"
"sbr %6,64 \n"
"sbrc %11,4 \n"
"sbr %0,128 \n"
"sbrc %11,5 \n"
"sbr %2,128 \n"
"sbrc %11,6 \n"
"sbr %4,128 \n"
"sbrc %11,7 \n"
"sbr %6,128 \n"
"sbrc %12,0 \n"
"sbr %1,1 \n"
"sbrc %12,1 \n"
"sbr %3,1 \n"
"sbrc %12,2 \n"
"sbr %5,1 \n"
"sbrc %12,3 \n"
"sbr %7,1 \n"
"sbrc %12,4 \n"
"sbr %1,2 \n"
"sbrc %12,5 \n"
"sbr %3,2 \n"
"sbrc %12,6 \n"
"sbr %5,2 \n"
"sbrc %12,7 \n"
"sbr %7,2 \n"
"sbrc %13,0 \n"
"sbr %1,4 \n"
"sbrc %13,1 \n"
"sbr %3,4 \n"
"sbrc %13,2 \n"
"sbr %5,4 \n"
"sbrc %13,3 \n"
"sbr %7,4 \n"
"sbrc %13,4 \n"
"sbr %1,8 \n"
"sbrc %13,5 \n"
"sbr %3,8 \n"
"sbrc %13,6 \n"
"sbr %5,8 \n"
"sbrc %13,7 \n"
"sbr %7,8 \n"
"sbrc %14,0 \n"
"sbr %1,16 \n"
"sbrc %14,1 \n"
"sbr %3,16 \n"
"sbrc %14,2 \n"
"sbr %5,16 \n"
"sbrc %14,3 \n"
"sbr %7,16 \n"
"sbrc %14,4 \n"
"sbr %1,32 \n"
"sbrc %14,5 \n"
"sbr %3,32 \n"
"sbrc %14,6 \n"
"sbr %5,32 \n"
"sbrc %14,7 \n"
"sbr %7,32 \n"
"sbrc %15,0 \n"
"sbr %1,64 \n"
"sbrc %15,1 \n"
"sbr %3,64 \n"
"sbrc %15,2 \n"
"sbr %5,64 \n"
"sbrc %15,3 \n"
"sbr %7,64 \n"
"sbrc %15,4 \n"
"sbr %1,128 \n"
"sbrc %15,5 \n"
"sbr %3,128 \n"
"sbrc %15,6 \n"
"sbr %5,128 \n"
"sbrc %15,7 \n"
"sbr %7,128 \n"
:"=&r" (temp_pLayer[0]),"=&r" (temp_pLayer[1]),"=&r" (temp_pLayer[2]),"=&r" (temp_pLayer[3]),"=&r" (temp_pLayer[4]),"=&r" (temp_pLayer[5]),"=&r" (temp_pLayer[6]),"=&r" (temp_pLayer[7])
:"r" (state[0]),"r" (state[1]),"r" (state[2]),"r" (state[3]),"r" (state[4]),"r" (state[5]),"r" (state[6]),"r" (state[7])
);
dans la compilation du code de cette erreur: « can't find a register in class 'GENERAL_REGS' while reloading 'asm'
»
je cherchais à ce sujet et la raison et trouvé des données, mais n'a pas obtenu la façon de résoudre ce problème.
Existe-t-il une solution pour définir certains registres pour le compilateur ou une syntaxe particulière pour corriger le code actuel? d'une certaine façon, sauf réécrire le code d'une autre manière?
merci pour votre aide.
Quelle architecture ciblez-vous? – duskwuff
Il semble que vous demandiez plus de registres que l'architecture cible ne le permet. Si le hw ne supporte que (disons) 8 registres, écrire une instruction asm qui nécessite 16 ne fonctionnera pas. Comme pour la réparer: Utilisez moins de registres. Difficile d'être plus précis sans en savoir plus sur l'architecture de votre cible, mais en changeant certains paramètres de "r" à "m". –
@duskwuff en fait je n'ai pas implémenté le code et il n'avait aucune instruction à expliquer. en plus je suis nouveau sur ces codes et je ne sais pas comment changer l'architecture actuelle. –