2011-06-12 78 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