Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1768 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  BL ?!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

BL ?!

n°1701546
GreGoireP
Posté le 13-03-2008 à 10:34:18  profilanswer
 

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

mood
Publicité
Posté le 13-03-2008 à 10:34:18  profilanswer
 

n°1701665
olivthill
Posté le 13-03-2008 à 13:04:54  profilanswer
 

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
n°1701729
dap++
Script kiddie
Posté le 13-03-2008 à 14:28:49  profilanswer
 

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
n°1701828
GreGoireP
Posté le 13-03-2008 à 16:00:34  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  BL ?!

 

Sujets relatifs
Plus de sujets relatifs à : BL ?!


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)