汇编语言输出斐波那契数列

以下汇编程序只能输出前46项斐波那契数列,怎么把下面的汇编程序用 扩展寄存器 改写,然后能输出更多斐波那契数?求


ASSUME   CS:CC, DS:QW
;---------------------------
QW  SEGMENT

    MSG1   DB  13, 10, 'Please  input  n = $'
    MSG9   DB  13, 10, 'Press any key to continue ... $'
    CR_LF  DB  13, 10, 36

    X1  DW   ?
    X2  DW   ?
    X3  DB   0

    N1  DW   0, 0
    N2  DW   1, 0

    X   DW   ?, ?            ;BIN数字
    Y   DB   0, 0, 0, 0, 0   ;存放BCD码

QW  ENDS
;---------------------------
CC  SEGMENT

START:
    MOV   AX, QW
    MOV   DS, AX

    LEA   DX, MSG1
    MOV   AH, 9
    INT   21H

    CALL  INPUT
    MOV   X1, CX
    MOV   X2, CX

    CALL  CR__LF

CAL:
    INC   X3
    CMP   X3, 47      ;第47项将溢出
    JZ    EXIT

    MOV   AX, N1
    MOV   DX, N1 + 2

    ADD   AX, N2
    ADC   DX, N2 + 2

    MOV   BX, N2
    MOV   N1, BX
    MOV   BX, N2 + 2
    MOV   N1 + 2, BX

    MOV   N2, AX
    MOV   N2 + 2, DX

    MOV   AX, X2
    SUB   AX, X1
    INC   AX
    MOV   BL, 10
    DIV   BL
    MOV   DX, AX
    ADD   DL, '0'
    MOV   AH, 2
    INT   21H
    MOV   DL, DH
    ADD   DL, '0'
    INT   21H
    MOV   DL, ':'
    INT   21H
    MOV   DL, ' '
    INT   21H

    CALL  OUTPUT
    CALL  CR__LF

    DEC   X1
    JNZ   CAL
EXIT:
    LEA   DX, MSG9
    MOV   AH, 9
    INT   21H
    MOV   AH, 7
    INT   21H
    MOV   AX, 4C00H
    INT   21H       ;返回DOS
;---------------------------
CR__LF:
    LEA   DX, CR_LF
    MOV   AH, 9
    INT   21H
RET
;---------------------------
INPUT:
    MOV   BL, 10
    MOV   CX, 0
IN_X:MOV   AH, 7
    INT   21H
    CMP   AL, 13
    JE    IN_END
    CMP   AL, '0'
    JB    IN_X
    CMP   AL, '9'
    JA    IN_X
    MOV   DL, AL
    MOV   AH, 2
    INT   21H
    MOV   AL, DL
    SUB   AL, 30H
    MOV   AH, 0
    XCHG  AX, CX
    MUL   BL
    ADD   CX, AX
    CMP   CH, 0
    JNZ   IN_END
    JMP   IN_X
IN_END:
    RET
;---------------------------
BIN2BCD:
    MOV   AX, N2
    MOV   X + 0, AX
    MOV   AX, N2 + 2
    MOV   X + 2, AX

    LEA   BX, Y + 4
    MOV   CX, 5
    MOV   AL, 0
_QL_:
    MOV   [BX], AL
    DEC   BX
    LOOP  _QL_

    MOV   CX, 32   ;四个字节的二进制数
_L0_:
    PUSH  CX

    LEA   BX, X
    MOV   CX, 4
    CLC
_L1_:
    MOV   AL, [BX]
    ADC   AL, AL
    MOV   [BX], AL
    INC   BX
    LOOP  _L1_

    LEA   BX, Y + 4
    MOV   CX, 5    ;五个字节的十进制数
_L2_:
    MOV   AL, [BX]
    ADC   AL, AL
    DAA
    MOV   [BX], AL
    DEC   BX
    LOOP  _L2_

    POP   CX
    LOOP  _L0_
RET
;---------------------------
DISP:
    LEA   BX, Y
    MOV   CX, 5    ;五个字节的十进制数
