这个功能在装配中的目的是什么?

dip*_*kar 3 c assembly x86-64

我正在阅读汇编代码,但我没有可用的源代码.next_text在程序集中调用了一个我正在努力理解的函数.谁可以帮我这个事?

      next_text()

       push   %rbp
       push   %rbx
       sub    $0x108,%rsp
       mov    %rdi,%rbp
       mov    %esi,%ebx
       jmp    <next_text+45>
   16  mov    %rbp,%rdx
       mov    $0x100,%esi
       mov    %rsp,%rdi
       callq  <fgets@plt>
       test   %rax,%rax
       jne    <next_text+42>
       callq  <func>
   42  sub    $0x1,%ebx
   45  test   %ebx,%ebx
       jg     <next_text+16>
       add    $0x108,%rsp
       pop    %rbx
       pop    %rbp
       retq   
Run Code Online (Sandbox Code Playgroud)

这里%ebx以某些大整数开头16000.我对这个函数正在做什么的理解是它需要一个参数,即文件流.然后它逐行读取文件.该行的最大长度100 hex256字符.然后,它减去ebx1,并且,只要该文件足够长,保持在阅读该文件16000的线条,并在结束时ebx0,它退出.我的理解是否正确?此外,命令sub $0x108,%rsp在这里特别重要,还是只是设置堆栈内存?

mev*_*ets 5

看起来像我这样:

void next_text(FILE *f, count) {
    char  buf[256];
    while (count-- > 0) {
        if (fgets(buf, sizeof buf, f)) {
            func();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)