Witam :) Mam problem z programem w asemblerze. Jednym z zadań programu jest kopiowanie elementów z jednej tablicy do drugiej, gdzie druga jest przekazywana jako wskaźnik. Mam problem z kodem, gdyż aktualnie zwracane jest ok 30% danych (przykładowo na 10 liczb tylko 3 pierwsze są prawidłowo skopiowane, reszta liczb to wartości przed kopiowaniem). Wyczytałem, że mój problem może być związany ze złymi wartościami (8 bitów zamiast 32) lecz nie potrafię znaleźć co, jak i w jakim miejscu poprawić.
Kopiuj proc uses ebx ecx edx esi edi tablica:DWORD, nowa_tablica:DWORD, ilosc:DWORD, liczbaWatkow:DWORD, indexWatku:DWORD
local liczbaWatkowZmienna:DWORD ;lokalna zmienna przechowywująca "iloscWatkow"
local iloscElem:DWORD ;lokalna zmienna przechowywująca ilość elementów
local licznik:DWORD ;licznik z informacją o aktualnym indeksie tablicy
local adrNowaTab:DWORD
mov eax, ilosc ;wpisanie do rejestru eax "ilość" z parametrów
mov iloscElem, eax ;wpisanie do zmiennej lokalnej
mov eax, liczbaWatkow ;wpisanie do rejestru eax liczby wątków
mov liczbaWatkowZmienna, eax ;wpisanie do zmiennej lokalnej wartości z eax
xor eax, eax ;wyzerowanie rejestru eax
mov ecx, indexWatku ;wpisanie do ecx indeksu aktualnie przerabianego wątku
mov ebx, tablica ;przekazanie adresu tablicy do ebx
mov edx, nowa_tablica ;przekazanie adresu nowej_tablicy do edx
mov adrNowaTab, edx
xor esi, esi
add ebx, ecx ;zwiększenie indeksu tablicy o numer wątku
add edx, ecx ;zwiększenie indeksu nowej tablicy o numer wątku
add esi, ecx ; zwiększenie licznika o numer wątku
petla:
mov eax, [ebx] ;przeniesienie do rejestru eax pierwszego elementu z tablicy ebx
mov [edx], eax ;wpisanie do pierwszego elementu nowa_tablica wartości spod eax
add ebx, liczbaWatkowZmienna ;zwiększenie indeksu tablicy o ilość wątków
add edx, liczbaWatkowZmienna ;zwiększenie indeksu nowej tablicy o ilość wątków
add esi, liczbaWatkowZmienna ;zwiekszenie eax o ilość wątków
cmp esi, iloscElem ;porównanie ilości wątków z licznikiem
jbe petla ;skok do pętla jeżeli mniejsze lub równe
mov eax, adrNowaTab
ret
Kopiuj endp
end
Poglądowa funkcja w c++
for (int i=indexWatku; i<=ilosc; i+=liczbaWatkow){
nowa_tablica[i] = tablica[i];
}
Będę niezmiernie wdzięczny za pomoc, gdyż cały dzień spędziłem próbując to naprawić :)