Прошу помощи у знающих и сведущих людей. Необходимо написать задачку на ассемблере, но увы практических знаний полученных мной не достаточно. Заранее благодарен за помощь.
Ввести два массива одинаковой длины. Сформировать третий массив, записав в него суммы соответствующих элементов первого и второго массива. В полученном массиве найти максимальный элемент.
Другие языки программирования и технологии
Нужна помощь с ассемблером
p686
model flat, stdcall
include "win32lz.inc"
includelib "imp32i.lib"
procdesc VirtualAlloc :dword, :dword, :dword, :dword
procdesc VirtualFree :dword, :dword, :dword
procdesc printf :dword, :vararg
procdesc scanf :dword, :vararg
procdesc _putch :dword
procdesc _getch
codeseg
proc InputArray uses edi ecx, Adr :dword, Len :dword
mov edi, Adr
mov ecx, Len
@@:
push ecx
mov eax, Len
sub eax, ecx
inc eax
call printf, offset OutiFrm, eax
call scanf, offset InFrm, edi
add edi, 8
pop ecx
loop @B
ret
endp
proc OutputArray uses esi ecx, Adr :dword, Len :dword
mov esi, Adr
mov ecx, Len
@@:
push ecx
call printf, offset OutFrm, [dword esi], [dword esi + 4]
add esi, 8
pop ecx
loop @B
call _putch, 13
call _putch, 10
add esp, 8
ret
endp
startupcode
call printf, offset Prompt1
call scanf, offset InNFrm, offset N
mov eax, [N]
shl eax, 3
mov esi, eax
imul eax, eax, 3
call VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE
mov [Array1], eax
add eax, esi
mov [Array2], eax
add eax, esi
mov [Array3], eax
call printf, offset Prompt2
call InputArray, [Array1], [N]
inc [byte Prompt2 + 8]
call printf, offset Prompt2
call InputArray, [Array2], [N]
finit
mov ecx, [N]
mov edi, [Array3]
mov ebx, [Array1]
mov edx, [Array2]
xor esi, esi
@@:
fld [qword ebx + esi * 8]
fadd [qword edx + esi * 8]
fstp [qword edi + esi * 8]
inc esi
loop @B
call printf, offset Message1
call OutputArray, [Array3], [N]
mov ecx, [N]
dec ecx
xor esi, esi
mov edi, 1
mov ebx, [Array3]
FindMax:
fld [qword ebx + edi * 8]
fld [qword ebx + esi * 8]
fcomip st, st1
cmovb esi, edi
jae @F
fstp st
@@:
ffree st
inc edi
loop FindMax
mov eax, esi
inc esi
call printf, offset Message2, esi, [dword ebx + esi * 8 - 8], [dword ebx + esi * 8 - 4]
call printf, offset PromptQuit
call _getch
call VirtualFree, [Array1], NULL, MEM_RELEASE
xor eax, eax
exitcode
dataseg
Prompt1 db "Введите размер массивов: ", 0
Prompt2 db "Введите 1-й массив: ", 13, 10, 0
Message1 db "Сформирован 3-й массив: ", 13, 10, 0
Message2 db 10, "Максимальный элемент 3-го массива [%d] = %0.3f", 13, 10, 10, 0
PromptQuit db "Для завершения работы нажмите любую клавишу... ", 0
InNFrm db "%u", 0
InFrm db "%lf", 0
OutiFrm db "%4u: ", 0
OutFrm db "%8.3f", 0
udataseg
N dd ?
Array1 dd ?
Array2 dd ?
Array3 dd ?
end

model flat, stdcall
include "win32lz.inc"
includelib "imp32i.lib"
procdesc VirtualAlloc :dword, :dword, :dword, :dword
procdesc VirtualFree :dword, :dword, :dword
procdesc printf :dword, :vararg
procdesc scanf :dword, :vararg
procdesc _putch :dword
procdesc _getch
codeseg
proc InputArray uses edi ecx, Adr :dword, Len :dword
mov edi, Adr
mov ecx, Len
@@:
push ecx
mov eax, Len
sub eax, ecx
inc eax
call printf, offset OutiFrm, eax
call scanf, offset InFrm, edi
add edi, 8
pop ecx
loop @B
ret
endp
proc OutputArray uses esi ecx, Adr :dword, Len :dword
mov esi, Adr
mov ecx, Len
@@:
push ecx
call printf, offset OutFrm, [dword esi], [dword esi + 4]
add esi, 8
pop ecx
loop @B
call _putch, 13
call _putch, 10
add esp, 8
ret
endp
startupcode
call printf, offset Prompt1
call scanf, offset InNFrm, offset N
mov eax, [N]
shl eax, 3
mov esi, eax
imul eax, eax, 3
call VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE
mov [Array1], eax
add eax, esi
mov [Array2], eax
add eax, esi
mov [Array3], eax
call printf, offset Prompt2
call InputArray, [Array1], [N]
inc [byte Prompt2 + 8]
call printf, offset Prompt2
call InputArray, [Array2], [N]
finit
mov ecx, [N]
mov edi, [Array3]
mov ebx, [Array1]
mov edx, [Array2]
xor esi, esi
@@:
fld [qword ebx + esi * 8]
fadd [qword edx + esi * 8]
fstp [qword edi + esi * 8]
inc esi
loop @B
call printf, offset Message1
call OutputArray, [Array3], [N]
mov ecx, [N]
dec ecx
xor esi, esi
mov edi, 1
mov ebx, [Array3]
FindMax:
fld [qword ebx + edi * 8]
fld [qword ebx + esi * 8]
fcomip st, st1
cmovb esi, edi
jae @F
fstp st
@@:
ffree st
inc edi
loop FindMax
mov eax, esi
inc esi
call printf, offset Message2, esi, [dword ebx + esi * 8 - 8], [dword ebx + esi * 8 - 4]
call printf, offset PromptQuit
call _getch
call VirtualFree, [Array1], NULL, MEM_RELEASE
xor eax, eax
exitcode
dataseg
Prompt1 db "Введите размер массивов: ", 0
Prompt2 db "Введите 1-й массив: ", 13, 10, 0
Message1 db "Сформирован 3-й массив: ", 13, 10, 0
Message2 db 10, "Максимальный элемент 3-го массива [%d] = %0.3f", 13, 10, 10, 0
PromptQuit db "Для завершения работы нажмите любую клавишу... ", 0
InNFrm db "%u", 0
InFrm db "%lf", 0
OutiFrm db "%4u: ", 0
OutFrm db "%8.3f", 0
udataseg
N dd ?
Array1 dd ?
Array2 dd ?
Array3 dd ?
end

Похожие вопросы
- Нужна помощь с программой на ассемблере - комментирование каждой строки
- нужна помощь в изучении ассемблера
- нужна помощь. найти сумму квадратов чётных элементов на языке ассемблер используя арифметические команды
- Ассемблер! Нужна помощь!
- Помогите, нужен код на ассемблере. Вывод меньшего из введенных чисел
- Для чего нужны флаги в ассемблере?
- Нужна программа на Ассемблере [Assembler, SOS =D]
- Нужна помощь по информатике.
- Нужна помощь с паскалем!
- Программисты,нужна помощь,пожалуйста Для вас легко