Advertisement
_takumi

main.asm

Nov 27th, 2022
1,869
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .intel_syntax noprefix
  2.     .section    .rodata
  3.     .align 8
  4. .LC1:
  5.     .string "Please enter one of the possible execution keys: -r, -f, -c"
  6. .LC2:
  7.     .string "-r"
  8. .LC3:
  9.     .string "e^%lf = %lf\n"
  10. .LC5:
  11.     .string "Program execution time: %lf\n"
  12. .LC6:
  13.     .string "-c"
  14. .LC7:
  15.     .string "%lf"
  16. .LC8:
  17.     .string "%lf\n"
  18. .LC9:
  19.     .string "-f"
  20. .LC10:
  21.     .string "Incorrect input"
  22. .LC11:
  23.     .string "r"
  24. .LC12:
  25.     .string "w"
  26.     .text
  27.     .globl  main
  28.     .type   main, @function
  29. main:
  30.     push    rbp
  31.     mov rbp, rsp
  32.     add rsp, -128
  33.     mov DWORD PTR -116[rbp], edi # argc
  34.     mov QWORD PTR -128[rbp], rsi # argv
  35.     cmp DWORD PTR -116[rbp], 0
  36.     jne .L6
  37.     lea rdi, .LC1[rip] # "Please enter one of the possible execution keys: -r, -f, -c\n"
  38.     call    puts@PLT
  39.     mov eax, 0
  40.     jmp .L15
  41. .L6:
  42.     mov rax, QWORD PTR -128[rbp]
  43.     add rax, 8
  44.     mov rax, QWORD PTR [rax]
  45.     lea rsi, .LC2[rip] # "-r"
  46.     mov rdi, rax  # argv[1]
  47.     call    strcmp@PLT
  48.     test    eax, eax
  49.     jne .L8
  50.     mov edi, 0 # 0 - arg1
  51.     call    time@PLT
  52.     mov edi, eax # time(0)
  53.     call    srand@PLT
  54.     call    rand@PLT
  55.     movsx   rdx, eax
  56.     imul    rdx, rdx, -2078209981
  57.     shr rdx, 32
  58.     add edx, eax
  59.     mov ecx, edx
  60.     sar ecx, 4
  61.     cdq
  62.     sub ecx, edx
  63.     mov edx, ecx
  64.     sal edx, 5
  65.     sub edx, ecx
  66.     sub eax, edx
  67.     mov ecx, eax
  68.     cvtsi2sd    xmm0, ecx
  69.     movsd   QWORD PTR -112[rbp], xmm0
  70.     call    clock@PLT
  71.     mov QWORD PTR -32[rbp], rax
  72.     mov rax, QWORD PTR -112[rbp]
  73.     movq    xmm0, rax # x
  74.     call    solve
  75.     movq    rax, xmm0
  76.     mov QWORD PTR -80[rbp], rax
  77.     call    clock@PLT
  78.     mov QWORD PTR -24[rbp], rax
  79.     mov rax, QWORD PTR -112[rbp]
  80.     movsd   xmm0, QWORD PTR -80[rbp]
  81.     movapd  xmm1, xmm0 # res
  82.     movq    xmm0, rax  # x
  83.     lea rdi, .LC3[rip] # "e^%lf = %lf\n"
  84.     mov eax, 2
  85.     call    printf@PLT
  86.     mov rax, QWORD PTR -24[rbp]
  87.     sub rax, QWORD PTR -32[rbp]
  88.     cvtsi2sd    xmm0, rax
  89.     movsd   xmm1, QWORD PTR .LC4[rip]
  90.     divsd   xmm0, xmm1
  91.     movsd   QWORD PTR -16[rbp], xmm0
  92.     mov rax, QWORD PTR -16[rbp]
  93.     movq    xmm0, rax  # time_spent
  94.     lea rdi, .LC5[rip]  # "Program execution time: %lf\n"
  95.     mov eax, 1
  96.     call    printf@PLT
  97.     jmp .L9
  98. .L8:
  99.     mov rax, QWORD PTR -128[rbp]
  100.     add rax, 8
  101.     mov rax, QWORD PTR [rax]
  102.     lea rsi, .LC6[rip] # "-c"
  103.     mov rdi, rax   # argv[1]
  104.     call    strcmp@PLT
  105.     test    eax, eax
  106.     jne .L10
  107.     lea rax, -112[rbp]
  108.     mov rsi, rax  # &x
  109.     lea rdi, .LC7[rip]  # "%lf"
  110.     mov eax, 0
  111.     call    __isoc99_scanf@PLT
  112.     call    clock@PLT
  113.     mov QWORD PTR -56[rbp], rax
  114.     mov rax, QWORD PTR -112[rbp]
  115.     movq    xmm0, rax # x
  116.     call    solve
  117.     movq    rax, xmm0
  118.     mov QWORD PTR -80[rbp], rax
  119.     call    clock@PLT
  120.     mov QWORD PTR -48[rbp], rax
  121.     mov rax, QWORD PTR -80[rbp]
  122.     movq    xmm0, rax # res
  123.     lea rdi, .LC8[rip] # "%lf\n"
  124.     mov eax, 1
  125.     call    printf@PLT
  126.     mov rax, QWORD PTR -48[rbp]
  127.     sub rax, QWORD PTR -56[rbp]
  128.     cvtsi2sd    xmm0, rax
  129.     movsd   xmm1, QWORD PTR .LC4[rip]
  130.     divsd   xmm0, xmm1
  131.     movsd   QWORD PTR -40[rbp], xmm0
  132.     mov rax, QWORD PTR -40[rbp]
  133.     movq    xmm0, rax # time_spent
  134.     lea rdi, .LC5[rip] # "Program execution time: %lf\n"
  135.     mov eax, 1
  136.     call    printf@PLT
  137.     jmp .L9
  138. .L10:
  139.     mov rax, QWORD PTR -128[rbp]
  140.     add rax, 8
  141.     mov rax, QWORD PTR [rax]
  142.     lea rsi, .LC9[rip] # "-f"
  143.     mov rdi, rax  # argv[1]
  144.     call    strcmp@PLT
  145.     test    eax, eax
  146.     jne .L11
  147.     cmp DWORD PTR -116[rbp], 4
  148.     je  .L12
  149.     lea rdi, .LC10[rip] #  "Incorrect input\n"
  150.     call    puts@PLT
  151.     mov eax, 0
  152.     jmp .L15
  153. .L12:
  154.     mov rax, QWORD PTR -128[rbp]
  155.     add rax, 16
  156.     mov rax, QWORD PTR [rax]
  157.     lea rsi, .LC11[rip] # "r"
  158.     mov rdi, rax # argv[2]
  159.     call    fopen@PLT
  160.     mov QWORD PTR -104[rbp], rax
  161.     mov rax, QWORD PTR -128[rbp]
  162.     add rax, 24
  163.     mov rax, QWORD PTR [rax]
  164.     lea rsi, .LC12[rip] # "w"
  165.     mov rdi, rax # argv[3]
  166.     call    fopen@PLT
  167.     mov QWORD PTR -96[rbp], rax
  168.     cmp QWORD PTR -104[rbp], 0
  169.     je  .L13
  170.     cmp QWORD PTR -96[rbp], 0
  171.     jne .L14
  172. .L13:
  173.     lea rdi, .LC10[rip] #  "Incorrect input\n"
  174.     call    puts@PLT
  175.     mov eax, 0
  176.     jmp .L15
  177. .L14:
  178.     lea rdx, -112[rbp] # &x
  179.     mov rax, QWORD PTR -104[rbp]
  180.     lea rsi, .LC7[rip] # "%lf"
  181.     mov rdi, rax # input
  182.     mov eax, 0
  183.     call    __isoc99_fscanf@PLT
  184.     call    clock@PLT
  185.     mov QWORD PTR -88[rbp], rax
  186.     mov rax, QWORD PTR -112[rbp]
  187.     movq    xmm0, rax # x
  188.     call    solve
  189.     movq    rax, xmm0
  190.     mov QWORD PTR -80[rbp], rax
  191.     call    clock@PLT
  192.     mov QWORD PTR -72[rbp], rax
  193.     mov rdx, QWORD PTR -80[rbp]
  194.     mov rax, QWORD PTR -96[rbp]
  195.     movq    xmm0, rdx # res
  196.     lea rsi, .LC8[rip] # "%lf\n"
  197.     mov rdi, rax # output
  198.     mov eax, 1
  199.     call    fprintf@PLT
  200.     mov rax, QWORD PTR -72[rbp]
  201.     sub rax, QWORD PTR -88[rbp]
  202.     cvtsi2sd    xmm0, rax
  203.     movsd   xmm1, QWORD PTR .LC4[rip]
  204.     divsd   xmm0, xmm1
  205.     movsd   QWORD PTR -64[rbp], xmm0
  206.     mov rax, QWORD PTR -64[rbp]
  207.     movq    xmm0, rax # time_spent
  208.     lea rdi, .LC5[rip] # "Program execution time: %lf\n"
  209.     mov eax, 1
  210.     call    printf@PLT
  211.     mov rax, QWORD PTR -104[rbp]
  212.     mov rdi, rax # input
  213.     call    fclose@PLT
  214.     mov rax, QWORD PTR -96[rbp]
  215.     mov rdi, rax # output
  216.     call    fclose@PLT
  217.     jmp .L9
  218. .L11:
  219.     lea rdi, .LC1[rip] # "Please enter one of the possible execution keys: -r, -f, -c\n"
  220.     call    puts@PLT
  221. .L9:
  222.     mov eax, 0
  223. .L15:
  224.     leave
  225.     ret
  226.     .size   main, .-main
  227.     .section    .rodata
  228.     .align 8
  229. .LC0:
  230.     .long   0
  231.     .long   1072693248
  232.     .align 8
  233. .LC4:
  234.     .long   0
  235.     .long   1093567616
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement