BL ?!

BL ?! - ASM - Programmation

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

Reply

Marsh Posté le 13-03-2008 à 10:34:18   

Reply

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).


Message édité par olivthill le 13-03-2008 à 13:06:33
Reply

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 :
  1. format MS COFF
  2. public f as '_f'
  3. section '.text' code readable executable
  4. f:
  5.         mov eax, [esp+4]
  6.         jmp .saut
  7.        
  8. .iteration:
  9.         mov byte[eax], '@'
  10.         add eax, 1
  11. .saut:
  12.         cmp byte[eax], 0
  13.         jne .iteration
  14.        
  15.         ret


 
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.


---------------
dap.developpez.com
Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed