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
1
Kontakt: mszaber@wi.ps.pl, mkapruziak@wi.ps.pl
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_pMainWndWindow(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:
2
Kontakt: mszaber@wi.ps.pl, mkapruziak@wi.ps.pl
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++
3
Kontakt: mszaber@wi.ps.pl, mkapruziak@wi.ps.pl
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 Å" 10 = a Å" (8 + 2) = a Å" 8 + a Å" 2 = a Å" 23 + a Å" 21 = a << 3 + a << 1
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 :
4
Kontakt: mszaber@wi.ps.pl, mkapruziak@wi.ps.pl
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
5
Kontakt: mszaber@wi.ps.pl, mkapruziak@wi.ps.pl
Architektura Systemów Komputerowych, Wydział Informatyki, ZUT
Krok 7. (praca samodzielna) Dany jest 8-bitowe a i b , a wynik to 16 bitowy
zapis w zmiennej wynik . Proszę wykonać operację mnożenia.
6
Kontakt: mszaber@wi.ps.pl, mkapruziak@wi.ps.pl
Wyszukiwarka
Podobne podstrony:
Lab5Lab5 1 R4 lab512006 mnozenie02 ASKlab513 Zapytaj Stryja Gadułę Ask Uncle Blabby 07062008ASK Parallelpeie lab5ASK 04 PawelKopec AdrianMakuchmnozenie do 25 1AKiSO lab5więcej podobnych podstron