BL ?! - ASM - Programmation
Marsh Posté le 13-03-2008 à 13:04:54
Le suffixe "b" à la fin de "movb", "cmpb", "addb" indique que les opérations se font sur des octets (b comme byte).
Mais le registre utilisé "ebx" fait quatre octets. Il faudrait prendre un quart du registre, par exemple bh (octet haut (high) de bx (et bx est la moitié de ebx)) ou bl (octet bas (low) de bx).
Marsh Posté le 13-03-2008 à 14:28:49
Laisse tomber l'ASM inline, à moins que tu veuilles éviter que la compilation nécessite un outil en plus le plus pratique c'est d'utiliser un vrai assembleur pour faire ta fonction.
Avec FASM ça donne quelque chose comme ça :
Code :
|
Pour l'assembler tu tapes 'fasm fichier.asm' et ça te donne un fichier objet à donner en plus à ton compilateur. Si tu es sous Linux ça doit être à peu près la même chose mais avec le format ELF.
Marsh Posté le 13-03-2008 à 16:00:34
En fait le probleme etait que j'utilisais un type BYTE aussi pour les pointeurs (qui sont sur 4 octets) donc y'a des B à remplacer par des L pour que ça marche mais c'est bon
Marsh Posté le 13-03-2008 à 10:34:18
BOnjour !
Teste simple: remplacer tous les caracteres d'une chaine par "@"
void fonc(char * chaine) {
__asm__ __volatile__ (
"movb %0, %%ebx;"
"DEB: cmpb $0, (%%ebx);"
"je FIN;"
"movb $64, (%%ebx);"
"addb $1, %%ebx;"
"jmp DEB;"
"FIN:;"
: : "g" (chaine) );
}
Mais ça ne marche pas et j'obtiens:
/tmp/ccZDTgnd.s: Messages de l'assembleur:
/tmp/ccZDTgnd.s:23: AVERTISSEMENT:utilise « %bl» au lieu de «%ebx» en raison du suffixe «b »
/tmp/ccZDTgnd.s:23: AVERTISSEMENT:utilise « %bl» au lieu de «%ebx» en raison du suffixe «b »
Pourquoi ?
Merci, greg