如何在C语言内联汇编语言中进行循环?

时间:2011-06-12 07:51:25

标签: c linux assembly inline-assembly

如何使用内联C纯汇编语言?我想做循环,但不起作用。

#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?
    } 
  } // ?
}

5 个答案:

答案 0 :(得分:1)

它不起作用,因为那不是汇编。 IIRC,汇编中最简单的for - 类似循环就像

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

答案 1 :(得分:1)

类似的东西,

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

    }

答案 2 :(得分:0)

使用asm关键字时,不允许编写任何C代码。您只能使用汇编语言关键字,而在C中编写汇编代码的方式取决于编译器。每个编译器都允许您以不同的方式。例如,Turbo使用此语法

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

答案 3 :(得分:0)

我认为他所问的是,是否可以在汇编语言程序中编写“内联C”。答案是否定的,您必须将C程序编译到库中并从汇编语言程序中调用它。我想你也可以编写一个宏来使for循环更方便实现for循环,但这将是高度依赖于汇编程序的,你必须让我们知道你正在使用它。如果我错了,我会大肆宣传,我只是在黑暗中拍摄,你的问题不太清楚。

答案 4 :(得分:0)

检查流控制指令以了解如何使用汇编语言实现循环。查看x86条件跳转指令和LOOPX指令。看看http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow。有关更好和详细说明,请查看英特尔手册。