2013-11-14 71 views
-5
#include <stdio.h> 

int main() 
{ 
    int a = 0 ; 
    /*How can I write it on gcc*/ 
    __asm { 
     mov a, 2 ; 
     add a, 4 ; 
    } 
    printf ("%d\n",a); 
    return 0 ; 
} 

這是VS2012的一些彙編代碼,我怎麼把它寫在gcc上?以下是VS2012的一些彙編代碼,我如何在gcc上編寫它?

+4

通過詢問的數以百萬計的樣品中的任意一個谷歌和複製的風格。我在google中輸入了「gcc inline asm」並獲得了19,400,000個結果。也許你需要努力一點? – enhzflep

回答

0

你可以把它寫在GCC爲:

#include <stdio.h> 

int main() 
{ 
    int a = 0 ; 
    /*How can I write it on gcc*/ 
    __asm__ __volatile__ (
    "movl $2, %0\n\t" 
    "addl $4, %0\n\t" 
    :"=r"(a) /* =r(egister), =m(emory) both fine here */ 
); 
    printf ("%d\n",a); 
    return 0 ; 
} 
+0

謝謝你..這是我需要的 –

0
#include <stdio.h> 

int main() 
{ 
    int a = 0 ; 
    /*How can I write it on gcc*/ 
    asm volatile 
    (
     "mov $2, %0\n" 
     "add $4, %0\n" 
     : "=r"(a) /* output operand */ 
     : /* input operand */ 
     : /* clobbered operands */ 
    ); 
    printf ("%d\n",a); 
    return 0 ; 
} 

請閱讀GCC's extended asm syntax瞭解更多信息。

+0

呃..你的代碼存在一些錯誤。你能給我一些正確的代碼嗎? –

+0

其實''= r「(a)'是一個輸出操作數 – 2013-11-14 11:39:38

+0

謝謝你指出這一點,我已經修復了答案。任何不便敬請諒解。 – starrify

0

例如創建另一個文件fun.s,並做以下

.global my_fun #to show where program should start 
    my_fun: 
    push %ebp #save stack ptr 
    #function body 
    pop %ebp #recover stack ptr 
ret 

然後,只需調用它在你的主功能

INT主要(){
my_fun();
}

編譯如下:g++ -o prog fun.s main.cpp