我有一些问题需要理解汇编代码的一些部分我想要解密成循环
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。
这听起来不错吗?
答案 0 :(得分:1)
%al
是注册l
的{{1}}个字节,这是您确定保留%eax
的位置(根据您对{{1}的解释})。