, ASK LAB5 Mnozenie, WI ZUT studia, Studia ( WI ZUT ), Architektura systemów komputerowych 

ASK LAB5 Mnozenie

ASK 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 ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • dodatni.htw.pl