了解C中的循环如何与IA32机器代码相关

fil*_*ipe 1 c x86 assembly loops disassembly

foo:
pushl %ebp
movl %esp,%ebp 
movl 12(%ebp),%ecx 
xorl %eax,%eax 
movl 8(%ebp),%edx 
cmpl %ecx,%edx
jle .L3

.L5:
addl %edx,%eax 
decl %edx
cmpl %ecx,%edx 
jg .L5

.L3: leave
ret
Run Code Online (Sandbox Code Playgroud)

我知道xorl是for循环的指示符(int i = 0),但我无法理解代码的其余部分......有人可以给我一个提示吗?

谢谢!

fuz*_*fuz 7

函数foo有两个参数,让我们称他们xy.

foo:                   # foo(x, y)
    pushl %ebp
    movl %esp,%ebp 
    movl 12(%ebp),%ecx # ecx = y
    xorl %eax,%eax     # eax = 0
    movl 8(%ebp),%edx  # edx = x
    cmpl %ecx,%edx     # while (ecx < edx) {
    jle .L3

.L5:
    addl %edx,%eax     #     eax += edx
    decl %edx          #     edx--
    cmpl %ecx,%edx     # }
    jg .L5

.L3:
    leave
    ret                # return eax
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.