Advertisement
Screbber

Untitled

Nov 12th, 2022
545
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -4[rbp] => r12d
  2. # -8[rbp] => r13d
  3. # -12[rbp] => r14d
  4.  
  5. .intel_syntax noprefix              # пишем в синаксисе intel      
  6.   .text                           # начинаем секцию
  7.  
  8. addToPairs:                         # функция добаления пары в наш словарь
  9.   push  rbp                     # сохранение rbp на стек
  10.   mov  rbp, rsp                    # rbp := rsp
  11.   mov  QWORD PTR -24[rbp], rdi     #
  12.   mov  QWORD PTR -32[rbp], rsi     #
  13.   mov  QWORD PTR -40[rbp], rdx     #
  14.   mov  QWORD PTR -48[rbp], rcx     #  
  15.   mov  r12d, 0
  16.   jmp  .L2
  17. .L9:
  18.   mov  eax, r12d
  19.   movsx  rdx, eax
  20.   mov  rax, rdx
  21.   sal  rax, 4
  22.   sub  rax, rdx
  23.   sal  rax, 3
  24.   mov  rdx, rax
  25.   mov  rax, QWORD PTR -24[rbp]
  26.   add  rax, rdx
  27.   mov  rax, QWORD PTR [rax]
  28.   cmp  QWORD PTR -48[rbp], rax
  29.   jne  .L3
  30.   mov  r13d, 0
  31.   jmp  .L4
  32. .L8:
  33.   mov  eax, r12d
  34.   movsx  rdx, eax
  35.   mov  rax, rdx
  36.   sal  rax, 4
  37.   sub  rax, rdx
  38.   sal  rax, 3
  39.   mov  rdx, rax
  40.   mov  rax, QWORD PTR -24[rbp]
  41.   add  rdx, rax
  42.   mov  eax, r13d
  43.   cdqe
  44.   movzx  edx, BYTE PTR 8[rdx+rax]
  45.   mov  eax, r13d
  46.   movsx  rcx, eax
  47.   mov  rax, QWORD PTR -40[rbp]
  48.   add  rax, rcx
  49.   movzx  eax, BYTE PTR [rax]
  50.   cmp  dl, al
  51.   jne  .L12
  52.   mov  eax, r13d
  53.   cdqe
  54.   mov  rdx, QWORD PTR -48[rbp]
  55.   sub  rdx, 1
  56.   cmp  rax, rdx
  57.   jne  .L6
  58.   mov  eax, r12d
  59.   movsx  rdx, eax
  60.   mov  rax, rdx
  61.   sal  rax, 4
  62.   sub  rax, rdx
  63.   sal  rax, 3
  64.   mov  rdx, rax
  65.   mov  rax, QWORD PTR -24[rbp]
  66.   add  rax, rdx
  67.   mov  rdx, QWORD PTR 112[rax]
  68.   add  rdx, 1
  69.   mov  QWORD PTR 112[rax], rdx
  70.   jmp  .L1
  71. .L6:
  72.   add  r13d, 1
  73. .L4:
  74.   mov  eax, r13d
  75.   cdqe
  76.   cmp  QWORD PTR -48[rbp], rax
  77.   ja  .L8
  78.   jmp  .L3
  79. .L12:
  80.   nop
  81. .L3:
  82.   add  r12d, 1
  83. .L2:
  84.   mov  eax, r12d
  85.   movsx  rdx, eax
  86.   mov  rax, QWORD PTR -32[rbp]
  87.   mov  rax, QWORD PTR [rax]
  88.   cmp  rdx, rax
  89.   jb  .L9
  90.   mov  DWORD PTR -12[rbp], 0
  91.   jmp  .L10
  92. .L11:
  93.   mov  eax, DWORD PTR -12[rbp]
  94.   movsx  rdx, eax
  95.   mov  rax, QWORD PTR -40[rbp]
  96.   lea  rsi, [rdx+rax]
  97.   mov  rax, QWORD PTR -32[rbp]
  98.   mov  rdx, QWORD PTR [rax]
  99.   mov  rax, rdx
  100.   sal  rax, 4
  101.   sub  rax, rdx
  102.   sal  rax, 3
  103.   mov  rdx, rax
  104.   mov  rax, QWORD PTR -24[rbp]
  105.   lea  rcx, [rdx+rax]
  106.   movzx  edx, BYTE PTR [rsi]
  107.   mov  eax, DWORD PTR -12[rbp]
  108.   cdqe
  109.   mov  BYTE PTR 8[rcx+rax], dl
  110.   add  DWORD PTR -12[rbp], 1
  111. .L10:
  112.   mov  eax, DWORD PTR -12[rbp]
  113.   cdqe
  114.   cmp  QWORD PTR -48[rbp], rax
  115.   ja  .L11
  116.   mov  rax, QWORD PTR -32[rbp]
  117.   mov  rdx, QWORD PTR [rax]
  118.   mov  rax, rdx
  119.   sal  rax, 4
  120.   sub  rax, rdx
  121.   sal  rax, 3
  122.   mov  rdx, rax
  123.   mov  rax, QWORD PTR -24[rbp]
  124.   add  rdx, rax
  125.   mov  rax, QWORD PTR -48[rbp]
  126.   mov  QWORD PTR [rdx], rax
  127.   mov  rax, QWORD PTR -32[rbp]
  128.   mov  rdx, QWORD PTR [rax]
  129.   mov  rax, rdx
  130.   sal  rax, 4
  131.   sub  rax, rdx
  132.   sal  rax, 3
  133.   mov  rdx, rax
  134.   mov  rax, QWORD PTR -24[rbp]
  135.   add  rax, rdx
  136.   mov  QWORD PTR 112[rax], 1
  137.   mov  rax, QWORD PTR -32[rbp]
  138.   mov  rax, QWORD PTR [rax]
  139.   lea  rdx, 1[rax]
  140.   mov  rax, QWORD PTR -32[rbp]
  141.   mov  QWORD PTR [rax], rdx
  142. .L1:
  143.   pop  rbp
  144.   ret
  145. .LC0:
  146.   .string  "%ld \n"
  147.   .text
  148.   .globl  printPairs
  149.   .type  printPairs, @function
  150.  
  151. printPairs:
  152.   push  rbp
  153.   mov  rbp, rsp
  154.   sub  rsp, 32
  155.   mov  QWORD PTR -24[rbp], rdi
  156.   mov  QWORD PTR -32[rbp], rsi
  157.   mov  r12d, 0
  158.   jmp  .L14
  159. .L17:
  160.   mov  r13d, 0
  161.   jmp  .L15
  162. .L16:
  163.   mov  eax, r12d
  164.   movsx  rdx, eax
  165.   mov  rax, rdx
  166.   sal  rax, 4
  167.   sub  rax, rdx
  168.   sal  rax, 3
  169.   mov  rdx, rax
  170.   mov  rax, QWORD PTR -24[rbp]
  171.   add  rdx, rax
  172.   mov  eax, r13d
  173.   cdqe
  174.   movzx  eax, BYTE PTR 8[rdx+rax]
  175.   movsx  eax, al
  176.   mov  edi, eax
  177.   call  putchar@PLT
  178.   add  r13d, 1
  179. .L15:
  180.   mov  eax, r13d
  181.   movsx  rcx, eax
  182.   mov  eax, r12d
  183.   movsx  rdx, eax
  184.   mov  rax, rdx
  185.   sal  rax, 4
  186.   sub  rax, rdx
  187.   sal  rax, 3
  188.   mov  rdx, rax
  189.   mov  rax, QWORD PTR -24[rbp]
  190.   add  rax, rdx
  191.   mov  rax, QWORD PTR [rax]
  192.   cmp  rcx, rax
  193.   jb  .L16
  194.   mov  edi, 32
  195.   call  putchar@PLT
  196.   mov  eax, r12d
  197.   movsx  rdx, eax
  198.   mov  rax, rdx
  199.   sal  rax, 4
  200.   sub  rax, rdx
  201.   sal  rax, 3
  202.   mov  rdx, rax
  203.   mov  rax, QWORD PTR -24[rbp]
  204.   add  rax, rdx
  205.   mov  rax, QWORD PTR 112[rax]
  206.   mov  rsi, rax
  207.   lea  rdi, .LC0[rip]
  208.   mov  eax, 0
  209.   call  printf@PLT
  210.   add  r12d, 1
  211. .L14:
  212. mov  eax, r12d
  213.   cdqe
  214.   cmp  QWORD PTR -32[rbp], rax
  215.   ja  .L17
  216.   nop
  217.   nop
  218.   leave
  219.   ret
  220.  
  221. createDictionary:
  222.   push  rbp
  223.   mov  rbp, rsp
  224.   sub  rsp, 4096
  225.   or  QWORD PTR [rsp], 0
  226.   sub  rsp, 2064
  227.   mov  QWORD PTR -6152[rbp], rdi
  228.   mov  QWORD PTR -6040[rbp], 0
  229.   mov  rax, QWORD PTR -6152[rbp]
  230.   mov  rdi, rax
  231.   call  strlen@PLT
  232.   mov  QWORD PTR -32[rbp], rax
  233.   mov  BYTE PTR -1[rbp], 1
  234.   mov  QWORD PTR -16[rbp], 0
  235.   mov  r14d, 0
  236.   jmp  .L19
  237. .L27:
  238.   mov  eax, r14d
  239.   movsx  rdx, eax
  240.   mov  rax, QWORD PTR -6152[rbp]
  241.   add  rax, rdx
  242.   movzx  eax, BYTE PTR [rax]
  243.   cmp  al, 47
  244.   jle  .L20
  245.   mov  eax, r14d
  246.   movsx  rdx, eax
  247.   mov  rax, QWORD PTR -6152[rbp]
  248.   add  rax, rdx
  249.   movzx  eax, BYTE PTR [rax]
  250.   cmp  al, 57
  251.   jle  .L21
  252. .L20:
  253.   mov  eax, r14d
  254.   movsx  rdx, eax
  255.   mov  rax, QWORD PTR -6152[rbp]
  256.   add  rax, rdx
  257.   movzx  eax, BYTE PTR [rax]
  258.   cmp  al, 64
  259.   jle  .L22
  260.   mov  eax, r14d
  261.   movsx  rdx, eax
  262.   mov  rax, QWORD PTR -6152[rbp]
  263.   add  rax, rdx
  264.   movzx  eax, BYTE PTR [rax]
  265.   cmp  al, 90
  266.   jle  .L21
  267. .L22:
  268.   mov  eax, r14d
  269.   movsx  rdx, eax
  270.   mov  rax, QWORD PTR -6152[rbp]
  271.   add  rax, rdx
  272.   movzx  eax, BYTE PTR [rax]
  273.   cmp  al, 96
  274.   jle  .L23
  275.   mov  eax, r14d
  276.   movsx  rdx, eax
  277.   mov  rax, QWORD PTR -6152[rbp]
  278.   add  rax, rdx
  279.   movzx  eax, BYTE PTR [rax]
  280.   cmp  al, 122
  281.   jle  .L21
  282. .L23:
  283.   cmp  QWORD PTR -16[rbp], 0
  284.   je  .L24
  285.   mov  rcx, QWORD PTR -16[rbp]
  286.   lea  rdx, -6144[rbp]
  287.   lea  rsi, -6040[rbp]
  288.   lea rdi, -6032[rbp]
  289.   call  addToPairs
  290. .L24:
  291.   mov  BYTE PTR -1[rbp], 1
  292.   mov  QWORD PTR -16[rbp], 0
  293.   jmp  .L25
  294. .L21:
  295.   cmp  QWORD PTR -16[rbp], 0
  296.   jne  .L26
  297.   mov  eax, r14d
  298.   movsx  rdx, eax
  299.   mov  rax, QWORD PTR -6152[rbp]
  300.   add  rax, rdx
  301.   movzx  eax, BYTE PTR [rax]
  302.   cmp  al, 47
  303.   jle  .L26
  304.   mov  eax, r14d
  305.   movsx  rdx, eax
  306.   mov  rax, QWORD PTR -6152[rbp]
  307.   add  rax, rdx
  308.   movzx  eax, BYTE PTR [rax]
  309.   cmp  al, 57
  310.   jg  .L26
  311.   mov  BYTE PTR -1[rbp], 0
  312.   jmp  .L25
  313. .L26:
  314.   cmp  BYTE PTR -1[rbp], 0
  315.   je  .L25
  316.   mov  eax, r14d
  317.   movsx  rdx, eax
  318.   mov  rax, QWORD PTR -6152[rbp]
  319.   lea  rcx, [rdx+rax]
  320.   mov  rax, QWORD PTR -16[rbp]
  321.   lea  rdx, 1[rax]
  322.   mov  QWORD PTR -16[rbp], rdx
  323.   movzx  edx, BYTE PTR [rcx]
  324.   mov  BYTE PTR -6144[rbp+rax], dl
  325. .L25:
  326.   add  r14d, 1
  327. .L19:
  328.   mov  eax, r14d
  329.   cdqe
  330.   cmp  QWORD PTR -32[rbp], rax
  331.   ja  .L27
  332.   mov  rdx, QWORD PTR -6040[rbp]
  333.   lea  rax, -6032[rbp]
  334.   mov  rsi, rdx
  335.   mov  rdi, rax
  336.   call  printPairs
  337.   nop
  338.   leave
  339.   ret
  340.   .size  createDictionary, .-createDictionary
  341.   .globl  main
  342.   .type  main, @function
  343. main:
  344.   push  rbp                 # сохраняем rbp на стек
  345.   mov  rbp, rsp                # rbp := rsp
  346.   sub  rsp, 1008               # rsp -= 1008 (выделяем память для фрейма)
  347.   mov  rdx, QWORD PTR stdin[rip]
  348.   lea  rax, -1008[rbp]         # rax := rbp -1008
  349.   mov  esi, 1000               # esi := 1000
  350.   mov  rdi, rax                # rdi := rax
  351.   call  fgets@PLT           # вызов функции fgets
  352.   lea rdi, -1008[rbp]         # rdi := rbp - 1008
  353.   call  createDictionary    # вызов функции createDictionary
  354.   mov  eax, 0                  # возвращение в eax 0
  355.   leave                       # / выход из функции
  356.   ret                         # \
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement