2011-06-12 83 views
2

我該怎麼做內聯C純彙編語言?我想要做循環但不起作用。如何使用C語言內聯彙編語言forloop?

#include <stdio.h> 

int main() 
{ 
    asm 
    { 
    for(int i=0; i<10; i++) 
    { 
     // is this how i will do the assembly language as inline C? 
     // is this how the for loop looks as inline c? 
    } 
    } // ? 
} 
+0

你想用'asm {}'塊做什麼?我不確定你的期望是什麼,但它肯定不是它實際上做的。 – duskwuff 2011-06-12 07:57:26

+3

你的問題不是很清楚。 'for'循環是'C'構造(也存在於很多其他語言中),但不存在於「純粹彙編」中。你是否在'C'的內聯彙編語法之後?如果是這樣,您需要告訴我們您使用的編譯器以及您的文檔中不明白的內容。如果你想知道如何在彙編中實現循環,你需要告訴你之後的目標架構,並展示你到目前爲止所嘗試/研究的內容。 – Mat 2011-06-12 07:59:05

+0

是的,它是什麼CPU?我當然猜測x86。 – 2011-06-12 08:08:37

回答

1

類似的東西,

__asm{ 
     xor esi,esi 
go: 
     inc esi 
     cmp esi,10 
     jnz go 

    } 
+0

也許用移動來初始化esi會更具教育意義。 – 2011-06-12 08:09:55

+1

@Amigable是的,除了沒有人這樣做,所以你不妨在這裏介紹一下:-) – 2011-06-12 12:01:58

1

它不起作用,因爲這不是組裝。 IIRC,最簡單的for式的循環彙編是一樣的東西

.L3: 
    addl $1, -4(%ebp) 
    cmpl $9, -4(%ebp) 
    jle  .L3 
0

當您使用asm關鍵字你是不是允許寫任何的C代碼。您只能使用匯編語言關鍵字,而用C編寫彙編代碼的方式取決於編譯器。每個編譯器都以不同的方式支持你。例如,Turbo使用這種語法

void main() 
{ 
    asm 
    { 
     mov ax,4C00h 
     int 21h 
    } 
} 
0

我認爲他問的是如果可以在彙編語言程序中編寫「內聯C」。答案是否定的,你必須將你的C程序編譯到一個庫中,然後從你的彙編語言程序中調用它。我想你也可以編寫一個宏來實現for循環在彙編中更加方便,但是這會非常依賴於彙編程序,您將不得不讓我們知道您正在使用哪個。如果我錯了,我會冒昧,我只是在黑暗中拍攝一張照片,你的問題不太清楚。

+0

我想要有main.c文件,它是C.並且在那個文件中我想要我的彙編代碼。當我編譯和運行main.c文件時,它將運行C和Assembly混音器。沒有使用外部的。 – YumYumYum 2011-06-12 09:13:09

+1

@ 89899.3K - 您可以同時擁有兩個源文件,但不能混合使用。在'asm {}'裏面你只能有彙編代碼。這就是'asm'的意思! – 2011-06-12 11:42:15