Bonjour,
j'essaye de faire ca et j'ai ce type d'erreur sous gcc
Code:
1
2
3
4
5
6
7 unsigned long a, b; asm { db 0x0F,0x31 mov [a],eax }
error: expected '(' before '{' token|
'db' undeclared (first use in this function)|
Version imprimable
Bonjour,
j'essaye de faire ca et j'ai ce type d'erreur sous gcc
Code:
1
2
3
4
5
6
7 unsigned long a, b; asm { db 0x0F,0x31 mov [a],eax }
error: expected '(' before '{' token|
'db' undeclared (first use in this function)|
Essaye de mettre la première accolade sur la même ligne que asm.
Ce n'est a priori pas la syntaxe utilisée par gcc.
Commence par lire la documentation, par exemple ici :
http://www.ibiblio.org/gferg/ldp/GCC...bly-HOWTO.html
Ok merci, je vais étudier ca.
Sinon, déplacer l'accolade ne change rien
Ce que tu as écrit (et l'accolade ouvrante DOIT être sur la même ligne que le asm) est la syntaxe utilisée par Visual... Sauf à grands coups de macros, on ne peut pas avoir le même code inline sur Visual et GCC.
Boe,
Voici un exemple d'assembleur dans GCC (c'est une fonction extraite brute d'un beaucoup plus grand fichier, et qui ne peut fonctionner seule, c'est seulement un exemple)
La syntaxe utilisée est dite AT&T, et je la trouve moins intuitive que la syntaxe Intel utilisées par Visual C++.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 uint_32 am_RandomU32 (void) { if (!isInitialized) { am_RandomInitialize(0); } __asm__ ( "movl %[rv], %%eax\n\t" // eax = r_value "mull %[mu]\n\t" // edx:eax = r_value * multiplier "divl %[mo]\n\t" // eax/edx contiennent (r_value * multiplier)/modulus // eax = quotient, edx = reste (que l'on cherche) "movl %%edx, %[rv]\n\t" // on met r_value à jour "movl %%edx, %%eax\n\t" // et retourne r_value : [rv] "=m" (r_value) : [mo] "m" (modulus) , [mu] "m" (multiplier) : "%eax", "%ebx", "%edx" ); }
Mais beaucoup plus courte :)... (mais c'est vrai que ça fait peur l'at&t...)
Idem : je la trouve plus longue, plus lourde, et totalement anti-mnémotechnique lorsque l'on connait déjà l'assembleur de sa machine...
asm(".intel_syntax noprefix\n" ... ). C'est un peu lourd, mais bon...