gpt4 book ai didi

c++ - 使用 gcc 编译内联汇编时出错, "shl"

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:12 26 4
gpt4 key购买 nike

这是我试图转换为 gcc 样式 asm 内联汇编代码的实际代码。

#include<iostream>
using namespace std;

int reverse(int num);

int main(){
int num;
cout << "enter number: ";
cin >> num;
cout << endl;
cout << reverse(num);
return 0;
}

int reverse(int num){
if(num == 0 || num == 1){
return num;
}
__asm
{
xor eax, eax
xor ecx, ecx
mov ebx, num
clc ; clear carry
not_found:
inc ecx
shl ebx, 1
jnc not_found


rcr eax, 1
mov edx, ecx
again:
shl ebx, 1
rcr eax, 1
inc ecx
cmp ecx, 32
jne again

dec edx
again2:
shr eax, 1
dec edx
cmp edx, 0
jne again2
}

}

因为我无法用 gcc 编译上面的代码,我尝试将它转换成可以被 gcc 编译器成功编译的东西,但到目前为止我无法产生任何有意义的结果。

最佳答案

根据OP评论中的代码,这里是一个使用内联汇编移动一位的修改示例:

#include<iostream>
using namespace std;
int reverse(int num);
int main()
{
int num;
cout << "enter number: ";
cin >> num;
cout << endl;
cout << reverse(num) << endl;
return 0;
}

int reverse(int num)
{
if (num == 0 || num == 1)
{
return num;
}
int temp = 0;
asm( "shll $1, %0 \n\t" : "=r"(temp) : "0"(num));
return temp;
}

请注意,如果您使用 r 约束要求操作数,则 gcc 会将操作数放入寄存器中,因此真的没有理由自己移动它们(至少在这个小样本中)。此外,我在输入约束中使用了 0 来表示它应该与输出相同的寄存器,因为这就是 shl 的工作方式。

仍然不确定 num == 1 条件,但大概是因为我们不知道完整函数的实际功能。

关于c++ - 使用 gcc 编译内联汇编时出错, "shl",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com