x86-64中的装配循环计算

时间:2017-03-05 21:49:45

标签: assembly x86-64

我目前正在研究一些项目,学习如何阅读在汇编中优化的循环迭代,如果有人能向我解释如何计算迭代次数,我真的很感激。我看到循环执行的位置,但不确定我应该用来跟踪的迭代计数过程。有人会介意从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 

0 个答案:

没有答案