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

Understanding of how for loops in C relate to IA32 machine code

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

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

谢谢!

函数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

希望对您有所帮助。