将值与内联汇编程序进行比较

时间:2013-07-01 19:45:52

标签: gcc inline-assembly cmp

我正在搜索代码示例,用于在gcc中将值与内联汇编进行比较。我需要将值赋值给asm代码。我试过一些例子,但是他们没有正常工作。 总是有错误,或者我不理解结果。

我只需比较两个值并返回结果。

  movl my_val, %eax
  cmpl %eax,$0xfffffffa
  je   equal
  equal:
  movl $0xfffffffa,my_val

1 个答案:

答案 0 :(得分:1)

此计划会将value上的argv[1]与我的amd64上的$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!

<强>参考: