2012-12-26 1 views
2

Je suis maintenant d'essayer de compiler les codes suivants avec gcc et codeblock:Comment puis-je compiler le langage assembleur avec gcc et codeblock?

#include <stdio.h> 

int main() 
{ 

    char alphabet = 'X'; 
    printf ("Type letter = "); 
    asm{        //line 8 
     mov ah, 02 
     mov dl, [alphabet]    // line 9 
     int 21h 
    } 

printf ("\n"); 
return (0); 
} 

Les messages d'erreur que j'ai sont les suivantes:

error: expected '(' before '{' token line 8 
    error: 'mov' was not declared in this scope line9 

Je compile pour ordinateur x86, et je me demandais comment je pourrais compiler les codes ci-dessus avec succès. Merci!

+1

GCC utilise une syntaxe très différente pour l'assemblage en ligne. Voir [Instructions d'assemblage en ligne de GCC] (http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html). – DCoder

+0

Merci, et je vais jeter un coup d'oeil. – feelfree

+1

AT & T par rapport à Intel asm syntaxe: http://stackoverflow.com/questions/199966/how-do-you-use-gcc-to-generate-assembly-code-in-intel-syntax –

Répondre

3

Malheureusement gcc ne supporte pas la syntaxe simple comme ceci:

asm { 
    mov ah, 02 
    mov dl, [alphabet] 
    int 21h 
} 

Vous pouvez trouver plus d'informations sur le gcc-ligne-assembleur avec le lien DCoder a commenté: click me
tout expliquer serait trop pour une réponse, donc j'écrire simplement le code pour gcc, qui devrait faire le travail pour vous:

__asm__(
    "movb $2, %%ah;" 
    "movb %0, %%dl;" 
    "int $0x21;" 
    : 
    : "r"(alphabet) 
    : "%ah", "%dl" 
); 

Notez que vous pouvez également utiliser le mot-clé asm au lieu de __asm__.

Questions connexes