Advertisement
glank

fib.s

Oct 10th, 2023
2,185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         .section        .rodata
  2.  
  3. .LC0:
  4.         .string "%lli\n"
  5.  
  6.         .text
  7.  
  8.         .type   print, @function
  9. print:
  10.         PUSH    %rdi
  11.         PUSH    %rsi
  12.         MOV     %rdi, %rsi
  13.         LEA     .LC0(%rip), %rdi
  14.         CALL    printf
  15.         POP     %rsi
  16.         POP     %rdi
  17.         RET
  18.         .size   print, . - print
  19.  
  20.         .globl  fib
  21.         .type   fib, @function
  22. fib:
  23.         MOV     $2, %rbx
  24.         CMP     %rbx, %rdi
  25.         SETL    %al
  26.         MOVZX   %al, %rbx
  27.         TEST    %rbx, %rbx
  28.         JZ      .L0
  29.         MOV     %rdi, %rax
  30.         RET
  31.         JMP     .L1
  32. .L0:
  33.         MOV     $1, %rbx
  34.         MOV     %rdi, %rbp
  35.         SUB     %rbx, %rbp
  36.         PUSH    %rdi
  37.         MOV     %rbp, %rdi
  38.         XOR     %rax, %rax
  39.         CALL    fib
  40.         POP     %rdi
  41.         PUSH    %rax
  42.         MOV     $2, %rbx
  43.         MOV     %rdi, %rbp
  44.         SUB     %rbx, %rbp
  45.         PUSH    %rdi
  46.         MOV     %rbp, %rdi
  47.         XOR     %rax, %rax
  48.         CALL    fib
  49.         POP     %rdi
  50.         MOV     %rax, %rbx
  51.         POP     %rax
  52.         ADD     %rax, %rbx
  53.         MOV     %rbx, %rax
  54.         RET
  55. .L1:
  56.         RET
  57.         .size   fib, . - fib
  58.  
  59.         .globl  iter
  60.         .type   iter, @function
  61. iter:
  62.         CMP     %rsi, %rdi
  63.         SETE    %al
  64.         MOVZX   %al, %rbx
  65.         TEST    %rbx, %rbx
  66.         JZ      .L2
  67.         XOR     %rbx, %rbx
  68.         MOV     %rbx, %rax
  69.         RET
  70.         JMP     .L3
  71. .L2:
  72.         PUSH    %rdi
  73.         XOR     %rax, %rax
  74.         CALL    fib
  75.         POP     %rdi
  76.         PUSH    %rdi
  77.         MOV     %rax, %rdi
  78.         XOR     %rax, %rax
  79.         CALL    print
  80.         POP     %rdi
  81.         MOV     $1, %rbx
  82.         ADD     %rdi, %rbx
  83.         PUSH    %rdi
  84.         MOV     %rbx, %rdi
  85.         PUSH    %rsi
  86.         XOR     %rax, %rax
  87.         CALL    iter
  88.         POP     %rsi
  89.         POP     %rdi
  90.         RET
  91. .L3:
  92.         RET
  93.         .size   iter, . - iter
  94.  
  95.         .globl  main
  96.         .type   main, @function
  97. main:
  98.         XOR     %rbx, %rbx
  99.         PUSH    %rdi
  100.         MOV     %rbx, %rdi
  101.         MOV     $50, %rbx
  102.         PUSH    %rsi
  103.         MOV     %rbx, %rsi
  104.         XOR     %rax, %rax
  105.         CALL    iter
  106.         POP     %rsi
  107.         POP     %rdi
  108.         RET
  109.         .size   main, . - main
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement