Advertisement
_takumi

idz2_5_changed

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