Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .intel_syntax noprefix
- .section .rodata
- .LC0:
- .string "-r"
- .LC2:
- .string "\nProgram execution time: %lf\n"
- .LC3:
- .string "-c"
- .LC4:
- .string "%lld"
- .LC5:
- .string "-f"
- .LC6:
- .string "r"
- .LC7:
- .string "w"
- .text
- .globl main
- .type main, @function
- main:
- push rbp
- mov rbp, rsp
- add rsp, -128
- mov DWORD PTR -116[rbp], edi # argc
- mov QWORD PTR -128[rbp], rsi # argv
- mov rax, QWORD PTR -128[rbp]
- add rax, 8
- mov rax, QWORD PTR [rax] # argv[1]
- lea rsi, .LC0[rip]
- mov rdi, rax
- call strcmp@PLT # if argv[1] == "-r"
- test eax, eax
- jne .L18
- # ->
- mov edi, 0
- call time@PLT # time(0)
- mov edi, eax
- call srand@PLT # srand(time(0))
- call rand@PLT # rand()
- movsx rdx, eax
- imul rdx, rdx, 1098962147
- shr rdx, 32
- mov ecx, edx
- sar ecx, 9
- cdq
- sub ecx, edx
- mov edx, ecx
- imul edx, edx, 2001
- sub eax, edx
- movsx rax, eax
- mov QWORD PTR -112[rbp], rax # n = rand() % 2001
- add rax, 1
- mov rdi, rax # (n + 1) * sizeof(char)
- call malloc@PLT # malloc((n + 1) * sizeof(char))
- mov QWORD PTR -88[rbp], rax # s
- mov rsi, QWORD PTR -112[rbp]# n
- mov rdi, QWORD PTR -88[rbp] # s
- call generate_string # generate_string(s, n)
- call clock@PLT # clock()
- mov QWORD PTR -32[rbp], rax # begin = clock()
- mov rdx, QWORD PTR stdout[rip] # arg3 - stdout
- mov rsi, QWORD PTR -112[rbp] # arg2 - n
- mov rdi, QWORD PTR -88[rbp] # arg1 - s
- call solve # solve(s, n, stdout)
- call clock@PLT # clock()
- mov QWORD PTR -24[rbp], rax # end = clock()
- sub rax, QWORD PTR -32[rbp] # end - begin
- cvtsi2sd xmm0, rax
- movsd xmm1, QWORD PTR .LC1[rip]
- divsd xmm0, xmm1
- movsd QWORD PTR -16[rbp], xmm0
- mov rax, QWORD PTR -16[rbp]
- movq xmm0, rax # arg2 - time_spent
- lea rdi, .LC2[rip] # arg1 - string
- mov eax, 1 # 1 floating point argument
- call printf@PLT
- jmp .L19
- .L18:
- mov rax, QWORD PTR -128[rbp] # argv
- add rax, 8 # argv[1]
- mov rax, QWORD PTR [rax]
- lea rsi, .LC3[rip]
- mov rdi, rax
- call strcmp@PLT # if (argv[1] == "-c")
- test eax, eax
- jne .L20
- lea rsi, -112[rbp] # &n
- lea rdi, .LC4[rip] # %lld
- mov eax, 0
- call __isoc99_scanf@PLT # scanf("%lld", &n)
- call getchar@PLT
- mov rdi, QWORD PTR -112[rbp]
- add rdi, 1 # n + 1
- call malloc@PLT # malloc((n+1)*sizeof(char))
- mov QWORD PTR -88[rbp], rax # s
- mov rdx, QWORD PTR stdin[rip] # arg3 = stdin
- mov rax, QWORD PTR -112[rbp]
- lea rsi, [rax+1] # arg2 = n + 1
- mov rdi, QWORD PTR -88[rbp] # arg1 = s
- call fgets@PLT # fgets(s, n+1, stdin)
- call clock@PLT
- mov QWORD PTR -56[rbp], rax # begin = clock()
- mov rdx, QWORD PTR stdout[rip] # arg3 - stdout
- mov rsi, QWORD PTR -112[rbp] # arg2 - n
- mov rdi, QWORD PTR -88[rbp] # arg1 - s
- call solve # solve(s, n, stdout)
- call clock@PLT
- mov QWORD PTR -48[rbp], rax # end = clock()
- sub rax, QWORD PTR -56[rbp] # end - begin
- cvtsi2sd xmm0, rax
- movsd xmm1, QWORD PTR .LC1[rip]
- divsd xmm0, xmm1
- movsd QWORD PTR -40[rbp], xmm0
- mov rax, QWORD PTR -40[rbp]
- movq xmm0, rax # arg2 = time_spent
- lea rdi, .LC2[rip] # arg1 = "\nProgram execution time: %lf\n"
- mov eax, 1 # 1 floating point argument
- call printf@PLT # printf("\nProgram execution time: %lf\n", time_spent)
- jmp .L19
- .L20:
- mov rax, QWORD PTR -128[rbp] # argv
- add rax, 8
- mov rax, QWORD PTR [rax] # argv[1]
- lea rsi, .LC5[rip]
- mov rdi, rax
- call strcmp@PLT # if (argv[1] == "-f")
- test eax, eax
- jne .L19
- mov rax, QWORD PTR -128[rbp]
- add rax, 16
- mov rdi, QWORD PTR [rax] # arg1 = argv[2]
- lea rsi, .LC6[rip] # arg2 = "r"
- call fopen@PLT # fopen(argv[2], "r")
- mov QWORD PTR -104[rbp], rax # input
- mov rax, QWORD PTR -128[rbp] # argv
- add rax, 24
- mov rax, QWORD PTR [rax]
- lea rsi, .LC7[rip] # arg2 = "w"
- mov rdi, rax # arg1 = argv[3]
- call fopen@PLT # fopen(argv[3], "w")
- mov QWORD PTR -96[rbp], rax # output
- lea rdx, -112[rbp] # arg3 = &n
- mov rdi, QWORD PTR -104[rbp] # arg1 = input
- lea rsi, .LC4[rip] # arg2 = "%lld"
- mov eax, 0
- call __isoc99_fscanf@PLT # fscanf(input, "%lld", &n)
- mov rdi, QWORD PTR -112[rbp]
- add rdi, 1 # arg1 = n + 1
- call malloc@PLT # malloc((n+1)*sizeof(char))
- mov QWORD PTR -88[rbp], rax # s
- mov rdi, QWORD PTR -104[rbp] # arg1 = input
- call fgetc@PLT # fgetc(input)
- mov rdx, QWORD PTR -104[rbp] # arg3 = input
- mov rax, QWORD PTR -112[rbp]
- lea rsi, [rax+1] # arg2 = n + 1
- mov rdi, QWORD PTR -88[rbp] # arg1 = s
- call fgets@PLT # fgets(s, n + 1, input)
- call clock@PLT
- mov QWORD PTR -80[rbp], rax # begin = clock()
- mov rsi, QWORD PTR -112[rbp] # arg3 = output
- mov rdx, QWORD PTR -96[rbp] # arg2 = n
- mov rdi, QWORD PTR -88[rbp] # arg1 = s
- call solve # solve(s, n, output)
- call clock@PLT
- mov QWORD PTR -72[rbp], rax # end = clock()
- mov rax, QWORD PTR -72[rbp]
- sub rax, QWORD PTR -80[rbp]
- cvtsi2sd xmm0, rax
- movsd xmm1, QWORD PTR .LC1[rip]
- divsd xmm0, xmm1
- movsd QWORD PTR -64[rbp], xmm0
- mov rax, QWORD PTR -64[rbp]
- movq xmm0, rax # arg2 = time_spent
- lea rdi, .LC2[rip] # arg1 = "\nProgram execution time: %lf\n"
- mov eax, 1
- call printf@PLT # printf("\nProgram execution time: %lf\n", time_spent)
- mov rax, QWORD PTR -104[rbp] # input
- mov rdi, rax
- call fclose@PLT # fclose(input)
- mov rax, QWORD PTR -96[rbp] # output
- mov rdi, rax
- call fclose@PLT # fclose(output)
- .L19:
- mov eax, 0
- leave
- ret
- .size main, .-main
- .section .rodata
- .align 8
- .LC1:
- .long 0
- .long 1093567616
- .ident "GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0"
- .section .note.GNU-stack,"",@progbits
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement