我正在通过以下步骤实现棋盘算法:
0xAAAAAAAA
移动到寄存器中0x55555555
移动到寄存器中我需要使用内联汇编gcc调用,而且我很努力地将值从汇编返回到C(如果有任何不相等,则返回1,相等时,则返回0)。我无法在汇编中编写整个函数,这只是函数的一部分。感谢您的提前帮助!
int retval = 0;
__asm__("mov %r0,$0xAAAAAAAA\n\t"
"cmp %r0, 0xAAAAAAAA\n\t"
"bne error\n\t"
"mov %r0, $0x55555555\n\t"
"cmp %r0, $0x55555555\n\t"
"bne error\n\t"
"mov (retval), $0\n\t"
"b exit\n\t"
"error:\n\t"
"mov (retval), $1\n\t"
"exit:\n\t"
);
int retval;
__asm__("mov r0, #0xAAAAAAAA;"
"cmp r0, #0xAAAAAAAA;"
"bne .Lerror_%=;"
"mov r0, #0x55555555;"
"cmp r0, #0x55555555;"
"bne .Lerror_%=;"
"mov %0, #0;"
".Lerror_%=:;"
"mov %0, #1;"
: "=r"(retval) : : "r0");
请注意,代码仍然有缺陷:如果没有错误发生,您将不会在.Lerror_%=
部分中跳转,因此retval
最终将始终设置为1
。它也不会在ARM模式下编译,您必须将编译器设置为Thumb模式,因为在ARM模式下不能像这样使用立即使用的立即数。