работает на 32-битной архитектуре, и я добавляю два массива вместе слот за слотом в третий массив, поэтому, если у меня есть 3,4,4 и 4,4,4 в массивах, третий массив должен содержать 7,8, 8 в конце функции
Мне удалось правильно передать массивы и количество элементов в функцию arleady, я знаю это, потому что я запустил тестовый код
Теперь я работаю над дополнительной частью, вот что у меня есть, логика имеет смысл для меня, но она все еще ошибается ... идеи?
;*************************************ADD ARRAY**********************************************
segment .bss
;
segment .data
summessage db "The Sum is: ", 0
segment .text
extern readdouble,print_string, read_int, writedouble, print_nl, print_int
global addarray
addarray:
pusha
mov edi, 0 ;initialize counter to 0
mov ecx, 0 ;zero out ecx and edx
mov edx, 0
mov ebx, [esp+48] ;moves starting location of array1 into ebx
mov edi, [ebp+40] ;move quantity into edi
mov ebp, [esp+60] ;move the starting location of array2 into ebp
mov esi, [esi] ;move starting locatino of array3 into esi
;mov ecx, [ebp]
;mov edx, [ebp+4]
;call writedouble
;call print_nl
add_loop:
fld qword [ebx] ;The second input is now in a floating point register, specifically st0.
fld qword [ebp]
fadd ;The first input is added to the second input and the sum
;replaces the second input in st0
fstp qword [ecx] ;copy top of stack onto ecx
mov ecx,[ecx]
mov edx,[edx+4]
mov [esi], ecx
mov [esi+4], ecx
add esi, 8 ;increment to the next loaction of esi
add ebx,8 ;increment location of ebx to the next floating point value of array1
;add ebp,8 ;increment location of ebp to the next floating point value of array2
dec edi ;increment counter
cmp edi, 0 ;compare to see if all values have been added
jz add_done
jmp add_loop
add_done:
popa
ret