Asembler_cwiczenia_praktyczne_cwasem.pdf

(348 KB) Pobierz
IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI
KATALOG KSI¥¯EK
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
Asembler.
Æwiczenia praktyczne
Autor: Eugeniusz Wróbel
ISBN: 83-7197-836-7
Format: B5, stron: 166
TWÓJ KOSZYK
DODAJ DO KOSZYKA
Wydawa³oby siê, ¿e takie jêzyki jak Java czy C++ ca³kowicie usunê³y asembler w cieñ.
Nie jest to jednak prawda. Fachowcy od asemblera s¹ i bêd¹ poszukiwani na rynku
pracy. Aplikacje multimedialne, gry, programy dzia³aj¹ce w czasie rzeczywistym to tylko
niektóre obszary wykorzystania tego jêzyka. Dziêki ksi¹¿ce czytelnik mo¿e do³¹czyæ do
elitarnej grupy programistów, którzy potrafi¹ wykorzystaæ wszystkie mo¿liwo ci sprzêtu
i przej¹æ nad nim pe³n¹ kontrolê.
Ksi¹¿ka zawiera zestaw æwiczeñ z asemblera procesora Pentium, opracowany przez
specjalistów z Politechniki l¹skiej w Gliwicach. Umo¿liwiaj¹ one czytelnikowi
zapoznanie siê z m.in.:
Narzêdziami u¿ywanymi do pisania i uruchamiania programów asemblerowych
List¹ rozkazów procesora Pentium oraz sposobami adresowania argumentów
Dyrektywami jêzyka MASM
Sposobami pisania podprogramów i makroinstrukcji
Metodami obs³ugi przerwañ i pisania programów rezydentnych
Sposobami optymalizacji kodu
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
O NOWO CIACH
ZAMÓW CENNIK
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
Rozdział 1.
Wprowadzenie ........................................................................................................................................... 5
2.1. Gdzie i w jakiej formie dostępny jest program asemblera ....................................................9
2.2. Inne narzędzia niezbędne, aby uruchomić pierwszy program w asemblerze......................10
Rozdział 2. Narzędzia....................................................................................................................................................... 9
Rozdział 3. Asembler, czyli język zorientowany maszynowo.................................................................... 13
3.1. Znajomość procesora. Skąd czerpać niezbędną wiedzę o procesorze?...............................14
3.2. Podstawowe informacje, potrzebne programiście...............................................................15
Podstawowe rejestry procesora.......................................................................................15
Rejestry koprocesora arytmetycznego ............................................................................17
Rejestry rozszerzenia MMX ...........................................................................................19
Rejestry rozszerzenia SSE oraz SSE2.............................................................................20
3.3. Skąd czerpać wiedzę na temat asemblera?..........................................................................21
Rozdział 4. Przykłady u ycia rozkazów procesora.........................................................................................25
4.1. Rozkazy procesora głównego..............................................................................................26
Rozkazy przesłań ............................................................................................................26
Rozkazy arytmetyczno-logiczne.....................................................................................28
Rozkazy sterujące wykonaniem programu .....................................................................32
Rozkazy wejścia-wyjścia ................................................................................................34
4.2. Sposoby adresowania argumentów .....................................................................................34
Tryby adresacji procesora 8086 ......................................................................................34
Adres efektywny .............................................................................................................36
Tryby adresacji procesorów 80x86.................................................................................36
4.3. Rozkazy koprocesora arytmetycznego................................................................................41
4.4. Rozkazy rozszerzenia MMX ...............................................................................................46
Rozdział 5. Podstawowa struktura programu asemblerowego............................................................. 57
5.1. Podział programu na segmenty ...........................................................................................57
5.2. Technika podprogramów.....................................................................................................66
Dyrektywa definiująca podprogram ...............................................................................67
Przekazywanie parametrów do podprogramu.................................................................68
Zmienne lokalne..............................................................................................................71
4
Asembler. Ćwiczenia praktyczne
5.3. Technika makroinstrukcji....................................................................................................73
Makroinstrukcje tekstowe...............................................................................................74
Makroinstrukcje definiowane .........................................................................................74
Bloki iteracyjne...............................................................................................................78
Biblioteki makroinstrukcji ..............................................................................................80
5.4. Wpływ systemu operacyjnego ............................................................................................86
Rozdział 6. Uruchamianie prostych programów............................................................................................ 91
6.1. Programy typu .COM oraz .EXE ........................................................................................91
6.2. Wykorzystanie podprogramów systemowych ....................................................................97
6.3. Parametry wywołania programu .......................................................................................102
6.4. Obsługa przerwań priorytetowych ....................................................................................105
6.5. Programy rezydentne.........................................................................................................111
6.6. Programy biblioteczne.......................................................................................................117
Rozdział 7.
Problemy optymalizacji kodu programu ................................................................................. 121
7.1. Dobór algorytmu ...............................................................................................................125
7.2. Wybrane zagadnienia optymalizacji .................................................................................130
Właściwy dobór rozkazów procesora ...........................................................................130
Unikanie rozgałęzień ....................................................................................................133
Rozmieszczenie struktur danych w pamięci operacyjnej .............................................136
Rozdział 8. Przykłady prostych programów....................................................................................................143
8.1. Przeglądanie zawartości katalogów ..................................................................................143
8.2. Identyfikacja procesora .....................................................................................................154
3.
Asembler, czyli język
zorientowany maszynowo
Rozdział
Jak ju wspomniano w rozdziale pierwszym, asembler jest językiem zorientowanym
maszynowo i dlatego:
Program przygotowany dla określonego procesora nie mo e być wykonany przez
inne procesory. W przypadku procesorów serii 80x86 firmy Intel program napisany
dla procesorów starszych typów będzie mógł być wykonywany przez procesory
nowsze, zachowana jest bowiem (zwana tak w informatycznym argonie)
„kompatybilność” kolejnych procesorów
1
.
Aby programować w asemblerze, trzeba znać podstawową architekturę procesora,
w szczególności dostępne programowo rejestry oraz organizację pamięci
operacyjnej.
Aby
dobrze
programować w asemblerze, nale y poznać wewnętrzną organizację
procesora, pamięci podręcznej, mikroarchitekturę układów dekodujących rozkazy
oraz układów wykonawczych i wiele innych niełatwych i czasem trudno dostępnych
w literaturze informacji o sposobie wykonywania poszczególnych rozkazów
procesora.
1
Przy pewnych zało eniach, np. e nieistotny jest czas wykonania programu.
14
Asembler. Ćwiczenia praktyczne
3.1. Znajomość procesora. Skąd czerpać
niezbędną wiedzę o procesorze?
Opis procesorów 80x86 znajdzie Czytelnik w wielu pozycjach literatury, a tak e w do-
stępnej na stronach internetowych w postaci plików w formacie
PDF
dokumentacji fir-
my Intel
2
. Z tego te powodu w niniejszym rozdziale ograniczymy się jedynie do przy-
pomnienia najwa niejszych informacji niezbędnych do zrozumienia przykładowych
ćwiczeń przedstawionych Czytelnikowi w następnych rozdziałach. Rozpoczniemy od
zebrania w tabeli 3.1 niektórych parametrów najwa niejszych procesorów serii 80x86.
Tabela 3.1.
Wybrane parametry procesorów 80x86
Procesor
Data
wprowadzenia
Mikro-
architektura
Pierwotna
częstotliwość
zegara
Rozmiar
dostępnych
rejestrów
(w bitach)
Przestrzeń
adresowa
pamięci
Pamięć
podręczna
8086
Intel 286
1978
1982
8 MHz
12,5 MHz
20 MHz
25 MHz
P5
P6
60 MHz
200 MHz
16
16
32
GP: 32
FPU: 80
GP: 32
FPU: 80
GP: 32
FPU: 80
GP: 32
FPU: 80
MMX: 64
GP: 32
FPU: 80
MMX: 64
XMM: 128
GP: 32
FPU: 80
MMX: 64
XMM: 128
1 MB
16 MB
4 GB
4 GB
4 GB
64 GB
8 KB L1
16 KB L1
16 KB L1
512 KB L2
16 KB L1
512 KB L2
16 KB L1
256 lub 512
KB L2
12 KB µop
Execution
Trace Cache
8 KB L1
256 KB L2
Intel 386 DX 1985
Intel 486 DX 1989
Pentium
Pentium Pro
1993
1995
Pentium II
1997
P6
266 MHz
64 GB
Pentium III
1999
P6
700 MHz
64 GB
Pentium 4
2000
Intel
NetBurst
micro-
architecture
1,4 GHz
64 GB
2
Nie sposób wyobrazić sobie tworzenia programów asemblerowych bez mo liwości ciągłego odwoływania
się w czasie pracy do pozycji [10], [11], [12], podanych w bibliografii. Dokumentacja jest udostępniona
przez firmę Intel i uaktualniana w miarę pojawiania się nowych procesorów.
Zgłoś jeśli naruszono regulamin