Advertisement
_takumi

idz2_8_solve

Nov 8th, 2022
1,567
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 "-r"
  5. .LC2:
  6.     .string "\nProgram execution time: %lf\n"
  7. .LC3:
  8.     .string "-c"
  9. .LC4:
  10.     .string "%lld"
  11. .LC5:
  12.     .string "-f"
  13. .LC6:
  14.     .string "r"
  15. .LC7:
  16.     .string "w"
  17.     .text
  18.     .globl  solve
  19.     .type   solve, @function
  20. solve:
  21.     push    rbp
  22.     mov rbp, rsp
  23.     sub rsp, 48
  24.         push     rbx
  25.         push     r10
  26.         push     r12
  27.         push     r13
  28.         push     r14
  29.         push     r15
  30.  
  31.     #mov    QWORD PTR -16[rbp], rdi # pass pointer to s into rbp-16
  32.     mov r10, rdi # pass pointer to s into r10
  33.     #mov    QWORD PTR -40[rbp], rsi # pass n into rbp-40
  34.     mov r12, rsi # pass n into r12
  35.     mov QWORD PTR -16[rbp], rdx # pass output into rcx
  36.  
  37.     #mov    QWORD PTR -32[rbp], 0 # p1
  38.     mov r13, 0 # p1
  39.         cmp     r12, 1
  40.         jne     .L17
  41.         mov     r13, rdi
  42. .L17:
  43.     add rdi, r12 # rdi = s + n #-40
  44.     #mov    QWORD PTR -24[rbp], rdi # rbp-24 = p2 = s + n
  45.     mov r14, rdi # r14 = p2 = s + n
  46.  
  47.    
  48.     #mov    DWORD PTR -48[rbp], eax # rbp-48 = i = n-1
  49.         mov rbx, r12
  50.     dec rbx# rbx = i = n-1
  51.     jmp .L4
  52. .L9:
  53.     lea rdx, -1[rbx]
  54.     mov rax, r10 # rax = s
  55.     add rax, rdx
  56.     movzx   edx, BYTE PTR [rax] # edx = s[i-1]
  57.     mov rax, rbx
  58.     add rax, r10
  59.     movzx   eax, BYTE PTR [rax] # rax = s[i]
  60.     cmp dl, al # if (s[i - 1] < s[i])
  61.     jge .L5
  62.     lea r13, -1[rbx]
  63.     add r13, r10 # p1 = s + i - 1
  64.     jmp .L6
  65. .L5: # else
  66.     cmp r13, 0 # if (p1 != NULL)
  67.     jne .L8 # break
  68.     mov r14, rbx
  69.     add r14, r10 # p2 = s + i
  70. .L6:
  71.     dec rbx # --i
  72. .L4:
  73.     cmp rbx, 0
  74.     jg  .L9
  75. .L8:
  76.         cmp      r13, 0
  77.         je      .L15
  78.     #mov    QWORD PTR -8[rbp], 0 # i = 0
  79.     mov r15, 0 # i = 0
  80.     jmp .L10
  81. .L11:
  82.     lea rax, [r15+r13]
  83.     movzx   eax, BYTE PTR [rax]
  84.     movsx   eax, al
  85.     mov edi, eax # arg1=p1[i]
  86.     mov rsi, QWORD PTR -16[rbp] # arg2=output
  87.     call    fputc@PLT # fputc=fprintf("%c",...)
  88.     inc r15
  89. .L10:
  90.     lea rax, [r13+r15]
  91.     cmp r14, rax
  92.     jne .L11
  93. .L15:
  94.     pop      r15
  95.     pop      r14
  96.     pop      r13
  97.     pop      r12
  98.     pop      r10
  99.     pop      rbx
  100.     leave
  101.     ret
  102.     .size   solve, .-solve
  103.     .globl  generate_string
  104.     .type   generate_string, @function
  105. generate_string:
  106.     push    rbp
  107.     mov rbp, rsp
  108.     sub rsp, 32
  109.     mov QWORD PTR -24[rbp], rdi # s
  110.     mov QWORD PTR -32[rbp], rsi # n
  111.     mov DWORD PTR -4[rbp], 0
  112.     jmp .L21
  113. .L16:
  114.     call    rand@PLT
  115.     movsx   rdx, eax
  116.     imul    rdx, rdx, -2130574327
  117.     shr rdx, 32
  118.     add edx, eax
  119.     mov ecx, edx
  120.     sar ecx, 6
  121.     cdq
  122.     sub ecx, edx
  123.     mov edx, ecx
  124.     sal edx, 7
  125.     sub edx, ecx
  126.     sub eax, edx
  127.     mov ecx, eax
  128.     mov eax, ecx
  129.     add eax, 1
  130.     mov BYTE PTR -5[rbp], al
  131.     mov eax, DWORD PTR -4[rbp]
  132.     movsx   rdx, eax
  133.     mov rax, QWORD PTR -24[rbp] # s
  134.     add rdx, rax # s[i]
  135.     movzx   eax, BYTE PTR -5[rbp]
  136.     mov BYTE PTR [rdx], al  # s[i] = rand() % 127 + 1
  137.     add DWORD PTR -4[rbp], 1 # i++
  138. .L21:
  139.     mov eax, DWORD PTR -4[rbp]
  140.     cdqe
  141.     cmp QWORD PTR -32[rbp], rax
  142.     jg  .L16
  143.     leave
  144.     ret
  145.     .size   generate_string, .-generate_string
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement