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
- mov QWORD PTR -16[rbp], rdi # pass pointer to s into rbp-16
- mov QWORD PTR -40[rbp], rsi # pass n into rbp-40
- mov QWORD PTR -32[rbp], 0 # p1(?)
- cmp QWORD PTR -40[rbp], 1
- jne .L17
- mov QWORD PTR -32[rbp], rdi
- .L17:
- add rdi, QWORD PTR -40[rbp] # rdi = s + n #-40
- mov QWORD PTR -24[rbp], rdi # rbp-24 = p2 = s + n
- mov rax, QWORD PTR -40[rbp]
- dec eax
- mov DWORD PTR -48[rbp], eax # rbp-48 = i = n-1
- jmp .L4
- .L9:
- mov eax, DWORD PTR -48[rbp]
- lea rdx, -1[rax]
- mov rax, QWORD PTR -16[rbp] # rax = s
- add rax, rdx
- movzx edx, BYTE PTR [rax]# edx = s[i-1]
- mov eax, DWORD PTR -48[rbp]
- movsx rcx, eax
- mov rax, QWORD PTR -16[rbp]
- add rax, rcx
- movzx eax, BYTE PTR [rax] # rax = s[i]
- cmp dl, al # if (s[i - 1] < s[i])
- jge .L5
- mov eax, DWORD PTR -48[rbp]
- cdqe
- lea rdx, -1[rax]
- mov rax, QWORD PTR -16[rbp]
- add rax, rdx
- mov QWORD PTR -32[rbp], rax # p1 = s + i - 1
- jmp .L6
- .L5: # else
- cmp QWORD PTR -32[rbp], 0 # if (p1 != NULL)
- jne .L8 # break
- mov eax, DWORD PTR -48[rbp]
- movsx rdx, eax
- mov rax, QWORD PTR -16[rbp]
- add rax, rdx
- mov QWORD PTR -24[rbp], rax # p2 = s + i
- .L6:
- sub DWORD PTR -48[rbp], 1 # --i
- .L4:
- cmp DWORD PTR -48[rbp], 0
- jg .L9
- .L8:
- cmp QWORD PTR -32[rbp], 0
- je .L15
- mov QWORD PTR -8[rbp], 0 # i = 0
- jmp .L10
- .L11:
- mov rdx, QWORD PTR -8[rbp]
- mov rax, QWORD PTR -32[rbp]
- add rax, rdx
- movzx eax, BYTE PTR [rax]
- movsx eax, al
- mov edi, eax # arg=p1[i]
- call putchar@PLT # putchar=printf("%c",...)
- add DWORD PTR -8[rbp], 1
- .L10:
- mov rdx, QWORD PTR -8[rbp]
- mov rax, QWORD PTR -32[rbp]
- add rax, rdx
- cmp QWORD PTR -24[rbp], rax
- jne .L11
- .L15:
- 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 QWORD PTR -32[rbp], 0 # p1(?)
- cmp QWORD PTR -40[rbp], 1
- jne .L16
- mov QWORD PTR -32[rbp], rax
- .L16:
- add rax, QWORD PTR -40[rbp] # rax = s + n #-40
- mov QWORD PTR -24[rbp], rax # rbp-24 = p2 = s + n
- call getchar@PLT
- mov DWORD PTR -52[rbp], 0 # rbp-52 = i = 0
- jmp .L2
- .L3:
- movsx rdx, DWORD PTR -52[rbp]
- mov rsi, QWORD PTR -16[rbp]
- add rsi, rdx # s + i
- lea rdi, .LC1[rip] # format string
- mov eax, 0
- call __isoc99_scanf@PLT
- inc DWORD PTR -52[rbp]
- .L2:
- movsx rdx, DWORD PTR -52[rbp]
- cmp rdx, QWORD PTR -40[rbp]
- jl .L3
- mov rdi, QWORD PTR -16[rbp] # 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