projekt z języków asemblerowych
TRANSCRIPT
ZAŁOŻENIA PROJEKTU
Wykonywane operacje:
-Dodawanie macierzy
-Odejmowanie macierzy
-Mnożenie macierzy - skalarne
-Mnożenie dwóch macierzy
-Obliczanie wyznacznika macierzy
Operacje matematyczne realizowane za pomocą funkcji asemblerowych
ZAŁOŻENIA PROJEKTU
Język wysokiego poziomu - C++ :
- Interfejs
- Wyświetlanie wyników
- Wczytywanie i zapisywanie do plików
- Sprawdzenie poprawności danych oraz
wykonywalności żądanych operacji
IDEA, ALGORYTMY
- Format plików txt : ilość_wierszy , ilość_kolumn ,
dane - np.:
- 4 5
- -5 1 2 3 4
- 4 4 2 1 3
- 6 2 3 1 -20
- 7 3 2 5 7
Wczytywanie danych do jednowymiarowej tablicy –
łatwiejsza praca w asemblerze
IDEA, ALGORYTMY
Przekazywanie danych – mnożenie
macierzy:
Mnoz_Macierz(TablicaX,TablicaY,TablicaZ,Wiersze_X,Kolumny_X,Wiersze_Y,Kolumny_Y);
extern "C" void __stdcall Mnoz_Macierz(int*,int*,int*,unsigned int, unsigned int,unsigned
int, unsigned int);
Mnoz_Macierz PROC tab1:PTR, tab2:PTR, tab3:PTR, wierszeA:DWORD,
kolumnyA:DWORD, wierszeB:DWORD, kolumnyB:DWORD
IDEA, ALGORYTMY
Przekazywanie danych – wyznacznik
macierzy:
Wyznacznik(Tablica_double,Wiersze_5);
extern "C" void __stdcall Wyznacznik(double*,unsigned int);
Wyznacznik PROC tab1:PTR, rozmiar:DWORD
Procedury dodawania,
odejmowania i mnożenia :
•Rozkazy rozszerzenia MMX
Równoległe obliczenia wielu pól
macierzy wynikowej
Obliczanie wyznacznika :
•zmodyfikowany algorytm Gaussa
•koprocesor arytmetyczny
• obliczenia na liczbach typu
double
NAPOTKANE PROBLEMY
Stworzenie poprawnie działającego projektu - Visual
Obsługa koprocesora –np. przekręcenie się stosu, złe
instrukcje
Literówkę- ebx -> edx
edx=0
Słaba czytelność kodu
QWORD – REAL8
Mała liczba rejestrów
Różnice: Ładowanie danych