2012-12-26 149 views
2

我現在嘗試編譯使用gcc和代碼塊以下代碼:如何使用gcc和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); 
} 

錯誤消息我有如下:

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

我編譯的x86計算機,並想知道我如何成功地編譯上述代碼。謝謝!

+1

GCC對內聯彙編使用非常不同的語法。見[GCC內聯彙編操作指南](http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html)。 – DCoder

+0

謝謝,我會看看。 – feelfree

+1

AT&T與英特爾ASM語法: http://stackoverflow.com/questions/199966/how-do-you-use-gcc-to-generate-assembly-code-in-intel-syntax – 2012-12-26 10:18:10

回答

3

不幸的是GCC不支持簡單的語法是這樣的:

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

您可以找到GCC內聯彙編器與鏈接DCoder評論更多信息:click me
解釋一切都會吃不消一個答案,所以我簡單的寫了GCC的代碼,它應該爲你做的工作:

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

注意,你也可以使用關鍵字asm代替__asm__