这段汇编代码到C是什么?

时间:2013-01-30 03:37:42

标签: assembly x86 conditional att

ATT语法。

我正在尝试理解以下汇编代码的作用:

movl  8(%ebp), %edx
movl  $0, %eax
testl %edx, %edx
je    .L7
.L10:
xorl  %edx, %eax
shrl  %edx
jne   .L10
.L7:
andl  $1, %eax

它应该是具有一个参数的函数体:unsigned x。我知道这是 do-while循环但是如何将其完全转换为C代码?

3 个答案:

答案 0 :(得分:4)

unsigned int function(unsigned int x)
{
  unsigned int a = 0;

  while (x != 0)
  {
    a = a ^ x;
    x = x >> 1;
  }

  a = a & 1;

  return a;
}

答案 1 :(得分:1)

易:

void or unsigned some_function(unsigned x)
{
  unsigned edx = x;
  unsigned eax = 0;
  if (edx == 0)
    goto L7;
L10:
  eax ^= edx;
  if ((edx >>= 1) != 0)
    goto L10;
L7:
  eax &= 1;
  // ...
}

答案 2 :(得分:1)

重要的是要记住eax是x86中的返回寄存器(即使此代码段不包含ret指令)。 这里,如果eax的第一位为1,则函数返回true。

此算法xor输入的所有位并返回结果位。

它可以用一个简短的高级句子来概括:如果输入的1位数是奇数,则返回1,如果是偶数,则返回0(你需要考虑一下才能看到它,我可以解释一下)如果您需要更多细节,请更全面。)