_L3_:
    MOV   AL, [BX]
    MOV   AH, 0
    MOV   DL, 16
    DIV   DL
    MOV   DL, AL
    AND   DL, 0FH
    ADD   DL, 30H
    MOV   AH, 02H
    INT   21H
    MOV   DL, [BX]
    AND   DL, 0FH
    ADD   DL, 30H
    INT   21H
    INC   BX
    LOOP  _L3_
RET
;---------------------------
OUTPUT:
    CALL  BIN2BCD
    CALL  DISP 
    RET
;---------------------------
CC  ENDS
    END   START
;---------------------------


assume cs:codesg,ds:data
data segment
    fiblist dw 1,1,18 dup(?)
    n dw 20
data ends
codesg segment
start:
    # 将数据段的地址的传递给ds
    mov ax,data
    mov ds,ax

    # 将的fiblist的地址传给si,用来遍历
    lea si,fiblist
    # 根据传入的斐波那契的数来确定循环次数
    mov cx,n
    # 前两项不需要进行计算
    sub cx,2

one:    # 将后项给ax
    mov ax,[si+2]
    # 将前项给bx
    mov bx,[si]
    # 调用fib函数
    call fib
    # 将最终的结果保存在新的目标中
    mov [si+4],ax
    # 增加迭代量
    add si,2
    loop one

    mov ah,4ch
    int 21h
    
fib proc
    add ax,bx
    ret
fib endp


codesg ends
END START

数据值太大了,超出范围了,32位int型最大值是 2147483647,斐波那契数列第46位是1836311903,第47位2971215073,如果定义不了64位数据,那永远显示不了。

