gcc et code assembleur

gcc et code assembleur - C - Programmation

Marsh Posté le 13-12-2004 à 18:41:05    

Salut je veux compiler un programme C avec du code assembleur mais ca passe très ma à la compilation.
J'ai la version 3.3.5 de GCC.
 
Voici un exemple de code:
 

Code :
  1. main()
  2. {
  3.         __asm__("
  4.                 xorl %ebx, %ebx
  5.                 mov $0x1, %eax
  6.                 int $0x80
  7.         " );
  8. }


 
J'ai les erreurs suivantes à la compilation:
 

test.c:3:17: missing terminating " character
test.c: In function `main':
test.c:4: error: parse error before "xorl"
test.c:7:9: missing terminating " character

 
 
 
 
Merci pour votre aide


Message édité par peemousse le 13-12-2004 à 18:52:43
Reply

Marsh Posté le 13-12-2004 à 18:41:05   

Reply

Marsh Posté le 13-12-2004 à 18:52:30    

Code :
  1. unsigned int uilog2(unsigned int x)
  2. {
  3. unsigned int lz;
  4. asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
  5. return 31 - lz;
  6. }
  7. #include <stdio.h>
  8. #include <assert.h>
  9. int main()
  10. {
  11. unsigned i;
  12. for(i = 1; i < 32; ++i)
  13. {
  14.  assert(i == uilog2(1 << i));
  15. }
  16. return 0;
  17. }

chez moi ça marche :P

Reply

Marsh Posté le 13-12-2004 à 18:54:07    

Il faut fermer tes guillemets à la fin de chaque ligne, et prendre soin de séparer chaque instruction. Par contre, il n'y a plus besoin de spécifier la taille des instructions.
 
Donc:

Code :
  1. main()
  2. {
  3.         __asm__("xor %ebx, %ebx;"
  4.                 "mov $0x1, %eax;"
  5.                 "int $0x80"
  6.         );
  7. }


 
Question: pourquoi ne pas utiliser syscall0 ? (tu as l'air de faire des appels systèmes linux...)

Reply

Marsh Posté le 13-12-2004 à 18:54:38    

Hannn ok !
merci Lam's !
 
Dans l'exemple c'est juste l'appel system Exit(0) ...
 
Je débute en assembleur donc je fais un maximum de test de différents trucs :p
 
thx


Message édité par peemousse le 13-12-2004 à 18:56:26
Reply

Marsh Posté le 13-12-2004 à 18:58:53    

Taz a écrit :

chez moi ça marche :P


Bof, nous sur Intel, on calcule directement ln(x)/ln(2), je suis sûr que ça va aussi vite... :o  

Reply

Marsh Posté le 13-12-2004 à 18:59:44    

mon oeil

Reply

Sujets relatifs:

Leave a Replay

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