循环的汇编代码?

时间:2015-11-04 20:16:06

标签: assembly

我有一些问题需要理解汇编代码的一些部分我想要解密成循环

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

现在我给出了C代码的概要

void prob2(unsigned n)
{
while (________________) {
if (_______________) {
      ______________;
} else {
 _______________;
}
}
}

我已经发现while循环测试是否n< 1,但在下一个if-else部分我很困惑%al部分是什么。我假设它正在测试它是否等于1并且它是否(它永远不会是因为当n = 1时while循环中断)然后它将n向右移动一个字节,否则它将执行leal部分并进行比较看它是否还不等于1。

这听起来不错吗?

1 个答案:

答案 0 :(得分:1)

%al是注册l的{​​{1}}个字节,这是您确定保留%eax的位置(根据您对{{1}的解释})。