仅供参考,nasm编译 f.asm会报错,需要额外处理。(https://www.codenong.com/35102193)

C语言代码:-->gcc f.c --> objdump -d a.out -->f.asm


#include <stdio.h>
int a[1001][1001];
void Fibonacci(int n)
{
int i,j,sum=0;
a[1][0]=1;
a[2][0]=1;
for(i=3;i<=n;i++)
{
for(j=0;j<1001;j++)
{
sum+=a[i-1][j]+a[i-2][j];
a[i][j]=sum%10;
sum/=10;
}
}
for(i=1000;i>=0;i--)
{
if(a[n][i])
break;
}
printf("%d",a[n][i--]);
for(j=i;j>=0;j--)
{
printf("%d",a[n][j]);
}
}


int main ()
{
 int i;
for(i=1;i<=100;i++)
{
printf("%d, " ,i);Fibonacci(i);printf("\n");
}
   return(0);
}


```bash
[root@curating tcode]# ./a.out
1, 1
2, 1
3, 2
4, 3
5, 5
6, 8
7, 13
8, 21
9, 34
10, 55
11, 89
12, 144
13, 233
14, 377
15, 610
16, 987
17, 1597
18, 2584
19, 4181
20, 6765
21, 10946
22, 17711
23, 28657
24, 46368
25, 75025
26, 121393
27, 196418
28, 317811
29, 514229
30, 832040
31, 1346269
32, 2178309
33, 3524578
34, 5702887
35, 9227465
36, 14930352
37, 24157817
38, 39088169
39, 63245986
40, 102334155
41, 165580141
42, 267914296
43, 433494437
44, 701408733
45, 1134903170
46, 1836311903
47, 2971215073
48, 4807526976
49, 7778742049
50, 12586269025
51, 20365011074
52, 32951280099
53, 53316291173
54, 86267571272
55, 139583862445
56, 225851433717
57, 365435296162
58, 591286729879
59, 956722026041
60, 1548008755920
61, 2504730781961
62, 4052739537881
63, 6557470319842
64, 10610209857723
65, 17167680177565
66, 27777890035288
67, 44945570212853
68, 72723460248141
69, 117669030460994
70, 190392490709135
71, 308061521170129
72, 498454011879264
73, 806515533049393
74, 1304969544928657
75, 2111485077978050
76, 3416454622906707
77, 5527939700884757
78, 8944394323791464
79, 14472334024676221
80, 23416728348467685
81, 37889062373143906
82, 61305790721611591
83, 99194853094755497
84, 160500643816367088
85, 259695496911122585
86, 420196140727489673
87, 679891637638612258
88, 1100087778366101931
89, 1779979416004714189
90, 2880067194370816120
91, 4660046610375530309
92, 7540113804746346429
93, 12200160415121876738
94, 19740274219868223167
95, 31940434634990099905
96, 51680708854858323072
97, 83621143489848422977
98, 135301852344706746049
99, 218922995834555169026
100, 354224848179261915075
[root@curating tcode]# objdump -d a.out

a.out:     file format elf64-x86-64


Disassembly of section .init:

00000000004004a0 <.init>:
  4004a0:       f3 0f 1e fa             endbr64 
  4004a4:       48 83 ec 08             sub    $0x8,%rsp
  4004a8:       48 8b 05 41 0b 20 00    mov    0x200b41(%rip),%rax        # 600ff0 <printf@plt+0x200b10>
  4004af:       48 85 c0                test   %rax,%rax
  4004b2:       74 02                   je     4004b6 <putchar@plt-0x1a>
  4004b4:       ff d0                   callq  *%rax
  4004b6:       48 83 c4 08             add    $0x8,%rsp
  4004ba:       c3                      retq   

Disassembly of section .plt:

00000000004004c0 <putchar@plt-0x10>:
  4004c0:       ff 35 42 0b 20 00       pushq  0x200b42(%rip)        # 601008 <printf@plt+0x200b28>
  4004c6:       ff 25 44 0b 20 00       jmpq   *0x200b44(%rip)        # 601010 <printf@plt+0x200b30>
  4004cc:       0f 1f 40 00             nopl   0x0(%rax)

00000000004004d0 <putchar@plt>:
  4004d0:       ff 25 42 0b 20 00       jmpq   *0x200b42(%rip)        # 601018 <printf@plt+0x200b38>
  4004d6:       68 00 00 00 00          pushq  $0x0
  4004db:       e9 e0 ff ff ff          jmpq   4004c0 <putchar@plt-0x10>

00000000004004e0 <printf@plt>:
  4004e0:       ff 25 3a 0b 20 00       jmpq   *0x200b3a(%rip)        # 601020 <printf@plt+0x200b40>
  4004e6:       68 01 00 00 00          pushq  $0x1
  4004eb:       e9 d0 ff ff ff          jmpq   4004c0 <putchar@plt-0x10>

Disassembly of section .text:

00000000004004f0 <.text>:
  4004f0:       53                      push   %rbx
  4004f1:       bb 01 00 00 00          mov    $0x1,%ebx
  4004f6:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  4004fd:       00 00 00 
  400500:       89 de                   mov    %ebx,%esi
  400502:       bf 1b 08 40 00          mov    $0x40081b,%edi
  400507:       31 c0                   xor    %eax,%eax
  400509:       e8 d2 ff ff ff          callq  4004e0 <printf@plt>
  40050e:       89 df                   mov    %ebx,%edi
  400510:       83 c3 01                add    $0x1,%ebx
  400513:       e8 08 01 00 00          callq  400620 <printf@plt+0x140>
  400518:       bf 0a 00 00 00          mov    $0xa,%edi
  40051d:       e8 ae ff ff ff          callq  4004d0 <putchar@plt>
  400522:       83 fb 65                cmp    $0x65,%ebx
  400525:       75 d9                   jne    400500 <printf@plt+0x20>
  400527:       31 c0                   xor    %eax,%eax
  400529:       5b                      pop    %rbx
  40052a:       c3                      retq   
  40052b:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400530:       f3 0f 1e fa             endbr64 
  400534:       31 ed                   xor    %ebp,%ebp
  400536:       49 89 d1                mov    %rdx,%r9
  400539:       5e                      pop    %rsi
  40053a:       48 89 e2                mov    %rsp,%rdx
  40053d:       48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
  400541:       50                      push   %rax
  400542:       54                      push   %rsp
  400543:       49 c7 c0 f0 07 40 00    mov    $0x4007f0,%r8
  40054a:       48 c7 c1 80 07 40 00    mov    $0x400780,%rcx
  400551:       48 c7 c7 f0 04 40 00    mov    $0x4004f0,%rdi
  400558:       ff 15 8a 0a 20 00       callq  *0x200a8a(%rip)        # 600fe8 <printf@plt+0x200b08>
  40055e:       f4                      hlt    
  40055f:       90                      nop
  400560:       f3 0f 1e fa             endbr64 
  400564:       c3                      retq   
  400565:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  40056c:       00 00 00 
  40056f:       90                      nop
  400570:       48 8d 3d b9 0a 20 00    lea    0x200ab9(%rip),%rdi        # 601030 <printf@plt+0x200b50>
  400577:       48 8d 05 b2 0a 20 00    lea    0x200ab2(%rip),%rax        # 601030 <printf@plt+0x200b50>
  40057e:       48 39 f8                cmp    %rdi,%rax
  400581:       74 15                   je     400598 <printf@plt+0xb8>
  400583:       48 8b 05 56 0a 20 00    mov    0x200a56(%rip),%rax        # 600fe0 <printf@plt+0x200b00>
  40058a:       48 85 c0                test   %rax,%rax
  40058d:       74 09                   je     400598 <printf@plt+0xb8>
  40058f:       ff e0                   jmpq   *%rax
  400591:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  400598:       c3                      retq   
  400599:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  4005a0:       48 8d 3d 89 0a 20 00    lea    0x200a89(%rip),%rdi        # 601030 <printf@plt+0x200b50>
  4005a7:       48 8d 35 82 0a 20 00    lea    0x200a82(%rip),%rsi        # 601030 <printf@plt+0x200b50>
  4005ae:       48 29 fe                sub    %rdi,%rsi
  4005b1:       48 c1 fe 03             sar    $0x3,%rsi
  4005b5:       48 89 f0                mov    %rsi,%rax
  4005b8:       48 c1 e8 3f             shr    $0x3f,%rax
  4005bc:       48 01 c6                add    %rax,%rsi
  4005bf:       48 d1 fe                sar    %rsi
  4005c2:       74 14                   je     4005d8 <printf@plt+0xf8>
  4005c4:       48 8b 05 2d 0a 20 00    mov    0x200a2d(%rip),%rax        # 600ff8 <printf@plt+0x200b18>
  4005cb:       48 85 c0                test   %rax,%rax
  4005ce:       74 08                   je     4005d8 <printf@plt+0xf8>
  4005d0:       ff e0                   jmpq   *%rax
  4005d2:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
  4005d8:       c3                      retq   
  4005d9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  4005e0:       f3 0f 1e fa             endbr64 
  4005e4:       80 3d 55 0a 20 00 00    cmpb   $0x0,0x200a55(%rip)        # 601040 <printf@plt+0x200b60>
  4005eb:       75 13                   jne    400600 <printf@plt+0x120>
  4005ed:       55                      push   %rbp
  4005ee:       48 89 e5                mov    %rsp,%rbp
  4005f1:       e8 7a ff ff ff          callq  400570 <printf@plt+0x90>
  4005f6:       c6 05 43 0a 20 00 01    movb   $0x1,0x200a43(%rip)        # 601040 <printf@plt+0x200b60>
  4005fd:       5d                      pop    %rbp
  4005fe:       c3                      retq   
  4005ff:       90                      nop
  400600:       c3                      retq   
  400601:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400606:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  40060d:       00 00 00 
  400610:       f3 0f 1e fa             endbr64 
  400614:       eb 8a                   jmp    4005a0 <printf@plt+0xc0>
  400616:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  40061d:       00 00 00 
  400620:       55                      push   %rbp
  400621:       89 fd                   mov    %edi,%ebp
  400623:       53                      push   %rbx
  400624:       48 83 ec 08             sub    $0x8,%rsp
  400628:       c7 05 d2 19 20 00 01    movl   $0x1,0x2019d2(%rip)        # 602004 <printf@plt+0x201b24>
  40062f:       00 00 00 
  400632:       c7 05 6c 29 20 00 01    movl   $0x1,0x20296c(%rip)        # 602fa8 <printf@plt+0x202ac8>
  400639:       00 00 00 
  40063c:       83 ff 02                cmp    $0x2,%edi
  40063f:       0f 8e ad 00 00 00       jle    4006f2 <printf@plt+0x212>
  400645:       8d 5f fd                lea    -0x3(%rdi),%ebx
  400648:       41 b8 f0 4e 60 00       mov    $0x604ef0,%r8d
  40064e:       b8 01 00 00 00          mov    $0x1,%eax
  400653:       31 d2                   xor    %edx,%edx
  400655:       41 bb a4 0f 00 00       mov    $0xfa4,%r11d
  40065b:       48 69 db 5c f0 ff ff    imul   $0xfffffffffffff05c,%rbx,%rbx
  400662:       41 ba 48 1f 00 00       mov    $0x1f48,%r10d
  400668:       49 c7 c1 14 d1 ff ff    mov    $0xffffffffffffd114,%r9
  40066f:       b9 01 00 00 00          mov    $0x1,%ecx
  400674:       bf 67 66 66 66          mov    $0x66666667,%edi
  400679:       48 81 eb ec 2e 00 00    sub    $0x2eec,%rbx
  400680:       49 8d b0 5c f0 ff ff    lea    -0xfa4(%r8),%rsi
  400687:       eb 13                   jmp    40069c <printf@plt+0x1bc>
  400689:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  400690:       4a 8d 04 0e             lea    (%rsi,%r9,1),%rax
  400694:       42 8b 0c 10             mov    (%rax,%r10,1),%ecx
  400698:       42 8b 04 18             mov    (%rax,%r11,1),%eax
  40069c:       01 c1                   add    %eax,%ecx
  40069e:       48 83 c6 04             add    $0x4,%rsi
  4006a2:       01 d1                   add    %edx,%ecx
  4006a4:       89 c8                   mov    %ecx,%eax
  4006a6:       f7 ef                   imul   %edi
  4006a8:       89 c8                   mov    %ecx,%eax
  4006aa:       c1 f8 1f                sar    $0x1f,%eax
  4006ad:       c1 fa 02                sar    $0x2,%edx
  4006b0:       29 c2                   sub    %eax,%edx
  4006b2:       8d 04 92                lea    (%rdx,%rdx,4),%eax
  4006b5:       01 c0                   add    %eax,%eax
  4006b7:       29 c1                   sub    %eax,%ecx
  4006b9:       89 4e fc                mov    %ecx,-0x4(%rsi)
  4006bc:       4c 39 c6                cmp    %r8,%rsi
  4006bf:       75 cf                   jne    400690 <printf@plt+0x1b0>
  4006c1:       49 81 c0 a4 0f 00 00    add    $0xfa4,%r8
  4006c8:       49 81 c2 a4 0f 00 00    add    $0xfa4,%r10
  4006cf:       49 81 c3 a4 0f 00 00    add    $0xfa4,%r11
  4006d6:       49 39 d9                cmp    %rbx,%r9
  4006d9:       74 17                   je     4006f2 <printf@plt+0x212>
  4006db:       41 8b 88 b8 e0 ff ff    mov    -0x1f48(%r8),%ecx
  4006e2:       41 8b 80 14 d1 ff ff    mov    -0x2eec(%r8),%eax
  4006e9:       49 81 e9 a4 0f 00 00    sub    $0xfa4,%r9
  4006f0:       eb 8e                   jmp    400680 <printf@plt+0x1a0>
  4006f2:       48 63 d5                movslq %ebp,%rdx
  4006f5:       b8 e7 03 00 00          mov    $0x3e7,%eax
  4006fa:       48 69 ea a4 0f 00 00    imul   $0xfa4,%rdx,%rbp
  400701:       eb 0f                   jmp    400712 <printf@plt+0x232>
  400703:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400708:       48 83 e8 01             sub    $0x1,%rax
  40070c:       48 83 f8 fe             cmp    $0xfffffffffffffffe,%rax
  400710:       74 40                   je     400752 <printf@plt+0x272>
  400712:       8b b4 85 64 10 60 00    mov    0x601064(%rbp,%rax,4),%esi
  400719:       48 63 d8                movslq %eax,%rbx
  40071c:       85 f6                   test   %esi,%esi
  40071e:       74 e8                   je     400708 <printf@plt+0x228>
  400720:       31 c0                   xor    %eax,%eax
  400722:       bf 18 08 40 00          mov    $0x400818,%edi
  400727:       e8 b4 fd ff ff          callq  4004e0 <printf@plt>
  40072c:       85 db                   test   %ebx,%ebx
  40072e:       78 1b                   js     40074b <printf@plt+0x26b>
  400730:       8b b4 9d 60 10 60 00    mov    0x601060(%rbp,%rbx,4),%esi
  400737:       bf 18 08 40 00          mov    $0x400818,%edi
  40073c:       31 c0                   xor    %eax,%eax
  40073e:       48 83 eb 01             sub    $0x1,%rbx
  400742:       e8 99 fd ff ff          callq  4004e0 <printf@plt>
  400747:       85 db                   test   %ebx,%ebx
  400749:       79 e5                   jns    400730 <printf@plt+0x250>
  40074b:       48 83 c4 08             add    $0x8,%rsp
  40074f:       5b                      pop    %rbx
  400750:       5d                      pop    %rbp
  400751:       c3                      retq   
  400752:       48 69 d2 a4 0f 00 00    imul   $0xfa4,%rdx,%rdx
  400759:       bf 18 08 40 00          mov    $0x400818,%edi
  40075e:       31 c0                   xor    %eax,%eax
  400760:       8b b2 5c 10 60 00       mov    0x60105c(%rdx),%esi
  400766:       48 83 c4 08             add    $0x8,%rsp
  40076a:       5b                      pop    %rbx
  40076b:       5d                      pop    %rbp
  40076c:       e9 6f fd ff ff          jmpq   4004e0 <printf@plt>
  400771:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  400778:       00 00 00 
  40077b:       0f 1f 44 00 00          nopl   0x0(%rax,%rax,1)
  400780:       f3 0f 1e fa             endbr64 
  400784:       41 57                   push   %r15
  400786:       49 89 d7                mov    %rdx,%r15
  400789:       41 56                   push   %r14
  40078b:       49 89 f6                mov    %rsi,%r14
  40078e:       41 55                   push   %r13
  400790:       41 89 fd                mov    %edi,%r13d
  400793:       41 54                   push   %r12
  400795:       4c 8d 25 64 06 20 00    lea    0x200664(%rip),%r12        # 600e00 <printf@plt+0x200920>
  40079c:       55                      push   %rbp
  40079d:       48 8d 2d 64 06 20 00    lea    0x200664(%rip),%rbp        # 600e08 <printf@plt+0x200928>
  4007a4:       53                      push   %rbx
  4007a5:       4c 29 e5                sub    %r12,%rbp
  4007a8:       48 83 ec 08             sub    $0x8,%rsp
  4007ac:       e8 ef fc ff ff          callq  4004a0 <putchar@plt-0x30>
  4007b1:       48 c1 fd 03             sar    $0x3,%rbp
  4007b5:       74 1f                   je     4007d6 <printf@plt+0x2f6>
  4007b7:       31 db                   xor    %ebx,%ebx
  4007b9:       0f 1f 80 00 00 00 00    nopl   0x0(%rax)
  4007c0:       4c 89 fa                mov    %r15,%rdx
  4007c3:       4c 89 f6                mov    %r14,%rsi
  4007c6:       44 89 ef                mov    %r13d,%edi
  4007c9:       41 ff 14 dc             callq  *(%r12,%rbx,8)
  4007cd:       48 83 c3 01             add    $0x1,%rbx
  4007d1:       48 39 dd                cmp    %rbx,%rbp
  4007d4:       75 ea                   jne    4007c0 <printf@plt+0x2e0>
  4007d6:       48 83 c4 08             add    $0x8,%rsp
  4007da:       5b                      pop    %rbx
  4007db:       5d                      pop    %rbp
  4007dc:       41 5c                   pop    %r12
  4007de:       41 5d                   pop    %r13
  4007e0:       41 5e                   pop    %r14
  4007e2:       41 5f                   pop    %r15
  4007e4:       c3                      retq   
  4007e5:       90                      nop
  4007e6:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  4007ed:       00 00 00 
  4007f0:       f3 0f 1e fa             endbr64 
  4007f4:       c3                      retq   

Disassembly of section .fini:

00000000004007f8 <.fini>:
  4007f8:       f3 0f 1e fa             endbr64 
  4007fc:       48 83 ec 08             sub    $0x8,%rsp
  400800:       48 83 c4 08             add    $0x8,%rsp
  400804:       c3                      retq