Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .intel_syntax noprefix
- .section .rodata
- .LC0:
- .string "%lld"
- .LC1:
- .string "r"
- .LC2:
- .string "w"
- .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 -16[rbp], rdx # pass output into rcx
- #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 # arg1=p1[i]
- mov rsi, QWORD PTR -16[rbp] # arg2=output
- call fputc@PLT # fputc=fprintf("%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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement