如何区分x86汇编中的while循环与if语句? 说我的程序正在获得这个x86程序集:
jmp .L2 # jump to test at end
.L4:
movl -4(%ebp), %eax # eax = A
cmpl -12(%ebp), %eax # compare A to C
jge .L3 # skip next statement if A >= C
addl $1, -4(%ebp) # A++
.L3:
subl $1, -8(%ebp) # B--
.L2:
cmpl $0, -8(%ebp) # compare B to 0
jns .L4 # restart code if B >= 0
假设x位于-8(%ebp),
在.L2的底部为什么这是一个while循环?
为什么:
while(x >= 0){jump to .L4}
并不是:
if(x >= 0){ jump to .L4}
??
答案 0 :(得分:1)
因为它是代码中的跳回。换句话说,跳起来(选择你最喜欢的心理模型)。
意味着执行将一次又一次地达到条件跳转,直到条件为false。这是while
循环的定义。现在,程序集不包含循环的内置概念(rep
前缀除外,但不要去那里)。是的,这是一个有条件的跳转 - 正式的if
语句带有goto
正文。但它实现了循环的流控制模式。
常规if
语句通常作为条件跳转(向下)实现。