Laboratorium Układów Mikroprocesorowych |
||||||
Rok akademicki |
Termin |
Rodzaj studiów |
Kierunek |
Prowadzący |
Grupa |
Sekcja |
2008/2009 |
Wtorek 19:30-21:00 |
wieczorowe |
INF |
MD |
2 |
1 |
Sprawozdanie z ćwiczenia numer 5
Data wykonania ćwiczenia: 2008-12-23
SKŁAD SEKCJI:
Szymoszek Wojciech
ZADANIE 1
Zainstalować RadAsm (w domu). Skompilować i uruchomić program cw5.asm. Czym różni sie programowanie pod DOS od programowania pod Windows?
System Windows dzieli dostęp do procesora pomiędzy programy, natomiast program pisany pod DOS zajmuje 100% czasu procesora. W systemie Windows każdy program ma swoją własną przestrzeń adresową o wielkości 4GB, natomiast w systemie DOS programy mogą widzieć się nawzajem. Dzięki temu dane różnych programów nie będę nadpisywane Pod Win32 występuje model pamięci Flat i nie ma tam segmentów tak jak pod DOSem. Nie trzeba ustawiać rejestrów segmentowych, można używać jakiegokolwiek adresu w przestrzeni pamięci.
ZADANIE 2
Kiedy wywoływany jest komunikat WM_DESTROY? Czy następuje to przed czy po WM_CLOSE?
Komunikat WM_DESTROY jest to ostatni komunikat wywoływany po zamknięciu aplikacji, a jego wywołanie następuje po komunikacie WM_CLOSE.
ZADANIE 3
Kiedy następuje powrót z funkcji GetMessage do naszego programu?
Powrót z funkcji GetMessage następuje po odebraniu komunikatu WM_QUIT.
ZADANIE 4
Wygenerować szablon programu przy pomocy narzędzia prostart.exe. Program powinien zawierać podstawowe menu (File, Help), toolbar z kilkoma przyciskami i status bar. Znaleźć najważniejsze różnice pomiędzy przykładowym programem a szablonem wygenerowanym przez prostart (około 5 różnic). Uwaga: do najważniejszych różnic nie zaliczamy innych nazw zmiennych.
Do podstawowych różnic zaliczamy:
szablon wygenerowany w prostarcie posiada procedurę RegisterWinClass odpowiedzialną za wypełnienie struktury WNDCLASSEX;
w szablonie wygenerowanym przez prostart znajduje się dodatkowa funkcja InitCommonControls, która służy za wstawianie odwołań do biblioteki comctl32.dll;
inna lista rozkazów;
przykładowy program znajduje się w jednym pliku, natomiast prostart dzieli kod na kilka plików;
projekt prostartu ma dołączone dodatkowo pliki dbmacros.asm i errormac.asm odpowiedzialne za obsługę bibliotek dberror.dll i dbshow.dll.
ZADANIE 5
Wygenerować szablon prostego programu, zbliżonego do poprzednich przy użyciu środowiska RadAsm. Znaleźć najważniejsze różnice pomiędzy projektem wygenerowanym przez prostart a projektem wygenerowanym przez RadAsm (około 5 różnic). Zwrócić uwagę przede wszystkim na to, jakie pliki zostały wygenerowane, co się w nich znajduje i jak są powiązane ze sobą.
Do najważniejszych różnic zaliczamy:
prostart umieszcza makra w osobnym pliku;
w prostarcie domyślnym zestawem instrukcji jest .486, a w radasmie .586;
inny sposób tworzenia okna i ustawienia jego stylu;
radasm nie tworzy żadnych makroinstrukcji;
prostart rozdziela kod na kilka plików natomiast radasm generuje wszystko w jednym;
inna obsługa komunikatów i sposób wywoływania funkcji API.
ZADANIE 6
Przy użyciu dowolnego środowiska stworzyć program - zegarek, bazujący na obiekcie timer przy wykorzystaniu Windows API. Jakie linie kodu i w jakiej lokalizacji zostały dopisane w związku z obsługą timera?
W sekcji danych:
szTitle db " ",0 ; string z aktualnym czasem
szFormat db "%2d:%02d:%02d",0 ; format czasu
Przed główną pętlą programu:
invoke SetTimer, hWnd, 128, 1000, NULL ; timer zgłaszający się co sekundę
Zmienna w procedurze MyWndProc:
LOCAL time: SYSTEMTIME
Dopisany fragment procedury MyWndProc odpowiadający za aktualizację czasu:
.elseif uMsg == WM_TIMER
.if wParam == 128
invoke GetLocalTime,ADDR time
xor eax,eax
push eax
mov ax, time.wSecond
push eax
mov ax,time.wMinute
push eax
mov ax, time.wHour
push eax
push offset szFormat
push offset szTitle
call wsprintf
invoke SetWindowText, hWnd, ADDR szTitle
return 0
.endif
WNIOSKI
W kolejnym ostatnim już ćwiczeniu z Języków Asemblerowych nauczyliśmy się tworzyć programy okienkowe przy pomocy rożnych narzędzi. Nauczyłem się dzięki temu na co w szczególności powinno się zwracać uwagę przy tworzeniu takich programów. Dzięki tym umiejętnością udało mi się stworzyć program wyświetlający czas, który jest pobierany z systemu operacyjnego.