Accueil > > > ASM INLINE AVEC GCC EN SYNTAXE INTEL
ASM INLINE AVEC GCC EN SYNTAXE INTEL
Information sur la source
Description
Il est parfois indispensable d'utiliser de l'asm quand oN programme en C, par exemple pour optimiser un programme, ou lorsque que l'on utilise des instructions que on n'a pas en C (exemple : int)
Seulement avec gcc (compilateur de dev-cpp) ce n'est pas chose facile, car la syntaxe est de type at&t, une sorte de mandarin (chinoi) pour ceux qui connaissent déjà la syntaxe intel (celle de nasm, masm...)
Mon code propose 2 méthodes pour palier à ce problème : la premiere est une astuce pour utiliser la syntaxe INTEL sous gcc, la seconde est un mini-dictionnaire qui regroupe quelques traductions de la syntaxe intel vers la syntaxe gcc.
Ce code s'adresse aux débutant qui ont dev-cpp, ou au personne sous LINUX !
Source
- /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
- /*
- * Conversion de la syntaxe at&t vers celle de intel (idem que nasm par exemple)
- * Sous liscence GNU/GPL...blablabla...(par vinc1008881, vinc(pnt)calo~one( arob )wan~adoo.france)
- * !!!!!!!!!!!POUR QUE GCC RESPECTE STRICTEMENT LA COMMANDE ASM ORDONNE, IL FAUT
- * METTRE asm volatile ("instruction"); et non asm ("instruction");
- */
-
- //1)syntaxe intel avec gcc : ATTENTION NE MARCHE QU'AVEC DES VARIABLES GLOBALES !!!
-
- void un (void) //ne PAS compiler ce programme
- {
- int var = 13;
- asm (".intel_syntax noprefix");//passage en syntaxe intel
- asm ("mov ax, 0x3");//instruction en syntaxe intel
- asm ("mov eax, [var]");//l'edition des liens sera mauvaise car var est une variable LOCALE
- asm (".att_syntax noprefix");//passage en syntaxe at&t
- }
-
- //2)syntaxe at&t avec gcc : possibilité d'inclure des variables locales
- //comme cette syntaxe est imcompréhensible, voilà un dico de intel vers gcc :-)
- //entre ( ) dans les lignes asm suivantes se trouve le nom de la variable locale --> ne pas enlever les parentheses
- //bien sur je ne traite pas tous les cas : a vous d'adapter pour vos besoin (ex : charger eax en ebx...)
-
- void deux (void)
- {
- char ca, cb, cc;//variables locales pour les exemples
- short sa, sb, sc;
- int ia, ib, ic;
-
- asm("cli" ::); //cli
-
- asm("hlt" ::); //hlt
-
- asm("inb %w1, %b0" : "=a"(ca) : "d"(sa)); //mov dx, [sa] in al, dx mov [ca]
- asm("int $0x10");//int 0x10
-
- asm("jmp label");//jmp label --> idem pour tous les jxx
- asm("label:");//label:
-
- asm("lgdt %0" : : "m" (ia));//lgdt [ptr] /!\ ici ia est une structure de 6 octets
-
- asm("lidt %0" : : "m" (ia));//lidt [ptr] /!\ ici ia est une structure de 6 octets
-
- asm("mov %0, %%eax" :: "r" (ia));//mov eax, [ia]
- asm("mov %%eax, %0" : "=r" (ia));//mov [ia], eax
- asm("mov %ax, %ds");//mov ds, ax
- asm("mov %eax, %ebx");//mov ebx, eax
- asm("mov $next, %eax");//mov eax, next
- asm("next:");
-
- asm ("nop" ::); //nop
-
- asm("outb %%al, %%dx" : : "d" (sa), "a" (ca));//mov al, [ca] mov dx, [sa] out al, dx
- asm("outw %%ax, %%dx" : : "d" (sa), "a" (sb));//mov ax, [sb] mov dx, [sa] out ax, dx
-
- asm("popf"); //popf
- asm("popfl"); //popfd
- asm("popl %ebp"); //pop ebp
- asm("popw %ax"); //pop ax
-
- asm("pushf"); //pushf
- asm("pushf"); //pushfd
- asm("pushl %ebp"); //push ebp
- asm("pushw %ax"); //push ax
-
- asm("rdtsc" : "=A" (ia));//rdtsc puis place le contenue de eax et ebx dans ia ICI unsigned long long de 64 bits
-
- asm("sgdt %0" : "=m" (ia));//sgdt [ia] attention ia structure de 6 octets
- asm("sidt %0" : "=m" (ia));//sidt [ia] attention ia structure de 6 octets
- asm("sti" ::); //sti
-
- }
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* Conversion de la syntaxe at&t vers celle de intel (idem que nasm par exemple)
* Sous liscence GNU/GPL...blablabla...(par vinc1008881, vinc(pnt)calo~one( arob )wan~adoo.france)
* !!!!!!!!!!!POUR QUE GCC RESPECTE STRICTEMENT LA COMMANDE ASM ORDONNE, IL FAUT
* METTRE asm volatile ("instruction"); et non asm ("instruction");
*/
//1)syntaxe intel avec gcc : ATTENTION NE MARCHE QU'AVEC DES VARIABLES GLOBALES !!!
void un (void) //ne PAS compiler ce programme
{
int var = 13;
asm (".intel_syntax noprefix");//passage en syntaxe intel
asm ("mov ax, 0x3");//instruction en syntaxe intel
asm ("mov eax, [var]");//l'edition des liens sera mauvaise car var est une variable LOCALE
asm (".att_syntax noprefix");//passage en syntaxe at&t
}
//2)syntaxe at&t avec gcc : possibilité d'inclure des variables locales
//comme cette syntaxe est imcompréhensible, voilà un dico de intel vers gcc :-)
//entre ( ) dans les lignes asm suivantes se trouve le nom de la variable locale --> ne pas enlever les parentheses
//bien sur je ne traite pas tous les cas : a vous d'adapter pour vos besoin (ex : charger eax en ebx...)
void deux (void)
{
char ca, cb, cc;//variables locales pour les exemples
short sa, sb, sc;
int ia, ib, ic;
asm("cli" ::); //cli
asm("hlt" ::); //hlt
asm("inb %w1, %b0" : "=a"(ca) : "d"(sa)); //mov dx, [sa] in al, dx mov [ca]
asm("int $0x10");//int 0x10
asm("jmp label");//jmp label --> idem pour tous les jxx
asm("label:");//label:
asm("lgdt %0" : : "m" (ia));//lgdt [ptr] /!\ ici ia est une structure de 6 octets
asm("lidt %0" : : "m" (ia));//lidt [ptr] /!\ ici ia est une structure de 6 octets
asm("mov %0, %%eax" :: "r" (ia));//mov eax, [ia]
asm("mov %%eax, %0" : "=r" (ia));//mov [ia], eax
asm("mov %ax, %ds");//mov ds, ax
asm("mov %eax, %ebx");//mov ebx, eax
asm("mov $next, %eax");//mov eax, next
asm("next:");
asm ("nop" ::); //nop
asm("outb %%al, %%dx" : : "d" (sa), "a" (ca));//mov al, [ca] mov dx, [sa] out al, dx
asm("outw %%ax, %%dx" : : "d" (sa), "a" (sb));//mov ax, [sb] mov dx, [sa] out ax, dx
asm("popf"); //popf
asm("popfl"); //popfd
asm("popl %ebp"); //pop ebp
asm("popw %ax"); //pop ax
asm("pushf"); //pushf
asm("pushf"); //pushfd
asm("pushl %ebp"); //push ebp
asm("pushw %ax"); //push ax
asm("rdtsc" : "=A" (ia));//rdtsc puis place le contenue de eax et ebx dans ia ICI unsigned long long de 64 bits
asm("sgdt %0" : "=m" (ia));//sgdt [ia] attention ia structure de 6 octets
asm("sidt %0" : "=m" (ia));//sidt [ia] attention ia structure de 6 octets
asm("sti" ::); //sti
}
Conclusion
Il y a seulement les instructions fondamentales (mov, push, int) et ceux systeme (lgdt, cli...), les autres viendrons au fil du temps.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
asm inline [ par tintin72 ]
Bonjour,Je programme un petit jeu en OpenGL et j'aimerai savoir comment faire pour que les commandes clavier soit fluides et pas saccadées comme c'est
DevCPP inline asm error [ par belette321 ]
Bon, je suis en plein creation d'un petit dll qui utilisele ASM inline, j'ai plusieur fonction qui on touts les memeerreur. Cependant je ne trouve pas
Inline asm + classe = erreur! [ par Darkneon ]
Salut a tous.Lorsque je mets du codes assembleur dans ma classe le compilateur me renvoit l'erreur suivante."Inline assembly not allowed in inline and
Naked function, asm inline, et chaînes de caractères [ par stagiairecpp ]
Bonjour, Voilà je rencontre un soucis très particulier sous VS pour une situation très particulière. J'en appelle donc directement aux pro-codeurs ad
Visual Studio 2008 x64 et procedure __asm [ par ld121962 ]
Bonjour, Je voudrais passer un code de win32 en x64. A la compilation j'ai un message me disant que le mot clef "__asm, mov, etc.." sont inconnus. Q
Problème avec GCC [ par messier79 ]
BonjourJ'ai installé Mingw32 et j'ai configuré mes variables comme il fautA l'exécution de gcc -v, j'obtiens le message sans pb.Mais à la compil du fi
VC++ fait chier [ par GoldenEye ]
Qui peut me dire comment on place le curseur où on veut et ce sans Borland ( conio.h et gotoxy aux chiottes donc ) sous DOS et avec VC++ 6.0 ( ça fait
Gtk avec gcc [ par GoldenEye ]
Bonjour à tous.Je suis en trian de passer de VC++ à gccSi qqun pouvait m'indiquer un site de documentation sur la librairie graphique gtk, ce serait t
Nix petit probleme de syntaxe avec les sources [ par Nic.C ]
Salut,En faite le probleme c'est que tu fait mettre certain mot clés avec le 1er caractere en majuscule ce qui pose probleme quand on fait copier/coll
gcc et les couleurs !! [ par UncleShu ]
Salut je voudrais savoir les autres couleurs en C avec gcc, exemple :printf("\033[1;34m Ecrit en bleu !! \033[0m\n");Merci d'avance !
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|