Advertisement
_takumi

idz2_8_main

Nov 8th, 2022
1,595
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .intel_syntax noprefix
  2.     .section    .rodata
  3. .LC0:
  4.     .string "-r"
  5. .LC2:
  6.     .string "\nProgram execution time: %lf\n"
  7. .LC3:
  8.     .string "-c"
  9. .LC4:
  10.     .string "%lld"
  11. .LC5:
  12.     .string "-f"
  13. .LC6:
  14.     .string "r"
  15. .LC7:
  16.     .string "w"
  17.     .text
  18.     .globl  main
  19.     .type   main, @function
  20. main:
  21.     push    rbp
  22.     mov rbp, rsp
  23.     add rsp, -128
  24.     mov DWORD PTR -116[rbp], edi # argc
  25.     mov QWORD PTR -128[rbp], rsi # argv
  26.     mov rax, QWORD PTR -128[rbp]
  27.     add rax, 8
  28.     mov rax, QWORD PTR [rax] # argv[1]
  29.     lea rsi, .LC0[rip]
  30.     mov rdi, rax
  31.     call    strcmp@PLT # if argv[1] == "-r"
  32.     test    eax, eax
  33.     jne .L18
  34.         # ->
  35.     mov edi, 0  
  36.     call    time@PLT  # time(0)
  37.     mov edi, eax
  38.     call    srand@PLT # srand(time(0))
  39.     call    rand@PLT  # rand()
  40.     movsx   rdx, eax
  41.     imul    rdx, rdx, 1098962147
  42.     shr rdx, 32
  43.     mov ecx, edx
  44.     sar ecx, 9
  45.     cdq
  46.     sub ecx, edx
  47.     mov edx, ecx
  48.     imul    edx, edx, 2001
  49.     sub eax, edx
  50.     movsx   rax, eax
  51.     mov QWORD PTR -112[rbp], rax # n = rand() % 2001
  52.     add rax, 1
  53.     mov rdi, rax   # (n + 1) * sizeof(char)
  54.     call    malloc@PLT # malloc((n + 1) * sizeof(char))
  55.     mov QWORD PTR -88[rbp], rax # s
  56.     mov rsi, QWORD PTR -112[rbp]# n
  57.     mov rdi, QWORD PTR -88[rbp] # s
  58.     call    generate_string         # generate_string(s, n)
  59.     call    clock@PLT               # clock()
  60.     mov QWORD PTR -32[rbp], rax # begin = clock()
  61.     mov rdx, QWORD PTR stdout[rip] # arg3 - stdout
  62.     mov rsi, QWORD PTR -112[rbp]   # arg2 - n
  63.     mov rdi, QWORD PTR -88[rbp]    # arg1 - s
  64.     call    solve                      # solve(s, n, stdout)
  65.     call    clock@PLT                  # clock()
  66.     mov QWORD PTR -24[rbp], rax    # end = clock()
  67.     sub rax, QWORD PTR -32[rbp]    # end - begin
  68.     cvtsi2sd    xmm0, rax
  69.     movsd   xmm1, QWORD PTR .LC1[rip]
  70.     divsd   xmm0, xmm1
  71.     movsd   QWORD PTR -16[rbp], xmm0
  72.     mov rax, QWORD PTR -16[rbp]
  73.     movq    xmm0, rax      # arg2 - time_spent
  74.     lea rdi, .LC2[rip] # arg1 - string
  75.     mov eax, 1         # 1 floating point argument
  76.     call    printf@PLT
  77.     jmp .L19
  78. .L18:
  79.     mov rax, QWORD PTR -128[rbp] # argv
  80.     add rax, 8                   # argv[1]
  81.     mov rax, QWORD PTR [rax]
  82.     lea rsi, .LC3[rip]
  83.     mov rdi, rax
  84.     call    strcmp@PLT               # if (argv[1] == "-c")
  85.     test    eax, eax
  86.     jne .L20
  87.     lea rsi, -112[rbp]     # &n
  88.     lea rdi, .LC4[rip]     # %lld
  89.     mov eax, 0
  90.     call    __isoc99_scanf@PLT # scanf("%lld", &n)
  91.     call    getchar@PLT
  92.     mov rdi, QWORD PTR -112[rbp]
  93.     add rdi, 1                  # n + 1
  94.     call    malloc@PLT              # malloc((n+1)*sizeof(char))
  95.     mov QWORD PTR -88[rbp], rax # s
  96.     mov rdx, QWORD PTR stdin[rip] # arg3 = stdin
  97.     mov rax, QWORD PTR -112[rbp]
  98.     lea rsi, [rax+1]              # arg2 = n + 1
  99.     mov rdi, QWORD PTR -88[rbp]   # arg1 = s
  100.     call    fgets@PLT                 # fgets(s, n+1, stdin)
  101.     call    clock@PLT
  102.     mov QWORD PTR -56[rbp], rax   # begin = clock()
  103.     mov rdx, QWORD PTR stdout[rip] # arg3 - stdout
  104.     mov rsi, QWORD PTR -112[rbp]   # arg2 - n
  105.     mov rdi, QWORD PTR -88[rbp]    # arg1 - s
  106.     call    solve                      # solve(s, n, stdout)
  107.     call    clock@PLT
  108.     mov QWORD PTR -48[rbp], rax   # end = clock()
  109.     sub rax, QWORD PTR -56[rbp]   # end - begin
  110.     cvtsi2sd    xmm0, rax
  111.     movsd   xmm1, QWORD PTR .LC1[rip]
  112.     divsd   xmm0, xmm1
  113.     movsd   QWORD PTR -40[rbp], xmm0
  114.     mov rax, QWORD PTR -40[rbp]
  115.     movq    xmm0, rax       # arg2 = time_spent
  116.     lea rdi, .LC2[rip]  # arg1 = "\nProgram execution time: %lf\n"
  117.     mov eax, 1          # 1 floating point argument
  118.     call    printf@PLT      # printf("\nProgram execution time: %lf\n", time_spent)
  119.     jmp .L19
  120. .L20:
  121.     mov rax, QWORD PTR -128[rbp] # argv
  122.     add rax, 8
  123.     mov rax, QWORD PTR [rax]     # argv[1]
  124.     lea rsi, .LC5[rip]
  125.     mov rdi, rax
  126.     call    strcmp@PLT               # if (argv[1] == "-f")
  127.     test    eax, eax
  128.     jne .L19
  129.     mov rax, QWORD PTR -128[rbp]
  130.     add rax, 16
  131.     mov rdi, QWORD PTR [rax] # arg1 = argv[2]
  132.     lea rsi, .LC6[rip]       # arg2 = "r"
  133.     call    fopen@PLT            # fopen(argv[2], "r")
  134.     mov QWORD PTR -104[rbp], rax # input
  135.     mov rax, QWORD PTR -128[rbp] # argv
  136.     add rax, 24
  137.     mov rax, QWORD PTR [rax]
  138.     lea rsi, .LC7[rip]           # arg2 = "w"
  139.     mov rdi, rax                 # arg1 = argv[3]
  140.     call    fopen@PLT                # fopen(argv[3], "w")
  141.     mov QWORD PTR -96[rbp], rax  # output
  142.     lea rdx, -112[rbp]            # arg3 = &n
  143.     mov rdi, QWORD PTR -104[rbp]  # arg1 = input
  144.     lea rsi, .LC4[rip]            # arg2 = "%lld"
  145.     mov eax, 0
  146.     call    __isoc99_fscanf@PLT       # fscanf(input, "%lld", &n)
  147.     mov rdi, QWORD PTR -112[rbp]
  148.     add rdi, 1     # arg1 = n + 1
  149.     call    malloc@PLT # malloc((n+1)*sizeof(char))
  150.     mov QWORD PTR -88[rbp], rax # s
  151.     mov rdi, QWORD PTR -104[rbp] # arg1 = input
  152.     call    fgetc@PLT                # fgetc(input)
  153.     mov rdx, QWORD PTR -104[rbp] # arg3 = input
  154.     mov rax, QWORD PTR -112[rbp]
  155.     lea rsi, [rax+1]             # arg2 = n + 1
  156.     mov rdi, QWORD PTR -88[rbp]  # arg1 = s
  157.     call    fgets@PLT                # fgets(s, n + 1, input)
  158.     call    clock@PLT
  159.     mov QWORD PTR -80[rbp], rax  # begin = clock()
  160.     mov rsi, QWORD PTR -112[rbp] # arg3 = output
  161.     mov rdx, QWORD PTR -96[rbp]  # arg2 = n
  162.     mov rdi, QWORD PTR -88[rbp]  # arg1 = s
  163.     call    solve                    # solve(s, n, output)
  164.     call    clock@PLT
  165.     mov QWORD PTR -72[rbp], rax  # end = clock()
  166.     mov rax, QWORD PTR -72[rbp]
  167.     sub rax, QWORD PTR -80[rbp]
  168.     cvtsi2sd    xmm0, rax
  169.     movsd   xmm1, QWORD PTR .LC1[rip]
  170.     divsd   xmm0, xmm1
  171.     movsd   QWORD PTR -64[rbp], xmm0
  172.     mov rax, QWORD PTR -64[rbp]
  173.     movq    xmm0, rax      # arg2 = time_spent
  174.     lea rdi, .LC2[rip] # arg1 = "\nProgram execution time: %lf\n"
  175.     mov eax, 1
  176.     call    printf@PLT     # printf("\nProgram execution time: %lf\n", time_spent)
  177.     mov rax, QWORD PTR -104[rbp] # input
  178.     mov rdi, rax
  179.     call    fclose@PLT               # fclose(input)
  180.     mov rax, QWORD PTR -96[rbp]  # output
  181.     mov rdi, rax
  182.     call    fclose@PLT               # fclose(output)
  183. .L19:
  184.     mov eax, 0
  185.     leave
  186.     ret
  187.     .size   main, .-main
  188.     .section    .rodata
  189.     .align 8
  190. .LC1:
  191.     .long   0
  192.     .long   1093567616
  193.     .ident  "GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0"
  194.     .section    .note.GNU-stack,"",@progbits
  195.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement