Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解C中for循环与IA32机器代码的关系_C_Loops_Assembly_Disassembly_X86 - Fatal编程技术网

了解C中for循环与IA32机器代码的关系

了解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:

我知道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: 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
。至于提示,请使用指令集引用和调用约定文档对每条指令的功能进行注释。为什么不看一下这个问题和答案?这个问题很相似,所有步骤都在答案中解释得很好,这应该有助于您理解。