我目前正在研究一些项目,学习如何阅读在汇编中优化的循环迭代,如果有人能向我解释如何计算迭代次数,我真的很感激。我看到循环执行的位置,但不确定我应该用来跟踪的迭代计数过程。有人会介意从x86-64中的某些C代码查看这个程序集,至少建议计算迭代次数的方法吗?请记住这与学校工作有关我这样做我不是在寻找答案,而是在寻找答案的过程中。谢谢!
0000000000400714 <loop_multi>:
400714: 55 push %rbp
400715: 48 89 e5 mov %rsp,%rbp
400718: 48 89 7d e8 mov %rdi,-0x18(%rbp)
40071c: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
400723: eb 13 jmp 400738 <loop_multi+0x24>
400725: 48 8b 45 e8 mov -0x18(%rbp),%rax
400729: 8b 00 mov (%rax),%eax
40072b: 8d 50 ff lea -0x1(%rax),%edx
40072e: 48 8b 45 e8 mov -0x18(%rbp),%rax
400732: 89 10 mov %edx,(%rax)
400734: 83 45 fc 01 addl $0x1,-0x4(%rbp)
400738: 81 7d fc a7 00 00 00 cmpl $0xa7,-0x4(%rbp)
40073f: 76 e4 jbe 400725 <loop_multi+0x11>
400741: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
400748: eb 13 jmp 40075d <loop_multi+0x49>
40074a: 48 8b 45 e8 mov -0x18(%rbp),%rax
40074e: 48 83 c0 04 add $0x4,%rax
400752: 8b 10 mov (%rax),%edx
400754: 83 ea 01 sub $0x1,%edx
400757: 89 10 mov %edx,(%rax)
400759: 83 45 fc 01 addl $0x1,-0x4(%rbp)
40075d: 81 7d fc 99 00 00 00 cmpl $0x99,-0x4(%rbp)
400764: 76 e4 jbe 40074a <loop_multi+0x36>
400766: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
40076d: eb 13 jmp 400782 <loop_multi+0x6e>
40076f: 48 8b 45 e8 mov -0x18(%rbp),%rax
400773: 48 83 c0 08 add $0x8,%rax
400777: 8b 10 mov (%rax),%edx
400779: 83 ea 01 sub $0x1,%edx
40077c: 89 10 mov %edx,(%rax)
40077e: 83 45 fc 01 addl $0x1,-0x4(%rbp)
400782: 83 7d fc 03 cmpl $0x3,-0x4(%rbp)
400786: 76 e7 jbe 40076f <loop_multi+0x5b>
400788: 5d pop %rbp
400789: c3 retq