【问题标题】:%al register in C codeC 代码中的 %al 寄存器
【发布时间】:2015-11-03 16:28:58
【问题描述】:
testb  $1, %al
je     .L3
leal   1(%eax,%eax,2), %eax
jmp    .L4

我得到了上面的汇编代码,并要求将其翻译成 c 代码。

我几乎知道它在做什么,我只是不知道如何为 %al 寄存器做 C 代码。

如果有帮助,这里是其余的汇编代码

prob2:
pushl  %ebp
movl   %esp, %ebp
movl   8(%ebp), %eax
cmpl   $1, %eax
je     .L1
.L6:
testb  $1, %al
je     .L3
leal   1(%eax,%eax,2), %eax
jmp    .L4
.L3:
shrl   %eax
.L4:
cmpl   $1, %eax
jne    .L6
.L1:
popl   %ebp
ret

【问题讨论】:

  • aleax的低8位;通常,它用于在 C 中表示 char。(但在这里,情况并非如此)。
  • 它只检查是否设置了值的最低有效位,即该值是否为奇数。
  • 在问题中包含您已经想到的 C 代码。

标签: c assembly disassembly


【解决方案1】:

这里没关系。 AL 中的 Bit0 与 EAX 中的 Bit0 相同。 8 位操作肯定是对编译器的优化。所以你可以把AL读成EAX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2013-09-12
    • 2017-08-03
    相关资源
    最近更新 更多