如何用C语言内联汇编语言forloop?

问题描述

| 我如何做内联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?
    } 
  } // ?
}
    

解决方法

        类似于
__asm{
        xor esi,esi
go:
        inc esi
        cmp esi,10
        jnz go

    }
    ,        它不起作用,因为那不是汇编。 IIRC,组装中最简单的类似于“ 2”的循环类似于
.L3:
    addl    $1,-4(%ebp)
    cmpl    $9,-4(%ebp)
    jle     .L3
    ,        使用asm关键字时,不允许编写任何C代码。您只能使用汇编语言关键字,而用C语言编写汇编代码的方式取决于编译器。每个编译器都以不同的方式允许您。例如Turbo使用此语法
void main()
{
   asm
   {
      mov ax,4C00h
      int 21h
   }
}
    ,        我认为他要问的是是否可以在汇编语言程序中编写“内联C”。答案是否定的,您必须将C程序编译到一个库中,然后从汇编语言程序中调用它。我想您也可以编写一个宏,以使在汇编中更方便地实现for循环,但这将高度依赖于汇编程序,您必须让我们知道您使用的是哪个。如果我错了,我要打个招呼,我只是在这里黑暗中开枪,您的问题还不清楚。     ,        查看流控制指令以了解如何使用汇编语言实现循环。查阅x86条件跳转指令和
LOOPX
指令。看看http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow。有关更好和详细的说明,请查阅《英特尔手册》。