,
ASK LAB5 MnozenieASK LAB5 Mnozenie, WI ZUT studia, Studia ( WI ZUT ), Architektura systemów komputerowych
[ Pobierz całość w formacie PDF ]
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT Laboratorium: Mnożenie win/MFC Krok 1. Uruchamiamy Microsoft Visual Studio 2005. Otwieramy nowy projekt ( menu-File-New-Project ). Konfigurujemy jak na rys.1. Projekt umieszczamy w katalogu C: \ users\inazwisko , gdzie nazwisko to pierwsza litera własnego imienia i nazwisko. Rys.1 . Ustawienia przy tworzeniu nowego projektu Krok 2. Konfigurujemy wzorzec projektu tak jak na rys.2. (typu Single Document) Rys.2. Konfiguracja projektu Kontakt: 1 Architektura Systemów Komputerowych, Wydział Informatyki, ZUT Krok 3. Struktury klas i przykłady. W oknie Class View znajdują się klasy m.in. do tworzenia aplikacji (CMultiplicationApp), okienek, menu (CMainFrame) oraz klasa do tworzenia widoku na którym można rysować (CMultiplcationView). Wykonujemy kompilację programu wciskając przycisk F5 i otrzymujemy puste okienko: Rys.3. Okienko wynikowe otrzymane w wyniku kompilacji Przykładowo, w celu maksymalizacji okienka w klasie CMultiplicationApp dla metody InitInstance w m_pMainWnd®Window(SW_SHOW) zastępujemy SW_SHOWMAXIMIZED jak na rys.4.; Ponownie wykonujemy kompilację. Rys.4. Przykład maksymalizacji rozmiaru okienka W celu wyrysowania linii oraz ciągu znaku w klasie CMulitiplicationView wybieramy metodę OnDraw i wpisujemy następujące wywołania: Kontakt: 2 Architektura Systemów Komputerowych, Wydział Informatyki, ZUT Rys.4. Przykład maksymalizacji rozmiaru okienka komentarz: Typ CString pozwala na deklarację w zmiennych ciągów znaków. Program rysuje linie za przy użyciu metod: MoveTo(x,y) i LineTo(x,y) – gdzie x i y to współrzędne linii. Metoda TextOutW() – pojedynczą linię tekstu. Krok 4. Operacja dodawania dwóch wartości liczbowych przy zastosowaniu wstawki asemblerowej. Rys.5. Wstawka asemblerowa w Visual C++ Kontakt: 3 Architektura Systemów Komputerowych, Wydział Informatyki, ZUT komentarz: wstawkę asemblerową rozpoczynamy od słowa __asm , a ciąg instrukcji do wykonania pomiędzy klamrowymi nawiasami {}; Krok 5. Wykonanie operacji mnożenia stałej wartości liczbowej 10. Mnożenie dowolnej wartości liczbowej przez wartość stałą 10 (a × 10) rozpisujemy następująco: a Rys.6. Operacja mnożenia a × 10 Krok 6. Operacje logiczne: AND, OR i XOR. Instrukcja AND jest stosowana do maskowania argumentów np. ”polecenie wyzerować w ax bit numer n ”. Stosuje się wówczas instrukcję AND z odpowiednią maską, w której bit n jest wyzerowane, a pozostałe są równe 1. Instrukcja AND wpływa na znaczniki np. ZF (znacznik zera) : 1 – gdy wynik operacji AND jest zerem, 0 – jeśli wynik jest różny od zera. Instrukcja OR jest wykorzystywana jest do ustawiania bitów w argumencie, np. „polecenie ustawić w bx bity 2, 4, 6 nie zmieniając pozostałych”, to wykorzystujemy w operacji OR maskę, w której bity 2, 4 i 6 będą równe 1, natomiast pozostałe będą zerami. Instrukcja XOR jest wygodna do odwracania bitów, np. „polecenie odwrócenia/ zanegowania bitów 1, 2, 7 w rejestrze bx, nie zmieniając pozostałych bitów ” , to użyjemy w operacji XOR maski z ustawionymi (równymi 1) bitami 1, 2 i 7, a pozostałymi równymi zero. W kodzie ASCII litery małe od wielkich różnią się tylko tym, że mają ustawiony bit numer 5. Tak więc po wykonaniu poniższego kodu w rejestrze al będzie kod dużej litery ‘A’: Kontakt: 4 × 10 = a × (8 + 2) = a × 8 + a × 2 = a × 2 3 + a × 2 1 = a << 3 + a << 1 Architektura Systemów Komputerowych, Wydział Informatyki, ZUT Rys.7. Zamiana ‘a’ na ‘A’ Przykład zastosowania OR, do zamiany wielkiej litery ‘A’ na małą ‘a’ (rys.8). Rys.8. Zamiana ‘A’ na ‘a’ Informacja dodatkowa: Przykładowo, chcemy sprawdzić, czy bit numer 3 rejestru al jest równy 1 czy 0 ? Instrukcja AND ustawia odpowiednio flagi procesora, więc rozwiązaniem będzie kod: and al, 0x08 jz bit_3_byl_zerem ; jnz bit_3_nie_byl_zerem Instrukcja AND niszczy zawartość rejestru, oprócz interesujących nas bitów. W celu zachowaniu rejestru stosujemy instrukcję TEST. Działa ona identycznie jak AND, ale nie zapisuje wyniku działania. Po co nam więc taka instrukcja? Otóż, wynik nie jest zapisywany, ale TEST ustawia dla nas flagi identycznie jak AND. test al, 0x08 jz bit_3_byl_zerem ;jnz bit_3_nie_byl_zerem Kontakt: 5 [ Pobierz całość w formacie PDF ] |
Podobne
|