【发布时间】: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
【问题讨论】:
-
al是eax的低8位;通常,它用于在 C 中表示char。(但在这里,情况并非如此)。 -
它只检查是否设置了值的最低有效位,即该值是否为奇数。
-
在问题中包含您已经想到的 C 代码。
标签: c assembly disassembly