Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %include "io.inc"
- SECTION .data
- X dd 1, 2, 3, 4, 5, 6, 7, 0, 4294967295, 4294967295
- Y dd 0, 0, 0, 0, 0, 0, 3, 4, 2, 10
- sum TIMES 11 dd 0
- multi TIMES 20 dd 0
- size dd 10
- doubleword equ 4
- rem dd 0
- temp dd 0
- mul_rem dd 0
- SECTION .text
- global CMAIN
- overflow_sum:
- mov ebx,[sum+edx]
- add ebx, 1
- jc overflow_sum
- mov [sum + edx], ebx
- jmp continue_sum
- overflow_extra:
- mov eax,[sum+esi]
- add eax, 1
- mov [sum + esi], eax
- jmp continue_sum_extra
- multi_overflow:
- jmp continue_sum
- CMAIN:
- mov ebp, esp; for correct debugging
- mov ecx, [size]
- loop_sum:
- dec ecx
- mov eax, ecx
- mov ebx, 4
- mul ebx
- mov edx, eax
- mov eax, [X + edx]
- mov ebx, [Y + edx]
- mov esi, edx
- add eax, ebx
- jc overflow_sum
- continue_sum:
- mov ebx, [sum + edx + 4]
- add ebx, eax
- jc overflow_extra
- continue_sum_extra:
- mov [sum + edx + 4], ebx
- cmp ecx, 0
- jne loop_sum
- ; =================
- mov eax,0
- ; вывод суммы
- mov ecx, [size]
- inc ecx
- PRINT_STRING 'Сумма: '
- loop_sum_out:
- mov ebx, [sum + eax * 4]
- PRINT_UDEC 4, ebx
- PRINT_STRING ' '
- inc eax
- cmp eax, ecx
- jne loop_sum_out
- NEWLINE
- _preparations:
- CLC
- mov edi, 40 ; size *4
- mov edx, 0
- mov esi, 0
- CLC
- _mult:
- mov ecx, 40 ; size *4
- sub edi, 4
- cmp edi, -4
- mov esi, 1
- je _exit
- jmp _mult_dp
- _restore_edi:
- mov edi,[temp]
- _mult_dp:
- sub ecx, 4
- cmp ecx, -4
- je _mult
- mov eax, [X + ecx]
- mov ebx, [Y + edi]
- mul ebx
- add [multi + ecx + edi + 4] ,eax
- adc [multi + ecx + edi], edx
- mov [temp],edi
- jc _add1
- jmp _mult_dp
- _add1:
- sub edi, 4
- cmp edi, -4
- mov esi, 1
- add [multi+ecx+edi], esi
- jc _add1
- jnc _restore_edi
- _exit:
- mov eax, 0
- mov ecx, 20
- PRINT_STRING 'Произведение: '
- loop_multi_out:
- mov ebx, [multi + eax*4]
- PRINT_UDEC 4, ebx
- PRINT_STRING ' '
- inc eax
- cmp eax, ecx
- jne loop_multi_out
- mov eax, 0x1 ;Системный вызов - exit
- mov ebx, 0x0 ;Код завершения программы
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement