Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "io.inc"
  2.  
  3. SECTION .data
  4.         X dd 1, 2, 3, 4, 5, 6, 7, 0, 4294967295, 4294967295
  5.         Y dd 0, 0, 0, 0, 0, 0, 3, 4, 2, 10
  6.         sum TIMES 11 dd 0
  7.         multi TIMES 20 dd 0
  8.         size dd 10 
  9.         doubleword equ 4
  10.         rem dd 0
  11.         temp dd 0
  12.         mul_rem dd 0
  13.  
  14. SECTION .text
  15.  
  16. global CMAIN
  17.  
  18. overflow_sum:
  19.     mov ebx,[sum+edx]
  20.     add ebx, 1
  21.     jc overflow_sum
  22.     mov [sum + edx], ebx
  23.     jmp continue_sum
  24. overflow_extra:
  25.     mov eax,[sum+esi]
  26.     add eax, 1
  27.     mov [sum + esi], eax
  28.     jmp continue_sum_extra
  29. multi_overflow:
  30.     jmp continue_sum
  31.  
  32. CMAIN:
  33.     mov ebp, esp; for correct debugging
  34.     mov ecx, [size]
  35. loop_sum:
  36.     dec ecx
  37.     mov eax, ecx
  38.     mov ebx, 4
  39.     mul ebx
  40.     mov edx, eax
  41.     mov eax, [X + edx]
  42.     mov ebx, [Y + edx]
  43.     mov esi, edx
  44.     add eax, ebx
  45.     jc overflow_sum
  46. continue_sum:
  47.     mov ebx, [sum + edx + 4]
  48.     add ebx, eax
  49.     jc overflow_extra
  50. continue_sum_extra:
  51.     mov [sum + edx + 4], ebx
  52.     cmp ecx, 0
  53.     jne loop_sum
  54.     ; =================
  55.     mov eax,0
  56.     ; вывод суммы
  57.     mov ecx, [size]
  58.     inc ecx
  59.     PRINT_STRING 'Сумма: '
  60. loop_sum_out:
  61.     mov ebx, [sum + eax * 4]
  62.     PRINT_UDEC 4, ebx
  63.     PRINT_STRING ' '
  64.     inc eax
  65.     cmp eax, ecx
  66.     jne loop_sum_out
  67.     NEWLINE
  68. _preparations:
  69.     CLC
  70.     mov edi, 40  ; size *4
  71.     mov edx, 0
  72.     mov esi, 0
  73.     CLC
  74. _mult:
  75.     mov ecx, 40 ; size *4
  76.     sub edi, 4
  77.     cmp edi, -4
  78.     mov esi, 1
  79.     je _exit
  80.     jmp _mult_dp
  81. _restore_edi:
  82.     mov edi,[temp]
  83. _mult_dp:
  84.     sub ecx, 4
  85.     cmp ecx, -4
  86.     je _mult
  87.     mov eax, [X + ecx]
  88.     mov ebx, [Y + edi]
  89.     mul ebx
  90.     add [multi + ecx + edi + 4] ,eax
  91.     adc [multi + ecx + edi], edx
  92.     mov [temp],edi
  93.     jc _add1
  94.     jmp _mult_dp
  95. _add1:
  96.     sub edi, 4
  97.     cmp edi, -4
  98.     mov esi, 1
  99.     add [multi+ecx+edi], esi
  100.     jc _add1
  101.     jnc _restore_edi                      
  102. _exit:
  103.     mov eax, 0
  104.     mov ecx, 20
  105.     PRINT_STRING 'Произведение: '
  106. loop_multi_out:
  107.     mov ebx, [multi + eax*4]
  108.     PRINT_UDEC 4, ebx
  109.     PRINT_STRING ' '
  110.     inc eax
  111.     cmp eax, ecx
  112.     jne loop_multi_out
  113.     mov eax, 0x1        ;Системный вызов - exit
  114.     mov ebx, 0x0        ;Код завершения программы    
  115.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement