0

我正在寻找一个代码示例,用于将值与 gcc 中的内联汇编进行比较。我需要为 asm 代码分配值。我已经尝试了一些示例,它们无法正常工作。总是有错误或者我不明白结果。

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

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

1 回答 1

1

该程序将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!

参考:

于 2013-07-01T20:25:19.400 回答