我正在尝试使用GCC的内联汇编程序。我想要的是读取while循环的结果。
对于上下文,代码被写在一个C文件中,它有自己的头文件,从一个C++ main调用,使用std::cout打印输出。
下面是当前代码:
int asmTest_LoopExample() {
int result = 0;
int i = 10;
int j = 50;
asm(
"While:"
"cmp %1, %2;" // Compare result with j
"jle End;"
"add $1, %1;"
"add $1, %0;" // Increment result by 1
"jmp While;"
"End:"
: "=a"(result)
: "b"(i), "c"(j)
);
return result - i; // Return the count of iterations
}
这确实返回了循环运行了多少次迭代,但为了这样做,我需要执行result - i。
我尝试了多种方法来获取%0中的值,但似乎都不起作用,是否可以请更熟悉内联程序集工作原理的人解释一下为什么会出现这种情况?
我所尝试的:将值从%1和%2移动到EAX和EBX并将结果存储在ECX中。以多种方式在这些寄存器之间移动值,因此我最终将%0移动到EAX,同样的问题。
我想我在这里忽略了一些东西,但我找了一整天也没找到答案。
1条答案
按热度按时间fdbelqdn1#
下面是固定代码:
编辑:我上传了一个固定的代码,我使用添加的目的是为这2个操作,因为我的目的是了解更多关于汇编程序。感谢所有的反馈和评论中的链接!
我决定完全出于教育目的保留EDX的使用,但使用i作为输出参数确实更好。