Advertisement
stupid_pro

Prac №4

May 10th, 2024 (edited)
713
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Читаем массив char-ов cо стандартного потока ввода
  2. ; в динамическую память.
  3. ; считывание прекращается в тот момент, когда в потоке ввода встретилось char
  4. ; со значением 0.
  5. ; Память выделяем макросом new.
  6.  
  7. ;мой основной код для прака
  8.  
  9. include console.inc
  10.  
  11. ALLONG_SIZE equ 2
  12. ZERO_CODE equ 48
  13.  
  14. .data
  15.     mark_number dd 0
  16.     array_size    dd 0
  17.     array_pointer dd 0
  18.     array_size_for_pair dd 0
  19.     array_pointer_for_pair dd 0
  20.  
  21. .code
  22.  
  23.     ;
  24.     ; параметры:
  25.     ; 1. параметр указатель на начало массива.
  26.     ; 2. указатель на размер массива.
  27.     ; возвращаемое значение
  28.     ; 0 - всё хорошо
  29.     ;
  30.  
  31. read_array proc
  32.     push ebp
  33.     mov ebp, esp
  34.  
  35.     ;
  36.     ; зарезервируем место на стеке,
  37.     ; для хранения размера выделенной памяти для массива
  38.     ; выделим 4 байта, в дальнейшем к ним обращаться как
  39.     ; [ebp - 4]
  40.     ;выделяем 4 байта: в младшем байте будет лежать наш char, в остальных трех будут лежать нули
  41.     ;
  42.  
  43.     sub esp, 20
  44.  
  45.     ;
  46.     ; В регистре ebx будем сохранять текущий размер считываемого  массива.
  47.     ; в edi - будем хранить текущий адрес массива
  48.     ; в esi - считанный элемент массива
  49.     ;
  50.  
  51.     push ebx
  52.     push esi
  53.     push edi
  54.  
  55.     mov ebx, 0
  56.  
  57.     ;
  58.     ; Делаем размер выделенной памяти
  59.     ; равным 0 изначально.
  60.     ; edi указатель на массив проинициализируем 0, чтобы dispose
  61.     ; не  вызывать.
  62.     ;
  63.  
  64.     mov dword ptr [ebp - 4], 0
  65.     mov dword ptr [ebp - 8], 0
  66.     mov dword ptr [ebp - 12], 0
  67.     mov dword ptr [ebp - 16], 0
  68.     mov dword ptr [ebp - 20], 0
  69.  
  70.     mov edi, 0
  71.  
  72. read_elms_loop:
  73.  
  74.     ;
  75.     ;будем записывать чары в регистр dl
  76.     ;
  77.  
  78.     outstrln "input elm: "
  79.     inchar dl
  80.     outstr "read elm: "
  81.     outcharln dl
  82.  
  83.     ;
  84.     ;записываем в esi значение регистра dl, пополненное нулями
  85.     ;
  86.  
  87.     movzx esi, dl
  88.  
  89.     cmp esi, ZERO_CODE
  90.     je after_read_elms_loop
  91.  
  92.     mov ecx, 8
  93.  
  94. make_fin_reg:
  95.     ;побитово сдвигаем содержимое стека по данным адресам
  96.     shl dword ptr [ebp - 16], 1
  97.     rcl dword ptr [ebp - 20], 1
  98.     loop make_fin_reg
  99.  
  100.     add dword ptr [ebp - 16], esi
  101.     cmp dword ptr [ebp - 20], '/-:f'
  102.     jne not_slash_pered_fin
  103.     cmp dword ptr [ebp - 12], 1
  104.     je not_fin
  105.  
  106. not_slash_pered_fin:
  107.     mov eax, '0-:f'
  108.     and eax, 0ffffffh
  109.     and dword ptr [ebp - 20], 0ffffffh
  110.     cmp dword ptr [ebp - 20], eax
  111.     jne not_fin
  112.     cmp dword ptr [ebp - 16], 'in:-'
  113.  
  114.     jne not_fin
  115.     jmp after_read_elms_loop
  116.  
  117. not_fin:
  118.  
  119.     ;проверка /
  120.  
  121.     cmp esi, '/'
  122.     jne not_slash
  123.     cmp dword ptr [ebp - 8], 1
  124.     je not_one_slash
  125.     mov dword ptr [ebp - 8], 1
  126.     mov dword ptr [ebp - 12], 1
  127.     jmp read_elms_loop
  128.  
  129. not_one_slash:
  130.     mov dword ptr [ebp - 8], 0
  131.     mov dword ptr [ebp - 12], 0
  132.  
  133. not_slash:
  134.     mov dword ptr [ebp - 8], 0
  135.  
  136.     ; cmp esi, SLASH
  137.     ; outintln esi
  138.     ; jne routine
  139.  
  140. ; first_slash:
  141. ;     outstr "input elem: (we got first slash)"
  142. ;     inchar dl
  143. ;     outstr "read elm: "
  144. ;     outcharln dl
  145.  
  146. ;     movzx esi, dl
  147.  
  148. ;     cmp esi, ZERO_CODE
  149. ;     je after_read_elms_loop
  150.  
  151. ;     cmp esi, '\'
  152. ;     je routine
  153.  
  154. ; routine:
  155.  
  156.     ;
  157.     ; проверяем есть ли место куда положить очередной элемент
  158.     ; если нет, то запускаем выделение памяти
  159.     ;
  160.  
  161.     cmp ebx, [ebp - 4]
  162.     jb mem_enough
  163.     outstrln "allong mem"
  164.  
  165.     ;
  166.     ; на сколько байт будем удлиннять память.
  167.     ; удлинняем на 2 элемента, каждый по 4 байта.
  168.     ; Для этого пересчитываем размер из элементов в байты.
  169.     ; затем прибавляем то, на сколько увеличиваем размер памяти.
  170.     ; и проверяем на переполнение.
  171.     ; эта часть кода отвечает за ситуацию, когда текущий размер памяти >= выделенному
  172.     ;
  173.  
  174.     mov eax, 1 ; в eax помещаем 4 - размер одного элемента
  175.     mul ebx ; mul - умножение на eax того, что мы передали результат в EDX:EAX
  176.     ; теперь в eax хранится число байтов, которое выделено под элементы
  177.     add eax, ALLONG_SIZE ; allong_size = 2
  178.     jc process_overflow ;jc - jump carry flag
  179.  
  180.     ;
  181.     ; Сохраним новый размер в переменную,
  182.     ; где мы храним размер.
  183.     ;
  184.  
  185.     add  dword ptr [ebp - 4], ALLONG_SIZE
  186.  
  187.     ;
  188.     ; Здесь как параметр макроса передаём размер, который лежит в еах,
  189.     ; сам макрос после работы в регистре eax вернёт
  190.     ; новый указатель на выделенную память.
  191.     ; если памяти нет, то вернётся 0
  192.     ;
  193.  
  194.     push ebx
  195.  
  196.     outstr "New memory allocation size: "
  197.     outintln eax
  198.  
  199.     new eax
  200.     cmp eax, 0
  201.     je process_out_of_mem
  202.  
  203.     outstr "New pointer to array: "
  204.     outintln eax
  205.  
  206.     outstr "Old pointer to array: "
  207.     outintln edi
  208.  
  209.     pop ebx
  210.  
  211.     ;
  212.     ; переписываем старую память в новую.
  213.     ;
  214.  
  215.     mov ecx, 0
  216.  
  217. copy_elms_loop:
  218.  
  219.     cmp ecx, ebx
  220.     jae after_copy_elms_loop ; прыжок, если всё перекопировали
  221.  
  222.     mov dl, [edi + ecx * 1]
  223.     mov [eax + ecx * 1], dl
  224.  
  225.     inc ecx
  226.     jmp copy_elms_loop
  227.  
  228. after_copy_elms_loop:
  229.  
  230.     ;
  231.     ; меняем указатели и освобождаем старую память.
  232.     ;
  233.  
  234.     xchg eax, edi
  235.     cmp eax, 0
  236.  
  237.     je mem_enough
  238.  
  239.     push ebx
  240.     dispose eax
  241.     pop ebx
  242.  
  243.  
  244. mem_enough:
  245.  
  246.     ;
  247.     ; Помещаем новый элемент в выделенную память.
  248.     ;
  249.  
  250.     mov edx, esi
  251.  
  252.     mov [edi + 1 * ebx], edx
  253.  
  254.     inc ebx
  255.  
  256.     jmp read_elms_loop
  257.  
  258. after_read_elms_loop:
  259.     ;
  260.     ; normal finishing
  261.     ;
  262.  
  263.     ;
  264.     ; возвращаем адрес массива
  265.     ;
  266.  
  267.     mov esi, [ebp + 8]
  268.     mov [esi], edi
  269.  
  270.     ;
  271.     ; возвращаем размер массива
  272.     ;
  273.  
  274.     mov esi, [ebp + 12]
  275.     mov [esi], ebx
  276.  
  277.     pop edi
  278.     pop esi
  279.     pop ebx
  280.  
  281.     mov eax, 0
  282.  
  283.     mov esp, ebp
  284.  
  285.     pop ebp
  286.  
  287.     ret 4 + 4
  288.  
  289. process_overflow:
  290.  
  291.     dispose edi ; чистим выделенную память
  292.  
  293.     pop edi
  294.     pop esi
  295.     pop ebx
  296.  
  297.     mov eax, 1
  298.     mov esp, ebp
  299.     pop ebp
  300.  
  301.     ret 4 + 4
  302.  
  303. process_out_of_mem:
  304.  
  305.     dispose edi ; чистим выделенную память
  306.     pop edi
  307.     pop esi
  308.     pop ebx
  309.  
  310.     mov eax, 2
  311.  
  312.     mov esp, ebp
  313.     pop ebp
  314.     ret 4 + 4
  315.  
  316. read_array endp
  317.  
  318.  
  319. print_array proc
  320.  
  321.     push ebp
  322.     mov ebp, esp
  323.     push edi
  324.  
  325.  
  326.     mov edi, [ebp + 8]
  327.     mov ecx, 0
  328.  
  329. loop_print_arr:
  330.  
  331.  
  332.     cmp ecx, [ebp + 12]
  333.     jae after_loop_print_arr
  334.  
  335.     outchar byte ptr [edi + 1 * ecx]
  336.  
  337.     inc ecx
  338.  
  339.     jmp loop_print_arr
  340.  
  341. after_loop_print_arr:
  342.  
  343.     pop edi
  344.     pop ebp
  345.  
  346.     ret 4 + 4
  347.  
  348.     print_array endp
  349.  
  350.  
  351. main_part proc
  352.  
  353.     push ebp
  354.     mov ebp, esp
  355.  
  356.     ; выделим некоторое число байт, будем к ним обращаться, как:
  357.     ; [ebp - 4] - выделенная память для массива
  358.     ; [ebp - 8] - начало предложения
  359.     ; [ebp - 12] - количество знаков препинания в предложении
  360.     ; [ebp - 16] - конец предложения
  361.     ; [ebp - 20] - указатель на массив пар или троек
  362.  
  363.     sub esp, 24
  364.  
  365.     push ebx
  366.     push esi
  367.     push edi
  368.  
  369.     ;
  370.     ; В регистре ebx будем сохранять текущий размер полученного  массива
  371.     ; в esi
  372.     ; в edi будем хранить текущий адрес массива
  373.     ;
  374.  
  375.     mov ebx, 0
  376.  
  377.     mov dword ptr [ebp - 4], 0 ; размер выделенной памяти
  378.     mov dword ptr [ebp - 8], 0 ; адрес начала предложения
  379.     mov dword ptr [ebp - 12], 0 ; количество знаков препинания
  380.     mov dword ptr [ebp - 16], 0 ; адрес конца предложения
  381.     mov dword ptr [ebp - 20], 0 ; адрес нового массива пар или троек
  382.     mov dword ptr [ebp - 24], 0 ; для указателя
  383.  
  384.     mov esi, 0
  385.  
  386.     mov ecx, 0
  387.  
  388.     mov edi, [ebp + 16] ; поместили адрес начала текста
  389. ;
  390. ;     outintln [ebp + 8]
  391. ;     outintln [ebp + 12]
  392. ;     outintln [ebp + 16]
  393. ;     outintln [ebp + 20]
  394. ;
  395. ;     outstrln "Goyda!!"
  396.  
  397.  
  398. ; tag_before_start:
  399. ;     ;помещаем в [ebp - 8] адрес начала предложения
  400. ;     mov dword ptr [ebp - 8], ecx
  401.  
  402. find_punkt_marks:
  403.     mov edi, [ebp + 16]
  404.  
  405.     cmp ecx, [ebp + 20]
  406.     jae after_read_elems_of_text_loop
  407.  
  408. ;     outstrln "we print some shit"
  409. ;     outcharln byte ptr [edi + 1 * ecx]
  410. ;     outintln byte ptr [edi + 1 * ecx]
  411.  
  412.     cmp byte ptr [edi + 1 * ecx], ','
  413.     je we_got_punkt_mark
  414.  
  415.     cmp byte ptr [edi + 1 * ecx], '-'
  416.     je we_got_punkt_mark
  417.  
  418.     cmp byte ptr [edi + 1 * ecx], ':'
  419.     je we_got_punkt_mark
  420.  
  421.     cmp byte ptr [edi + 1 * ecx], '('
  422.     je we_got_punkt_mark
  423.  
  424.     cmp byte ptr [edi + 1 * ecx], ')'
  425.     je we_got_punkt_mark
  426.  
  427.     cmp byte ptr [edi + 1 * ecx], '!'
  428.     je we_got_punkt_mark
  429.  
  430.     cmp byte ptr [edi + 1 * ecx], '?'
  431.     je we_got_punkt_mark
  432.  
  433.     cmp byte ptr [edi + 1 * ecx], ';'
  434.     je we_got_punkt_mark
  435.  
  436.     cmp byte ptr [edi + 1 * ecx], '.'
  437.     je dot
  438.  
  439.     inc ecx
  440.  
  441.     jmp find_punkt_marks
  442.  
  443.     ;если наткнулись на пунктуационный знак, то прибавляем один
  444.     we_got_punkt_mark:
  445.         inc dword ptr [ebp - 12]
  446.         inc ecx
  447. ;         outstrln "Its ecx in we_got_punkt_mark"
  448. ;         outintln ecx
  449.         jmp find_punkt_marks
  450.  
  451.     dot:
  452.         outstrln "Sentence has ended"
  453.         outstr "Print ECX - adress of the sentence "
  454.         outintln ecx
  455.         outintln dword ptr [ebp - 12]
  456.  
  457.         mov edi, [ebp - 20] ; указатель на начало массива троек
  458.  
  459.         inc ecx
  460.         mov dword ptr [ebp - 16], ecx ; [ebp - 16] - адрес конца предложения (относительно начала текста)
  461.  
  462.  
  463.         cmp ebx, [ebp - 4]
  464.         jb enough_memory
  465.         outstrln "Allocation mem in main part"
  466.  
  467.         mov eax, 12
  468.         mul ebx
  469.         add eax, ALLONG_SIZE * 12
  470.  
  471.         jc process_main_part_overflow
  472.  
  473.         add dword ptr [ebp - 4], ALLONG_SIZE
  474.  
  475.         push ebx
  476.  
  477.         outstr "New memory allocation size: "
  478.         outintln eax
  479.  
  480.         new eax
  481.         cmp eax, 0
  482.         je process_main_part_out_of_mem
  483.  
  484.         outstr "New pointer to array: "
  485.         outintln eax
  486.  
  487.         outstr "Old pointer to array: "
  488.         outintln edi
  489.  
  490.         pop ebx
  491.  
  492.         mov ecx, 0
  493.  
  494.     copy_array_pair_loop:
  495.         cmp ecx, ebx
  496.         jae after_copying_array
  497.         push esi
  498.         push eax
  499.  
  500.         mov eax, 12
  501.         mul ecx
  502.         mov esi, eax
  503.         pop eax
  504.  
  505.         mov edx, [edi + esi]
  506.         mov [eax + esi], edx
  507.  
  508.         mov edx, [edi + esi + 4]
  509.         mov [eax + esi + 4], edx
  510.  
  511.         mov edx, [edi + esi + 8]
  512.         mov [eax + esi + 8], edx
  513.  
  514.         pop esi
  515.  
  516.         inc ecx
  517.  
  518.         jmp copy_array_pair_loop
  519.  
  520.     after_copying_array:
  521. ;         outstrln "we print new adreess"
  522. ;         outintln eax
  523.  
  524.         xchg eax, edi
  525.  
  526. ;         outstrln "we print new adreess"
  527. ;         outintln edi
  528.  
  529.         cmp eax, 0
  530.         je enough_memory
  531.  
  532.         push ebx
  533.         push ecx
  534.         push edi
  535.         dispose eax
  536.         pop edi
  537.         pop ecx
  538.         pop ebx
  539.  
  540.     enough_memory:
  541. ;         outstrln "we have enough mem"
  542.         mov ecx, dword ptr [ebp - 16]
  543.         mov eax, 12
  544.         mul ebx
  545.         push esi
  546.  
  547.         mov esi, [ebp - 12] ; в esi поместили число знаков препинания
  548.         mov [edi + eax], esi
  549.  
  550.         mov [ebp - 12], dword ptr 0 ; обнуляем число знаков препинания
  551. ;         outstrln "We print the number of punkt"
  552. ;         outintln esi
  553.  
  554.         mov esi, [ebp - 8] ; в esi поместили адрес начала предложения
  555.         mov [edi + eax + 4], esi
  556. ;         outstrln "We print the adress begin"
  557. ;         outintln esi
  558.  
  559.         mov esi, [ebp - 16] ;в esi поместили конец предложения
  560.         mov [edi + eax + 8], esi
  561. ;         outstrln "We print the adress end"
  562. ;         outintln esi
  563.  
  564.         pop esi
  565.         inc ebx
  566.  
  567.         mov dword ptr [ebp - 20], edi
  568.  
  569.         mov dword ptr [ebp - 8], ecx
  570.  
  571.         mov dword ptr [ebp - 24], edi
  572.  
  573.         jmp find_punkt_marks
  574.  
  575.     after_read_elems_of_text_loop:
  576.  
  577.         newline
  578.         outstrln "Finish of creating array of triples"
  579.  
  580.         mov edi, dword ptr [ebp - 24]
  581.     ;
  582.     ; normal finishing
  583.     ;
  584.  
  585.     ;
  586.     ; возвращаем адрес массива
  587.     ;
  588.         mov edx, [ebp + 8]
  589.         mov [edx], edi
  590.  
  591.     ;
  592.     ; возвращаем размер массива
  593.     ;
  594.         mov edx, [ebp + 12]
  595.         mov [edx], ebx
  596.  
  597.         outstr "size of arr: "
  598.         outintln ebx
  599.  
  600.         pop edi
  601.         pop esi
  602.         pop ebx
  603.  
  604.         mov eax, 0
  605.  
  606.         mov esp, ebp
  607.         pop ebp
  608.         ret 4 + 4 + 4 + 4
  609.  
  610.  
  611.     process_main_part_overflow:
  612.  
  613.         outstrln "We have overflow!"
  614.  
  615.         dispose edi ; чистим выделенную память
  616.         pop edi
  617.         pop esi
  618.         pop ebx
  619.  
  620.         mov eax, 1
  621.  
  622.         mov [ebp - 12], dword ptr 0
  623.  
  624.         mov esp, ebp
  625.         pop ebp
  626.         ret 4 + 4 + 4 + 4
  627.  
  628.     process_main_part_out_of_mem:
  629.         dispose edi ; чистим выделенную память
  630.         pop edi
  631.         pop esi
  632.         pop ebx
  633.  
  634.         mov eax, 2
  635.  
  636.         mov [ebp - 12], dword ptr 0
  637.  
  638.         mov esp, ebp
  639.         pop ebp
  640.         ret 4 + 4 + 4 + 4
  641.  
  642. main_part endp
  643.  
  644. print_sentence_array proc
  645.  
  646.     push ebp
  647.     mov ebp, esp
  648.     push edi
  649.  
  650.     mov edi, [ebp + 8]  ; arr_pointer_pair
  651.     mov ebx, [ebp + 16] ; arr_pointer
  652.  
  653.     mov ecx, 0
  654.     mov eax, 0
  655.  
  656.     outstrln "Process of printing array of pairs:"
  657.     newline
  658.  
  659. loop_print_mas:
  660.  
  661.     cmp ecx, [ebp + 12]
  662.     jae after_loop_print_mas
  663.  
  664.     mov eax, 12
  665.     mul ecx
  666.  
  667.     outstr "Size: "
  668.     outintln dword ptr [edi + eax]
  669.     mov edx, dword ptr [edi + eax + 4]
  670.  
  671. print_mas:
  672.  
  673.     cmp edx, [edi + eax + 8]
  674. ;     outintln dword ptr [edi + eax + 4]
  675. ;     outintln dword ptr [edi + eax + 4]
  676.     jae next_print
  677.     outchar byte ptr [ebx + edx]
  678.     inc edx
  679.     jmp print_mas
  680.  
  681. next_print:
  682.  
  683.     inc ecx
  684.     newline
  685.     newline
  686.     jmp loop_print_mas
  687.  
  688. after_loop_print_mas:
  689.  
  690.     pop edi
  691.     pop ebp
  692.     ret 4 + 4 + 4
  693. print_sentence_array endp
  694.  
  695. ; def InsertionSort(A):
  696. ;     for i in range(1, len(A)):
  697. ;         # В new_elem сохранили значение A[i]
  698. ;         new_elem = A[i]
  699. ;         # Начиная с элемента A[i - 1]
  700. ;         j = i - 1
  701. ;         # все элементы, которые больше new_elem
  702. ;         while j >= 0 and A[j] > new_elem:
  703. ;             # сдвигаем вправо на 1
  704. ;             A[j + 1] = A[j]
  705. ;             j -= 1
  706. ;         # На свободное место записываем new_elem
  707. ;         A[j + 1] = new_elem
  708.  
  709. insertionSort proc
  710.  
  711.     push ebp
  712.     mov  ebp, esp
  713.  
  714.     sub esp, 8
  715.  
  716.     push ebx
  717.     push esi
  718.     push edi
  719.     push edx
  720.  
  721.     ;ebp + 8    указатель на массив
  722.     ;ebp + 12   число элементов в массиве
  723.  
  724.     ; установили есх на число элементов
  725.  
  726.     ; установили есх на последний элемент массива
  727.     mov eax, dword ptr [ebp + 12] ; количество элементов массива пар
  728.     mov ecx, 12 ; 12 * [ebp + 12]
  729.     mul ecx
  730.     mov ecx, eax
  731.  
  732.     mov eax, 0          ; eax = 'i'
  733.     xor ebx, ebx        ; ebx = 'j'
  734.     mov esi, dword ptr [ebp + 8]    ; esi - адрес массива
  735.  
  736.     mov dword ptr [esp - 4], 0 ; адрес начала
  737.     mov dword ptr [esp - 8], 0 ; адрес конца
  738.  
  739.     forloop:
  740.         ;If 'i' >= the number of items, exit the loop
  741.         cmp eax, ecx
  742.         jge endloop
  743.  
  744.         ; сохраняем наше значение количества элементов
  745.         push ecx
  746.  
  747.         ;сохраним в есх числовое значение key
  748.         mov ecx, dword ptr [esi + eax]
  749.  
  750.         mov edx, dword ptr [esi + eax + 4]
  751.         mov dword ptr [esp - 4], edx
  752.  
  753.         mov edx, dword ptr [esi + eax + 8]
  754.         mov dword ptr [esp - 8], edx
  755.  
  756.         ;j = i-1
  757.         mov ebx, eax
  758.         sub ebx, 12
  759.  
  760.         whileloop:
  761.             ;если j < 0, покидаем цикл
  762.             cmp ebx, 0
  763.             jl endwhile
  764.  
  765.             ;если array[j] <= key, покидаем цикл
  766.             cmp dword ptr [esi + ebx], ecx
  767.             jle endwhile
  768.  
  769.             mov edx, dword ptr [esi + ebx]
  770.             mov dword ptr [esi + ebx + 12], edx
  771.  
  772.             mov edx, dword ptr [esi + ebx + 4]
  773.             mov dword ptr [esi + ebx + 4 + 12], edx
  774.  
  775.             mov edx, dword ptr [esi + ebx + 8]
  776.             mov dword ptr [esi + ebx + 8 + 12], edx
  777.  
  778.             ;j--
  779.             sub ebx, 12
  780.  
  781.             ;Go back to the top of this loop
  782.             jmp whileloop
  783.  
  784.         endwhile:
  785.  
  786.         ;array[j+1] = key
  787.         mov dword ptr [esi + ebx + 12], ecx
  788.  
  789.         mov edx, [esp - 4]
  790.         mov dword ptr [esi + ebx + 12 + 4], edx
  791.  
  792.         mov edx, [esp - 8]
  793.         mov dword ptr [esi + ebx + 12 + 8], edx
  794.         ;i++
  795.         add eax, 12
  796.  
  797.         ;restore our "number of items" value
  798.         pop ecx
  799.  
  800.         jmp forloop
  801.  
  802.     endloop:
  803.  
  804.     pop edx
  805.     pop edi
  806.     pop esi
  807.     pop ebx
  808.  
  809.     mov esp, ebp
  810.     pop ebp
  811.  
  812.     ret 4 + 4
  813. insertionSort endp
  814.  
  815.  
  816.  
  817.  
  818. start:
  819.  
  820.    push offset array_size
  821.    push offset array_pointer
  822.    call read_array
  823.  
  824.    outstr "array read, size: "
  825.    outintln array_size
  826.  
  827.    push array_size
  828.    push array_pointer
  829.    call print_array
  830.  
  831.    newline
  832.  
  833.    push array_size
  834.    push array_pointer
  835.    push offset array_size_for_pair
  836.    push offset array_pointer_for_pair
  837.    call main_part
  838.  
  839.    newline
  840.  
  841.    push array_pointer
  842.    push array_size_for_pair
  843.    push array_pointer_for_pair
  844.    call print_sentence_array
  845.  
  846.    push array_size_for_pair
  847.    push array_pointer_for_pair
  848.    call insertionSort
  849. ;
  850.    push array_pointer
  851.    push array_size_for_pair
  852.    push array_pointer_for_pair
  853.    call print_sentence_array
  854.  
  855.    exit 0
  856. end start
  857.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement