我正在寻找一个代码示例,用于将值与 gcc 中的内联汇编进行比较。我需要为 asm 代码分配值。我已经尝试了一些示例,它们无法正常工作。总是有错误或者我不明白结果。
我只需要比较两个值并返回一个结果。
movl my_val, %eax
cmpl %eax,$0xfffffffa
je equal
equal:
movl $0xfffffffa,my_val
我正在寻找一个代码示例,用于将值与 gcc 中的内联汇编进行比较。我需要为 asm 代码分配值。我已经尝试了一些示例,它们无法正常工作。总是有错误或者我不明白结果。
我只需要比较两个值并返回一个结果。
movl my_val, %eax
cmpl %eax,$0xfffffffa
je equal
equal:
movl $0xfffffffa,my_val
该程序将value
与我的 amd64argv[1]
进行比较$0x1
,因此您可能必须修复它才能在您的架构上工作:
#include <stdio.h>
int main(int argc, char* argv[]) {
int value, result;
value = atoi(argv[1]);
result = 0;
__asm__ ( "xor $0x1,%%eax;\n"
"jnz end;\n"
"movl $0xfffffffa,%%ebx;\n"
"end:\n"
:"=b"(result)
:"a"(value)
);
if (result) {
printf("Equals!\n");
}
return 0;
}
现在编译并运行它:
$ gcc -o comp comp.c
$ ./comp 0
$ ./comp 1
Equals!
参考: