了解C中for循环与IA32机器代码的关系
我知道xorl是for循环(inti=0)的指示器,但我无法理解代码的其余部分。。。 有人能给我一个提示吗了解C中for循环与IA32机器代码的关系,c,loops,assembly,disassembly,x86,C,Loops,Assembly,Disassembly,X86,我知道xorl是for循环(inti=0)的指示器,但我无法理解代码的其余部分。。。 有人能给我一个提示吗 谢谢 函数foo有两个参数,我们把它们称为x和y 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:
谢谢 函数
foo
有两个参数,我们把它们称为x
和y
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
foo:#foo(x,y)
推力%ebp
移动%esp,%ebp
movl 12(%ebp),%ecx#ecx=y
xorl%eax,%eax#eax=0
movl 8(%ebp),%edx#edx=x
cmpl%ecx%edx#while(ecx
希望这有帮助。函数
foo
有两个参数,我们将它们称为x
和y
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
foo:#foo(x,y)
推力%ebp
移动%esp,%ebp
movl 12(%ebp),%ecx#ecx=y
xorl%eax,%eax#eax=0
movl 8(%ebp),%edx#edx=x
cmpl%ecx%edx#while(ecx
希望这有帮助。没有提供原始C代码,目的是找出等效的C代码
xor
只是归零,它本身并不一定意味着循环。此外,许多循环不是从零开始的。通过向后跳转更好地指示循环,即jg.L5
。至于提示,请使用指令集引用和调用约定文档对每条指令的功能进行注释。为什么不看一下这个问题和答案?这个问题很相似,所有步骤都在答案中解释得很好,这应该有助于您理解。没有提供原始C代码,目的是找出等效的C代码xor
只是归零,它本身并不一定意味着循环。此外,许多循环不是从零开始的。通过向后跳转更好地指示循环,即jg.L5
。至于提示,请使用指令集引用和调用约定文档对每条指令的功能进行注释。为什么不看一下这个问题和答案?这个问题很相似,所有步骤都在答案中解释得很好,这应该有助于您理解。