Advertisement
_takumi

solve

Nov 3rd, 2022
1,923
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 "%lld"
  5. .LC1:
  6.     .string "r"
  7. .LC2:
  8.     .string "w"
  9.     .text
  10.     .globl  solve
  11.     .type   solve, @function
  12. solve:
  13.     push    rbp
  14.     mov rbp, rsp
  15.     sub rsp, 48
  16.         push     rbx
  17.         push     r10
  18.         push     r12
  19.         push     r13
  20.         push     r14
  21.         push     r15
  22.  
  23.     #mov    QWORD PTR -16[rbp], rdi # pass pointer to s into rbp-16
  24.     mov r10, rdi # pass pointer to s into r10
  25.     #mov    QWORD PTR -40[rbp], rsi # pass n into rbp-40
  26.     mov r12, rsi # pass n into r12
  27.     mov QWORD PTR -16[rbp], rdx # pass output into rcx
  28.  
  29.     #mov    QWORD PTR -32[rbp], 0 # p1
  30.     mov r13, 0 # p1
  31.         cmp     r12, 1
  32.         jne     .L17
  33.         mov     r13, rdi
  34. .L17:
  35.     add rdi, r12 # rdi = s + n #-40
  36.     #mov    QWORD PTR -24[rbp], rdi # rbp-24 = p2 = s + n
  37.     mov r14, rdi # r14 = p2 = s + n
  38.  
  39.    
  40.     #mov    DWORD PTR -48[rbp], eax # rbp-48 = i = n-1
  41.         mov rbx, r12
  42.     dec rbx# rbx = i = n-1
  43.     jmp .L4
  44. .L9:
  45.     lea rdx, -1[rbx]
  46.     mov rax, r10 # rax = s
  47.     add rax, rdx
  48.     movzx   edx, BYTE PTR [rax] # edx = s[i-1]
  49.     mov rax, rbx
  50.     add rax, r10
  51.     movzx   eax, BYTE PTR [rax] # rax = s[i]
  52.     cmp dl, al # if (s[i - 1] < s[i])
  53.     jge .L5
  54.     lea r13, -1[rbx]
  55.     add r13, r10 # p1 = s + i - 1
  56.     jmp .L6
  57. .L5: # else
  58.     cmp r13, 0 # if (p1 != NULL)
  59.     jne .L8 # break
  60.     mov r14, rbx
  61.     add r14, r10 # p2 = s + i
  62. .L6:
  63.     dec rbx # --i
  64. .L4:
  65.     cmp rbx, 0
  66.     jg  .L9
  67. .L8:
  68.         cmp      r13, 0
  69.         je      .L15
  70.     #mov    QWORD PTR -8[rbp], 0 # i = 0
  71.     mov r15, 0 # i = 0
  72.     jmp .L10
  73. .L11:
  74.     lea rax, [r15+r13]
  75.     movzx   eax, BYTE PTR [rax]
  76.     movsx   eax, al
  77.     mov edi, eax # arg1=p1[i]
  78.     mov rsi, QWORD PTR -16[rbp] # arg2=output
  79.     call    fputc@PLT # fputc=fprintf("%c",...)
  80.     inc r15
  81. .L10:
  82.     lea rax, [r13+r15]
  83.     cmp r14, rax
  84.     jne .L11
  85. .L15:
  86.     pop      r15
  87.     pop      r14
  88.     pop      r13
  89.     pop      r12
  90.     pop      r10
  91.     pop      rbx
  92.     leave
  93.     ret
  94.     .size   solve, .-solve
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement