Advertisement
_takumi

idz2_for6

Nov 3rd, 2022 (edited)
1,123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .intel_syntax noprefix
  2.     .text
  3.     .globl  solve
  4.     .type   solve, @function
  5. solve:
  6.     push    rbp
  7.     mov rbp, rsp
  8.     sub rsp, 48
  9.         push    rbx
  10.         push    r10
  11.         push    r12
  12.         push    r13
  13.         push    r14
  14.         push    r15
  15.  
  16.     #mov    QWORD PTR -16[rbp], rdi # pass pointer to s into rbp-16
  17.     mov r10, rdi # pass pointer to s into r10
  18.     #mov    QWORD PTR -40[rbp], rsi # pass n into rbp-40
  19.     mov r12, rsi # pass n into r12
  20.  
  21.     #mov    QWORD PTR -32[rbp], 0 # p1
  22.     mov r13, 0 # p1
  23.         cmp     r12, 1
  24.         jne     .L17
  25.         mov     r13, rdi
  26. .L17:
  27.     add rdi, r12 # rdi = s + n #-40
  28.     #mov    QWORD PTR -24[rbp], rdi # rbp-24 = p2 = s + n
  29.     mov r14, rdi # r14 = p2 = s + n
  30.  
  31.    
  32.     #mov    DWORD PTR -48[rbp], eax # rbp-48 = i = n-1
  33.         mov rbx, r12
  34.     dec rbx# rbx = i = n-1
  35.     jmp .L4
  36. .L9:
  37.     lea rdx, -1[rbx]
  38.     mov rax, r10 # rax = s
  39.     add rax, rdx
  40.     movzx   edx, BYTE PTR [rax] # edx = s[i-1]
  41.     mov rax, rbx
  42.     add rax, r10
  43.     movzx   eax, BYTE PTR [rax] # rax = s[i]
  44.     cmp dl, al # if (s[i - 1] < s[i])
  45.     jge .L5
  46.     lea r13, -1[rbx]
  47.     add r13, r10 # p1 = s + i - 1
  48.     jmp .L6
  49. .L5: # else
  50.     cmp r13, 0 # if (p1 != NULL)
  51.     jne .L8 # break
  52.     mov r14, rbx
  53.     add r14, r10 # p2 = s + i
  54. .L6:
  55.     dec rbx # --i
  56. .L4:
  57.     cmp rbx, 0
  58.     jg  .L9
  59. .L8:
  60.         cmp      r13, 0
  61.         je      .L15
  62.     #mov    QWORD PTR -8[rbp], 0 # i = 0
  63.     mov r15, 0 # i = 0
  64.     jmp .L10
  65. .L11:
  66.     lea rax, [r15+r13]
  67.     movzx   eax, BYTE PTR [rax]
  68.     movsx   eax, al
  69.     mov edi, eax # arg=p1[i]
  70.     call    putchar@PLT # putchar=printf("%c",...)
  71.     inc r15
  72. .L10:
  73.     lea rax, [r13+r15]
  74.     cmp r14, rax
  75.     jne .L11
  76. .L15:
  77.     pop      r15
  78.     pop      r14
  79.     pop      r13
  80.     pop      r12
  81.     pop      r10
  82.     pop      rbx
  83.  
  84.     leave
  85.     ret
  86.     .size   solve, .-solve
  87.     .section    .rodata
  88. .LC0:
  89.     .string "%lld"
  90. .LC1:
  91.     .string "%c"
  92.     .text
  93.     .globl  main
  94.     .type   main, @function
  95. main:
  96.     push    rbp
  97.     mov rbp, rsp
  98.     sub rsp, 64
  99.     mov QWORD PTR -40[rbp], 0 # rbp-40 is n
  100.     lea rsi, -40[rbp]
  101.     lea rdi, .LC0[rip]
  102.     mov eax, 0
  103.     call    __isoc99_scanf@PLT
  104.     mov rax, QWORD PTR -40[rbp] # rax = n
  105.     add rax, 1 # rax = n+1
  106.     mov rdi, rax # malloc argument is n+1 - the size of the string s in bytes
  107.     call    malloc@PLT
  108.     #mov    QWORD PTR -16[rbp], rax # rbp-16 = s
  109.     mov rbx, rax # rbx = s
  110.     call    getchar@PLT
  111.     #mov    QWORD PTR -52[rbp], 0 # rbp-52 = i = 0
  112.     mov r12, 0 # r12 = i = 0
  113.     jmp .L2
  114. .L3:
  115.     lea rsi, [r12+rbx] # s + i
  116.     lea rdi, .LC1[rip] # format string
  117.     mov eax, 0
  118.     call    __isoc99_scanf@PLT
  119.     inc r12
  120. .L2:
  121.     cmp r12, QWORD PTR -40[rbp]
  122.     jl  .L3
  123.     mov     rdi, rbx # rdi = s
  124.     mov     rsi, QWORD PTR -40[rbp] # rsi = n
  125.     call solve
  126.     mov eax, 0
  127.     leave
  128.     ret
  129.     .size   main, .-main
  130.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement