Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .intel_syntax noprefix
- .text
- .globl solve
- .type solve, @function
- solve:
- push rbp
- mov rbp, rsp
- sub rsp, 48
- push rbx
- push r10
- push r12
- push r13
- push r14
- push r15
- #mov QWORD PTR -16[rbp], rdi # pass pointer to s into rbp-16
- mov r10, rdi # pass pointer to s into r10
- #mov QWORD PTR -40[rbp], rsi # pass n into rbp-40
- mov r12, rsi # pass n into r12
- #mov QWORD PTR -32[rbp], 0 # p1
- mov r13, 0 # p1
- cmp r12, 1
- jne .L17
- mov r13, rdi
- .L17:
- add rdi, r12 # rdi = s + n #-40
- #mov QWORD PTR -24[rbp], rdi # rbp-24 = p2 = s + n
- mov r14, rdi # r14 = p2 = s + n
- #mov DWORD PTR -48[rbp], eax # rbp-48 = i = n-1
- mov rbx, r12
- dec rbx# rbx = i = n-1
- jmp .L4
- .L9:
- lea rdx, -1[rbx]
- mov rax, r10 # rax = s
- add rax, rdx
- movzx edx, BYTE PTR [rax] # edx = s[i-1]
- mov rax, rbx
- add rax, r10
- movzx eax, BYTE PTR [rax] # rax = s[i]
- cmp dl, al # if (s[i - 1] < s[i])
- jge .L5
- lea r13, -1[rbx]
- add r13, r10 # p1 = s + i - 1
- jmp .L6
- .L5: # else
- cmp r13, 0 # if (p1 != NULL)
- jne .L8 # break
- mov r14, rbx
- add r14, r10 # p2 = s + i
- .L6:
- dec rbx # --i
- .L4:
- cmp rbx, 0
- jg .L9
- .L8:
- cmp r13, 0
- je .L15
- #mov QWORD PTR -8[rbp], 0 # i = 0
- mov r15, 0 # i = 0
- jmp .L10
- .L11:
- lea rax, [r15+r13]
- movzx eax, BYTE PTR [rax]
- movsx eax, al
- mov edi, eax # arg=p1[i]
- call putchar@PLT # putchar=printf("%c",...)
- inc r15
- .L10:
- lea rax, [r13+r15]
- cmp r14, rax
- jne .L11
- .L15:
- pop r15
- pop r14
- pop r13
- pop r12
- pop r10
- pop rbx
- leave
- ret
- .size solve, .-solve
- .section .rodata
- .LC0:
- .string "%lld"
- .LC1:
- .string "%c"
- .text
- .globl main
- .type main, @function
- main:
- push rbp
- mov rbp, rsp
- sub rsp, 64
- mov QWORD PTR -40[rbp], 0 # rbp-40 is n
- lea rsi, -40[rbp]
- lea rdi, .LC0[rip]
- mov eax, 0
- call __isoc99_scanf@PLT
- mov rax, QWORD PTR -40[rbp] # rax = n
- add rax, 1 # rax = n+1
- mov rdi, rax # malloc argument is n+1 - the size of the string s in bytes
- call malloc@PLT
- #mov QWORD PTR -16[rbp], rax # rbp-16 = s
- mov rbx, rax # rbx = s
- call getchar@PLT
- #mov QWORD PTR -52[rbp], 0 # rbp-52 = i = 0
- mov r12, 0 # r12 = i = 0
- jmp .L2
- .L3:
- lea rsi, [r12+rbx] # s + i
- lea rdi, .LC1[rip] # format string
- mov eax, 0
- call __isoc99_scanf@PLT
- inc r12
- .L2:
- cmp r12, QWORD PTR -40[rbp]
- jl .L3
- mov rdi, rbx # rdi = s
- mov rsi, QWORD PTR -40[rbp] # rsi = n
- call solve
- mov eax, 0
- leave
- ret
- .size main, .-main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement