了解 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
有两个参数,我们称它们为x
和y
。
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
希望对您有所帮助。
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
有两个参数,我们称它们为x
和y
。
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
希望对您有所帮助。