问题描述
|
我如何做内联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。有关更好和详细的说明,请查阅《英特尔手册》。