Asembler. Podstawy programowania w Windows. Stanisław Kruk.pdf

(2662 KB) Pobierz
33309777 UNPDF
Stanisław Kruk Asembler. Podstawy programowania w Windows.
Wydawnictwo ebooków http://www.EscapeMagazine.pl 1 z 37
33309777.001.png
Stanisław Kruk Asembler. Podstawy programowania w Windows.
Asembler. Podstawy programowania w Windows.
Stanisław Kruk
Skład i łamanie: Patrycja Kierzkowska
Korekta: Anna Matusewicz
Wydanie pierwsze, Jędrzejów 2007
ISBN: 978-83-60320-18-1
Wszelkie prawa zastrzeżone!
Autor oraz Wydawnictwo dołożyli wszelkich starań, by informacje zawarte w tej publikacjach
były kompletne, rzetelne i prawdziwe. Autor oraz Wydawnictwo Escape Magazine nie
ponoszą żadnej odpowiedzialności za ewentualne szkody wynikające z wykorzystania
informacji zawartych w publikacji lub użytkowania tej publikacji.
Wszystkie znaki występujące w publikacji są zastrzeżonymi znakami firmowymi bądź
towarowymi ich właścicieli.
Wszelkie prawa zastrzeżone. Rozpowszechnianie całości lub fragmentu w jakiejkolwiek
postaci jest zabronione. Kopiowanie, kserowanie, fotografowanie, nagrywanie,
wypożyczanie, powielanie w jakiekolwiek formie powoduje naruszenie praw autorskich.
Wydawnictwo Escape Magazine
ul. Spokojna 14
28-300 Jędrzejów
darmowy fragment
Wydawnictwo ebooków http://www.EscapeMagazine.pl 2 z 37
33309777.002.png
Stanisław Kruk Asembler. Podstawy programowania w Windows.
Rozdział 1
Co to jest Asembler?
W zasadzie każda opowieść lub teoria naukowa, mniej lub bardziej ambitna bazuje na
pojęciach elementarnych, dobrze określonych albo znanych od dawna, uznawanych za
pewniki niepodlegające dyskusji. Oczywiście te pewniki, aksjomaty, nie wzięły się znikąd,
lecz z wnikliwej obserwacji przyrody i dlatego z uwagi na ich oczywistość nie udowadniano
ich. To tak jakby udowadniano, że istnieje Ziemia, Słońce, Księżyc. Początek każdej
opowieści czy teorii zaczyna się zazwyczaj od uznania czegoś za oczywiste, elementarne, by
następnie bazując na takim wartościowaniu tworzyć i rozszerzać wątki tematyczne wszerz
i wzdłuż .
Aby umieć czytać, rozpoznawać świat, musimy operować jakimś językiem. Nieważne,
jakim, bo nawet języki plemienne o słabo rozwiniętej gramatyce, bazujące głównie na
emocjach i bogatej gestykulacji niosą całe mnóstwo informacji, rzecz polega na tym by móc
właściwie odczytać wszelkie jego odcienie. W dowolnym języku naturalnym wypowiadamy
słowo atom i wiemy przecież, co ono oznacza. Słowo to (w naszym języku ojczystym)
posiada zaledwie 4 znaki, 4 litery alfabetu. Czy jest jakiś sposób, aby to czy jakiekolwiek
inne słowo przekazać maszynie cyfrowej, komputerowi, by mógł on go „zrozumieć”,
właściwie przetworzyć? Maszyna cyfrowa komunikuje się cyframi, więc zamiast jej podawać
słowa składające się z liter, czytelnych tylko dla ludzi, musimy jej dać odpowiedni ciąg cyfr
równoważny „znaczeniowo” treści słów.
Na przykład słowo: atom zapisujemy w postaci ciągów zerojedynkowych: 01100001 (jako
litera a ) 01110100 (jako t ) 01101111 (jako o ) 01101101 (jako m ). Pisząc zaś w jednym ciągu,
mielibyśmy taki oto łańcuch cyfrowy: 01100001011101000110111101101101. No trudno,
mamy coś za coś. Napisane w języku naturalnym słowo atom zawiera zaledwie kilka liter,
a wypowiedziane zawiera dwie głoski, natomiast zapisane przy pomocy dwóch tylko znaków
Wydawnictwo ebooków http://www.EscapeMagazine.pl 3 z 37
Stanisław Kruk Asembler. Podstawy programowania w Windows.
0 i 1 słowo atom składa się aż z 8*4=32 cyfr; 4 bajty informacji. Jeśli alfabet języka składa
się z kilkunastu czy nawet kilkudziesięciu znaków, to wówczas trzeba niewielu znaków
alfabetu do zapisania słowa. W przypadku dwuznakowego alfabetu musimy się trochę
natrudzić. „Rozmawiając” z maszyną, wystarczy nam język mający w swym alfabecie
zaledwie dwie cyfry, 0 i 1, by „opowiedzieć” jej o wszystkim, co się dzieje we
Wszechświecie. Naprawdę! Jest taki język? Tak, tak. Ten język nazywa się Asembler .
Asembler to język „emocji” procesora – jako „serca” maszyny cyfrowej. Tam nic innego się
nie dzieje jak tylko „stwierdzanie”: TAK lub NIE, no i ich przeróżne tego kombinacje. Jeśli za
TAK podstawimy 1, a za NIE 0, to otrzymamy słowa języka procesora. Taki jest właśnie
czysty Asembler, zerojedynkowy. Takim też Asemblerem posługiwali się programiści
kilkadziesiąt lat temu. Dzisiejszy Asembler obrósł nieco w piórka , bo to już jest Makro- czy
Turbo Asembler, i choć nadal w jego wnętrzu siedzą 0 i 1, to jednak z wierzchu już ich nie
widać.
Współczesny programista, posługując się językami programowania, używa różnych
narzędzi programistycznych ułatwiających mu życie, a poważnie mówiąc, służących do
poprawnego pisania kodu programu, do jego optymalizacji itp. W niniejszej książce opiszemy
również sposób użycia Turbo Debuggera. Oczywiście można wybrać i inne debuggery, jako
programy typu freeware’owego czy choćby shareware’owego. Tu, z uwagi na to, że programy
asemblerowe przekształcane będą przy pomocy Turbo Assemblera i Turbo Linkera, opisano
Turbo Debugger oraz wspomniano o takim debuggerze, który jest dostępny w sieci internet.
Wędrówkę po programowaniu zaczniemy oczywiście od przypomnienia programowania
w Asemblerze w systemie DOS włącznie z użyciem Turbo Debuggera dla DOS. Dopiero
potem, mocno przygotowani do trudniejszej wspinaczki, będziemy zdobywać wyższe szczyty
programowania w języku Asembler, czyli programowania w środowisku Windows.
Wydawnictwo ebooków http://www.EscapeMagazine.pl 4 z 37
Stanisław Kruk Asembler. Podstawy programowania w Windows.
1.1. O procesorze i jego rejestrach – przypomnienie niektórych wiadomości
Programowanie w Asemblerze dla systemu DOS oparte jest na koncepcji nieustannych
ingerencji w rejestry procesora, przydzielania odpowiednich fragmentów pamięci
odpowiednim rejestrom procesora i wreszcie koncepcji zasadzającej się na odpowiednim
rozdzielaniu ról, zadań, odpowiednim aktorom tej specyficznej sceny programistycznej.
Głównymi aktorami tej sceny są rejestry procesora (i koprocesora). Przedstawmy ich.
Najpowszechniej używanym rejestrem jest akumulator - rejestr powszechnego stosowania,
oznaczany literkami AX, a dla procesorów 386 i nowszych jako EAX.
Rejestr AX składa się z dwóch części 8-bitowych, AH i AL. Rejestr EAX ma szerokość 32
bitów, 16 bitów zajmuje wspomniany AX, drugie jego 16 bitów nie zostało nazwane. Rozkaz:
MOV AX, 0ABCDh sprawi, że rejestr AX zostanie zapełniony wartością szesnastkową
0ABCD, i rozmieści ją tak, iż w AH znajdzie się wartość AB, zaś w AL, wartość CD.
Możemy jednak wyraźnie wskazać określoną część rejestru AH bądź AL. Rozkaz MOV
AL,0ABh ulokuje wartość szesnastkową AB w rejestrze AL, natomiast rozkaz MOV
AH,0CDh umieści wartość szesnastkową CD w rejestrze AH.
Proszę zwrócić uwagę na zapis liczby szesnastkowej w rozkazie. Przed liczbą szesnastkową
stawiamy cyfrę 0, kończymy ją literką h. Literką h sygnalizujemy, że mamy do czynienia
z liczbą szesnastkową (heksadecymalną); takie wymagania ma Turbo Asembler (TASM.EXE
lub TASM32.EXE) - jeden z programów biorących udział w dwustopniowym przetwarzaniu
naszego tekstowego programu asemblerowego o rozszerzeniu ASM do postaci
wykonywalnej; drugi stopień przetwarzania półproduktu z postaci OBJ do COM lub EXE
odbywa się przy pomocy turbo linkera (konsolidatora) występującego pod nazwą pliku
TLINK.EXE (lub TLINK32.EXE).
Rejestr AX czy jego rozszerzona wersja 32 bitowa, EAX, otwiera wiele rejestrów,
określanych jako rejestry powszechnego stosowania. Kolejnymi rejestrami w tym szeregu są:
BX, CX, DX oraz rejestry wskaźnikowe i indeksowe SI, DI, BP, SP. Wszystkie one mają swe
32-bitowe wersje, poszerzone, i występują pod nazwami EBX, ECX, EDX, ESI, EDI, EBP,
ESP.
Wydawnictwo ebooków http://www.EscapeMagazine.pl 5 z 37
Zgłoś jeśli naruszono regulamin