SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   Praktyczny kurs
                                         asemblera
           KATALOG KSI¥¯EK
                                         Autor: Eugeniusz Wróbel
                      KATALOG ONLINE     ISBN: 83-7361-433-8
                                         Format: B5, stron: 384
       ZAMÓW DRUKOWANY KATALOG


              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA                    Wejd w wiat programowania w jêzyku asemblera
                                            • Dowiedz siê, kiedy u¿ycie asemblera jest niezbêdne
                                            • Poznaj zasady programowania w asemblerze
         CENNIK I INFORMACJE                • Napisz szybkie i wydajne programy dla DOS-a i Windows
                                            • Zdob¹d wiedzê o zasadach dzia³ania procesora i pamiêci
                   ZAMÓW INFORMACJE      Uwa¿asz, ¿e mo¿liwo ci jêzyków programowania wysokiego poziomu nie pozwalaj¹
                     O NOWO CIACH        na napisanie programu, którego potrzebujesz? Chcesz stworzyæ sterownik, program
                                         rezydentny, demo lub... wirusa? Interesuje Ciê, co dzieje siê w komputerze podczas
                       ZAMÓW CENNIK      wykonywania programu?
                                                                   Wykorzystaj potencja³ asemblera!
                 CZYTELNIA               Programowanie w jêzyku niskiego poziomu daje niemal nieograniczon¹ kontrolê
                                         nad sprzêtem i dzia³aniem aplikacji. Programy napisane w jêzyku asemblera dzia³aj¹
          FRAGMENTY KSI¥¯EK ONLINE       szybko, s¹ niewielkie i zajmuj¹ ma³o pamiêci. S¹ bardzo wydajne i otwieraj¹ dostêp
                                         do takich obszarów komputera, do których dostêp z poziomu C++ czy Visual Basica
                                         jest niemo¿liwy.
                                         Ksi¹¿ka „Praktyczny kurs asemblera” wprowadzi Ciê w wiat programowania
                                         w tym jêzyku. Dowiesz siê, jak dzia³a procesor, w jaki sposób komunikuje siê
                                         z pamiêci¹ i pozosta³ymi elementami komputera. Poznasz typy rozkazów procesora,
                                         tryby adresowania i zasady tworzenia programów w asemblerze. Lepiej poznasz swój
                                         komputer i dowiesz siê, w jaki sposób zapamiêtuje i przetwarza dane. Komputer
                                         przestanie byæ dla Ciebie „czarn¹ skrzynk¹” wykonuj¹c¹ w czarodziejski sposób
                                         Twoje polecenia.
                                            • Podstawowe wiadomo ci o architekturze procesorów Intel
Wydawnictwo Helion                          • Organizacja pamiêci i tryby adresowania
ul. Chopina 6                               • Omówienie listy rozkazów procesora
44-100 Gliwice                              • Narzêdzia do tworzenia programów w jêzyku asemblera
tel. (32)230-98-63                          • Struktura programu w asemblerze
e-mail: helion@helion.pl                    • Definiowanie zmiennych
                                            • Tworzenie podprogramów i makrorozkazów
                                            • Wykorzystanie funkcji BIOS-a oraz MS-DOS
                                            • Programy w asemblerze uruchamiane w systemie Windows
                                            • Optymalizacja kodu
                                            • Tworzenie modu³ów dla innych jêzyków programowania
Spis treści
Rozdział 1. Wprowadzenie ................................................................................... 7
                1.1. Co to jest asembler? .....................................................................................................7
                1.2. Dlaczego programować w języku asemblera? ...........................................................10
                1.3. Dlaczego warto poznać język asemblera?..................................................................12
                1.4. Wymagane umiejętności ............................................................................................12
                1.5. Konwencje stosowane w ksią ce ...............................................................................13
Rozdział 2. Zaczynamy typowo — wiedząc niewiele,
            uruchamiamy nasz pierwszy program ................................................ 17
                2.1. „Hello, world!” pod systemem operacyjnym MS DOS .............................................18
                2.2. „Hello, world!” pod systemem operacyjnym Windows.............................................22
Rozdział 3. Wracamy do podstaw — poznajemy minimum wiedzy
            na temat architektury procesorów 80x86 ......................................... 29
                3.1. Rejestry procesora 8086 .............................................................................................30
                3.2. Zwiększamy rozmiar rejestrów — od procesora 80386 do Pentium 4 ......................33
                3.3. Zwiększamy liczbę rejestrów — od procesora 80486 do Pentium 4 .........................35
                3.4. Segmentowa organizacja pamięci ..............................................................................39
                3.5. Adresowanie argumentów..........................................................................................43
                3.6. Adresowanie argumentów w pamięci operacyjnej.....................................................44
Rozdział 4. Poznajemy narzędzia ........................................................................ 47
                4.1. Asembler MASM .......................................................................................................49
                4.2. Program konsolidujący — linker ...............................................................................52
                4.3. Programy uruchomieniowe ........................................................................................54
                4.4. Wszystkie potrzebne narzędzia razem, czyli środowiska zintegrowane....................62
Rozdział 5. Nadmiar możliwości, z którym trudno sobie poradzić
            — czyli lista instrukcji procesora...................................................... 67
                5.1. Instrukcje ogólne — jednostki stałoprzecinkowej .....................................................70
                5.2. Koprocesor arytmetyczny — instrukcje jednostki zmiennoprzecinkowej.................73
                5.3. Instrukcje rozszerzenia MMX....................................................................................75
                5.4. Instrukcje rozszerzenia SSE .......................................................................................78
                5.5. Instrukcje rozszerzenia SSE2 .....................................................................................82
                5.6. Instrukcje rozszerzenia SSE3 .....................................................................................85
                5.7. Instrukcje systemowe .................................................................................................85
4                                                                                                         Praktyczny kurs asemblera


Rozdział 6. Wracamy do ogólnej struktury programu asemblerowego .................. 87
                6.1. Uproszczone dyrektywy definiujące segmenty..........................................................87
                6.2. Pełne dyrektywy definiowania segmentów................................................................92
                6.3. Spróbujmy drobną część tej wiedzy zastosować w prostym programie,
                  a przy okazji poznajmy nowe pomocnicze dyrektywy...................................................96
Rozdział 7. Ważna rzecz w każdym języku programowania
            — definiowanie i stosowanie zmiennych ......................................... 105
                7.1. Zmienne całkowite ...................................................................................................106
                7.2. Zmienne zmiennoprzecinkowe ................................................................................109
                7.3. Definiowanie tablic i łańcuchów..............................................................................110
                7.4. Struktury zmiennych ................................................................................................114
                7.5. Dyrektywa definiująca pola bitowe..........................................................................117
Rozdział 8. Podprogramy ................................................................................. 119
                8.1. Stos ...........................................................................................................................119
                8.2. Wywołanie i organizacja prostych podprogramów..................................................122
                8.3. Poznajemy dyrektywę PROC-ENDP .......................................................................123
                8.4. Parametry wywołania podprogramu ........................................................................128
                8.5. Zmienne lokalne.......................................................................................................137
Rozdział 9. Oddalamy się od asemblera w kierunku języków wyższego poziomu,
            czyli użycie makroinstrukcji oraz dyrektyw asemblacji warunkowej.... 139
                9.1. Makroinstrukcja definiowana...................................................................................139
                9.2. Dyrektywa LOCAL..................................................................................................144
                9.3. Dyrektywy asemblacji warunkowej .........................................................................144
                9.4. Makroinstrukcje niedefiniowane..............................................................................148
                9.5. Makroinstrukcje tekstowe ........................................................................................149
                9.6. Makroinstrukcje operujące na łańcuchach (na tekstach)..........................................150
Rozdział 10. Czy obsługę wszystkich urządzeń komputera musimy wykonać sami?
             Funkcje systemu MS DOS oraz BIOS .............................................. 153
                10.1. Co ma prawo przerwać wykonanie naszego programu?........................................154
                10.2. Obsługa klawiatury oraz funkcje grafiki na poziomie BIOS .................................156
                10.3. Wywoływanie podprogramów systemu operacyjnego MS DOS...........................163
Rozdział 11. Obalamy mity programując w asemblerze
             pod systemem operacyjnym Windows............................................. 169
                11.1. Systemowe programy biblioteczne ........................................................................170
                11.2. Najprawdziwsze pierwsze okno .............................................................................173
                11.3. Struktury programowe HLL — to te jest asembler!.............................................178
                11.4. Idziemy jeden krok dalej i wykorzystujemy program generatora okien Prostart......180
Rozdział 12. Czy możemy przyśpieszyć działanie naszego programu?
             Wybrane zagadnienia optymalizacji programu.................................. 189
                12.1. Kiedy i co w programie powinniśmy optymalizować?..........................................191
                12.2. Optymalizujemy program przygotowany dla procesora Pentium 4.......................193
                12.3. Wspieramy proces optymalizacji programem Vtune .............................................200
                12.4. Na ile ró nych sposobów mo emy zakodować kopiowanie tablic?........................201
Rozdział 13. Dzielimy program na moduły i łączymy moduły zakodowane
             w różnych językach programowania ................................................ 209
                13.1. Jak realizować połączenia międzymodułowe?.......................................................210
                13.2. Mieszamy moduły przygotowane w ró nych językach .........................................214
Spis treści                                                                                                                                    5


Rozdział 14. Przykładowe programy (MS DOS) ................................................... 219
               14.1. Identyfikujemy procesor ........................................................................................219
               14.2. Wchodzimy w świat grafiki — nieco patriotycznie...............................................225
               14.3. Program rezydentny, czyli namiastka wielozadaniowości.....................................228
               14.4. Pozorujemy głębię..................................................................................................233
               14.5. Wy sza graficzna szkoła jazdy ze zmiennymi zespolonymi .................................236
Rozdział 15. Przykładowe programy (Windows) .................................................. 243
               15.1. Zegarek...................................................................................................................243
               15.2. Dotknięcie grafiki przez du e „G” .........................................................................248
               15.3. Przekształcamy mapę bitową .................................................................................250
Załącznik 1. Interesujące strony w internecie .................................................... 271
Załącznik 2. Lista dyrektyw i pseudoinstrukcji języka MASM .............................. 275
               Z2.1. Dyrektywy określające listę instrukcji procesora ..................................................275
               Z2.2. Organizacja segmentów.........................................................................................277
               Z2.3. Definiowanie stałych oraz dyrektywy związane z nazwami symbolicznymi........279
               Z2.4. Definiowanie zmiennych .......................................................................................280
               Z2.4. Dyrektywy asemblacji warunkowej.......................................................................282
               Z2.5. Makroinstrukcje i dyrektywy nimi związane.........................................................283
               Z2.6. Pseudoinstrukcje typu HLL ...................................................................................285
               Z2.7. Dyrektywy związane z podprogramami ................................................................286
               Z2.8. Dyrektywy wpływające na kształt listingu asemblacji ..........................................287
               Z2.9. Połączenia międzymodułowe ................................................................................289
               Z2.10. Dyrektywy związane z diagnostyką procesu asemblacji.....................................290
               Z2.11. Inne dyrektywy i pseudoinstrukcje ......................................................................291
Załącznik 3. Operatory stosowane w języku MASM ............................................ 293
               Z3.1. Operatory stosowane w wyra eniach obliczanych w czasie asemblacji ...............293
               Z3.2. Operatory stosowane w wyra eniach obliczanych
                w czasie wykonywania programu.................................................................................297
Załącznik 4. Symbole predefiniowane................................................................. 299
Załącznik 5. Przegląd instrukcji procesora Pentium 4......................................... 303
               Z5.1. Instrukcje ogólne (jednostki stałoprzecinkowej) ...................................................303
               Z5.2. Instrukcje jednostki zmiennoprzecinkowej (koprocesora arytmetycznego)..........309
               Z5.3. Instrukcje rozszerzenia MMX ...............................................................................313
               Z5.4. Instrukcje rozszerzenia SSE...................................................................................315
               Z5.5. Instrukcje rozszerzenia SSE2.................................................................................319
               Z5.6. Instrukcje rozszerzenia SSE3.................................................................................323
               Z5.7. Instrukcje systemowe.............................................................................................325
Załącznik 6. Opis wybranych przerwań systemu BIOS ......................................... 327
               Z6.1. Funkcje obsługi klawiatury wywoływane przerwaniem programowym INT 16h...327
               Z6.2. Funkcje obsługi karty graficznej wywoływane
                przerwaniem programowym INT 10h. .........................................................................329
Załącznik 7. Wywołania funkcji systemu operacyjnego MS DOS.......................... 335
               Z7.1. Funkcje realizujące odczyt lub zapis znaku z układu wejściowego
                lub wyjściowego ...........................................................................................................335
               Z7.2. Funkcje operujące na katalogach...........................................................................337
               Z7.3. Operacje na dysku..................................................................................................337
               Z7.4. Operacje na plikach (zbiorach) dyskowych...........................................................339
               Z7.5. Operacje na rekordach w pliku ..............................................................................341
6                                                                                                      Praktyczny kurs asemblera


                 Z7.6. Zarządzanie pamięcią operacyjną..........................................................................342
                 Z7.7. Funkcje systemowe................................................................................................342
                 Z7.8. Sterowanie programem ..........................................................................................344
                 Z7.9. Funkcje związane z czasem i datą ...........................................................................345
                 Z7.10 Inne funkcje ..........................................................................................................345
Załącznik 8. Opis wybranych funkcji API ............................................................ 347
                 Z8.1. CheckDlgButtom ...................................................................................................347
                 Z8.2. CloseHandle...........................................................................................................348
                 Z8.3 CopyFile..................................................................................................................349
                 Z8.4. CreateFile...............................................................................................................350
                 Z8.5. CreateWindowEx...................................................................................................352
                 Z8.6. DeleteFile...............................................................................................................355
                 Z8.7. ExitProcess.............................................................................................................355
                 Z8.8. GetFileSize.............................................................................................................356
                 Z8.9. MessageBox...........................................................................................................357
                 Z8.10. ShowWindow.......................................................................................................359
Załącznik 9. Tablica kodów ASCII oraz kody klawiszy ......................................... 361
                 Z9.1. Kody ASCII ...........................................................................................................361
                 Z9.2. Kody klawiszy .......................................................................................................361
Załącznik 10. Program Segment Prefix (PSP).................................................... 367
Załącznik 11. Płyta CD załączona do książki ..................................................... 369
Skorowidz ........................................................................................................ 371
Rozdział 2.
Zaczynamy typowo
— wiedząc niewiele,
uruchamiamy nasz
pierwszy program
   Ka dy szanujący się podręcznik programowania niezale nie od tego, jakiego języka
   dotyczy, musi rozpocząć się zgodnie z powszechnie szanowaną tradycją: programem
   wyświetlającym na ekranie monitora komunikat „Hello, world!”. Wprawdzie nie znamy
   jeszcze ani architektury procesora Pentium, ani te samego języka asemblera i jego skład-
   ni, to jednak spróbujmy pokazać, jak wyglądałby taki miniprogram, i to zarówno w wersji
   przeznaczonej do uruchomienia pod systemem operacyjnym MS DOS, jak i pod sys-
   temem Windows. Tak jak to zostało zasygnalizowane w pierwszym rozdziale, nie bę-
   dziemy chcieli w naszym pierwszym programie zrobić wszystkiego sami! Skorzystamy
   w obu przypadkach z podprogramów (biblioteki) systemowych wyświetlania tekstu na
   ekranie monitora. Tak więc nasz program sprowadzi się do:
        zadeklarowania, jaki tekst chcemy wyświetlić,
        przygotowania parametrów wywołania procedury systemowej,
        wywołania tej e procedury,
        zakończenia programu, czyli oddania sterowania systemowi operacyjnemu.
18                                                               Praktyczny kurs asemblera



2.1. „Hello, world!”
pod systemem operacyjnym MS DOS
     Najprostszy program asemblerowy, który w okienku wirtualnego systemu MS DOS
     bądź na całym ekranie wyświetli ądany napis, mo e mieć następującą postać:
        /ÎL RKGTYU[ RTQITCO Y CUGODNGTG
        5[UVGO QRGTCE[LP[ /5 15
       OQFGN UOCNN                OQFGN RCOKúEK  UGIOGPV RTQITCOW K  UGIOGPV FCP[EJ
                               FQUVúRP[ DKÎT TQMCÎY RTQEGUQTC 

       FCVC                      RQEæVGM UGIOGPVW FCP[EJ
          VGMUV D[VG *GNNQ YQTNF CJFJ
       UVCEM J                UGIOGPV UVQUW Q CFGMNCTQYCP[O TQOKCTG
       EQFG                      RQEæVGM UGIOGPVW  MQFGO RTQITCOW
          UVCTVWR                OCMTQKPUVTWMELC IGPGTWLæEC UGMYGPELú
                                  KPKELWLæEæ TGLGUVT[ UGIOGPVQYG 5 K 55
          OQX FZ QHHUGV VGMUV    YRTQYCFGPKG RCTCOGVTÎY Y[YQ CPKC
          OQX CJ J             RTQEGFWT[ Y[ YKGVNGPKC MQOWPKMCVW
          KPV J                 Y[YQ CPKG RTQEGFWT[ U[UVGOQYGL
       GZKV                      OCMTQKPUVTWMELC IGPGTWLæEC UGMYGPELú MQ EQYæ RTQITCOW
       GPF                        MQPKGE RTQITCOW TÎF QYGIQ

     Spróbujmy teraz kolejno objaśnić poszczególne linie programu. Od razu mo na zauwa-
      yć szczególną rolę znaku średnika (). Za tym znakiem umieszczać będziemy komen-
     tarz objaśniający działanie programu, który nie jest analizowany przez asembler. Im
     więcej będzie tego komentarza i im bardziej będzie wyczerpujący, tym nasz program
     będzie bardziej zrozumiały dla innych, jak i (po jakimś czasie) dla nas samych. A teraz
     wyjaśnijmy, co oznaczają poszczególne linie programu:

     OQFGN UOCNN
            Procesor Pentium narzuca pewną specyficzną, segmentową organizację
            pamięci operacyjnej. Dyrektywa OQFGN pozwala w prosty sposób zdefiniować
            tzw. model pamięci, czyli sposób zorganizowania segmentów w naszym
            programie. Parametr UOCNN informuje, e w naszym programie będziemy mieli
            do dyspozycji jeden segment z kodem programu oraz jeden segment z danymi.

     
            Ta dyrektywa powoduje, e asembler (program tłumaczący) zezwoli
            na u ywanie w programie zbioru instrukcji procesora 80386 (a więc tak e
            procesora Pentium). W naszym prostym przykładzie moglibyśmy pominąć tę
            dyrektywę, wtedy jednak asembler akceptowałby jedynie instrukcje procesora
            8086. Wpłynęłoby to jedynie na nieco inne przetłumaczenie objaśnionej poni ej
            makroinstrukcji UVCTVWR, jednak bez zmiany jej znaczenia w programie.

     FCVC
            Dyrektywa definiująca początek segmentu z danymi.
Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy…                           19


       VGMUV D[VG    *GNNQ YQTNF   CJFJ
           Linia programu deklarująca naszą jedyną zmienną, czyli tekst, jaki chcemy
           wyświetlić na ekranie. Słowo VGMUV jest zdefiniowaną przez nas nazwą
           zmiennej tekstowej, z kolei słowo D[VG jest dyrektywą asemblera informującą,
            e zmienna tekstowa jest w rzeczywistości zmienną bajtową. Ka da z liter
           wyświetlanego tekstu umieszczonego w cudzysłowie zamieniona zostanie
           w procesie asemblacji na odpowiadający jej bajt w kodzie ASCII. CJ,
           FJ to kody ASCII nowej linii oraz powrotu karetki (przesunięcia kursora
           do początku linii) wyra one liczbą szesnastkową. Poniewa do wyświetlenia
           komunikatu na ekranie wykorzystamy procedurę systemową, łańcuch znaków
           zakończyć musimy kodem ASCII znaku dolara, co zapisaliśmy:          . Brak
           znaku dolara spowodowałby, e wyświetlane byłyby kolejne bajty z pamięci
           operacyjnej zawierające przypadkowe wartości.

       UVCEM J
           Dyrektywa kończy segment danych i deklaruje segment stosu o wielkości
           256 bajtów (czyli 100 szesnastkowo).

       EQFG
           Dyrektywa definiująca kolejny segment, tym razem z kodem programu.

       UVCTVWR
           Pierwsze instrukcje programu powinny zainicjować odpowiednimi
           wartościami rejestry, które odpowiadają za rozmieszczenie segmentów
           w pamięci operacyjnej. Program musi mieć informację, jaki jest adres
           początku segmentu danych i segmentu stosu (adres początku segmentu
           programu zostanie ustawiony przez system operacyjny w czasie ładowania
           programu do pamięci). Makroinstrukcja predefiniowana UVCTVWR zostanie
           w czasie asemblacji zamieniona na ciąg instrukcji procesora wpisujących do
           rejestrów segmentowych odpowiednie wartości. Będzie ona równocześnie
           informacją, gdzie zaczyna się program.

       Teraz nastąpi główna część programu. Instrukcje OQX, będące jednymi z najczęściej
       u ywanych w asemblerze, powodują skopiowanie prawego argumentu w miejsce lewe-
       go. Będzie to przygotowanie parametrów wywołania podprogramu systemowego, który
       wywołamy rozkazem KPV.

       OQX FZ QHHUGV VGMUV
           Rozkaz załaduje do rejestru procesora DX adres początku zmiennej tekstowej
           o nazwie VGMUV w pamięci operacyjnej. Będzie to adres 16-bitowy (taką
           wielkość ma rejestr DX) liczony względem początku segmentu danych,
           nazywany przez niektórych odległością w bajtach od początku segmentu.
           Adres ten będziemy nazywać krótko angielskim terminem offset. 1HHUGV
           to tak e nazwa operatora, który u yty w omawianej instrukcji powoduje
           wydzielenie z nazwy VGMUV tej części adresu.
20                                                                Praktyczny kurs asemblera


        OQX CJ J
              Wszystkie udostępnione programom u ytkowym funkcje systemu
              operacyjnego MS DOS wywołuje się w identyczny sposób, dlatego ich
              rozró nienie następuje przez podanie jej numeru w rejestrze AH procesora.
              Procedura wyprowadzająca na ekran monitora tekst, którego offset
              umieszczony jest w rejestrze DX, ma numer 9.

        KPV J
              Instrukcja procesora KPV powoduje wywołanie specyficznego podprogramu,
              tzw. podprogramu obsługi przerwania (ang. interrupt). System operacyjny
              MS DOS standardowo wykorzystuje rozkaz KPV J do wywoływania
              udostępnionych programom u ytkowym funkcji (procedur) systemowych,
              rozró nianych zawartością rejestru AH.

        GZKV
              Makroinstrukcja predefiniowana GZKV zostanie w procesie asemblacji
              zamieniona na następujący ciąg instrukcji procesora, który powoduje
              zakończenie programu i oddanie sterowania systemowi operacyjnemu:
                 OQX CJ EJ
                 KPV J

              Jak widać, jest to znane nam ju wywołanie procedury systemowej,
              tym razem o numerze 4c szesnastkowo. W taki sposób kończyć będziemy
              ka dy program asemblerowy uruchamiany pod systemem MS DOS.

        GPF
              Dyrektywa kończąca program źródłowy, wstrzymująca proces asemblacji.
              Je eli w zbiorze z programem źródłowym będą jeszcze jakieś linie programu,
              to nie będą one analizowane.

        Skoro wiemy ju , jak wyglądać powinien nasz pierwszy program w asemblerze i co
        oznaczają poszczególne linie programu źródłowego, to nale ałoby teraz pokazać, co
        trzeba zrobić, aby program ten mo na było uruchomić. W celu maksymalnego uprosz-
        czenia przyjmijmy, e w wydzielonej kartotece mamy wszystkie niezbędne w tym przy-
        padku programy (zbiory) tak, jak pokazuje to rysunek 2.1.

Rysunek 2.1.
Zawartość kartoteki
przed asemblacją
Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy…                               21


         Zbiór o nazwie pierwszy.asm zawiera program źródłowy „Hello, world!”. Wyjaśnijmy
         rolę pozostałych zbiorów:
              ML.EXE — program asemblera, pozwalający równocześnie wywołać program
              konsolidujący LINK.EXE,
              ML.ERR — zbiór tekstowy z komunikatami asemblera,
              LINK.EXE — program konsolidujący (linker), mo e być wywoływany
              automatycznie przez ML.EXE.

         Przykładowa sesja wywołania z linii komendy MS DOS programu asemblera i linkera
         zilustrowana jest na rysunku 2.2. Wyświetlenie zawartości kartoteki pokazuje, e w wyni-
         ku asemblacji oraz konsolidacji utworzone zostały zbiory pierwszy.obj oraz pierwszy.exe.

Rysunek 2.2.
Wywołanie
asemblera ML.EXE




         Na razie nie będziemy zajmować się rozwikłaniem wszystkich komunikatów, które
         wyświetliły się na ekranie. Wa ne jest, e nie pojawił się aden komunikat o błędzie
         asemblacji, mo emy więc zaryzykować uruchomienie naszego pierwszego programu.
         Uzyskany efekt ilustruje rysunek 2.3.

Rysunek 2.3.
Efekt działania
programu
pierwszy.exe
22                                                                    Praktyczny kurs asemblera


             W linii programu źródłowego może wystąpić:
                 instrukcja procesora zwana także rozkazem procesora (np. MOV, INT),
                 dyrektywa sterująca pracą asemblera w procesie asemblacji (np. .MODEL,
                 .DATA, .STACK, .CODE, END, .386), lub
                 makroinstrukcja predefiniowana (np. .STARTUP, .EXIT) lub indywidualnie
                 zdefiniowana przez nas (o czym będzie w następnych rozdziałach) i zamieniona
                 przez asembler na ciąg instrukcji procesora i dyrektyw asemblera.
             Funkcje systemu MS DOS udostępnione programom użytkowym wywołuje się roz-
             kazem INT 21h po wcześniejszym załadowaniu do rejestru AH numeru funkcji.




2.2. „Hello, world!”
pod systemem operacyjnym Windows
          Okienkowa wersja naszego pierwszego (nazwiemy go dla rozró nienia „drugim”) pro-
          gramu będzie niestety zupełnie inna. Wynika to z oczywistego faktu, e tak naprawdę
          to cały program sprowadza się do wywołania podprogramu bibliotecznego i nie ma
          w nim praktycznie adnych obliczeń. Skoro system operacyjny jest zupełnie inny, inna
          jest biblioteka dostępnych funkcji, inna wreszcie jest tak e organizacja pamięci opera-
          cyjnej w przypadku pracy procesora w trybie adresacji wirtualnej z ochroną, ponadto
          system jest wielozadaniowy — zatem nasz program będzie musiał dostosować się do
          wszelkich wynikających z tego wymogów. Hasło „Hello, world!” wyświetlimy w od-
          rębnym oknie (a ściślej w małym okienku z komunikatem) wykorzystując do tego funk-
          cję API (ang. The Microsoft® Win32® Application Programming Interface). API sta-
          nowi zbiór dynamicznych bibliotek (DLL), z którego korzystają wszystkie procesy
          uruchamiane w systemie Windows. Więcej na ten temat — w jednym z dalszych roz-
          działów ksią ki, teraz wystarczy wiedzieć, e aby skorzystać ze wspomnianych funk-
          cji API, nale y do programu źródłowego dołączyć odpowiednie biblioteki oraz zbiory
          z deklaracjami tzw. prototypów. Program mógłby1 wyglądać następująco:
              /ÎL FTWIK RTQITCO Y CUGODNGTG C RKGTYU[ RQF U[UVGOGO QRGTCE[LP[O 9KPFQYU
             
             OQFGN HNCV UVFECNN               R CUMK OQFGN RCOKúEK
             QRVKQP ECUGOCR PQPG               OC G K FW G NKVGT[ TQTÎ PKCPG

              FQ æEGPKG DKQTÎY  FGMNCTCELCOK RTQVQV[RÎY K U[ODQNK GYPúVTP[EJ
             KPENWFG YKPFQYUKPE
             KPENWFG WUGTKPE
             KPENWFG MGTPGNKPE

              FQ æEGPKG DKQTÎY DKDNKQVGEP[EJ
             KPENWFGNKD WUGTNKD
             KPENWFGNKD MGTPGNNKD

1
    Podkreślam słowo „mógłby wyglądać”, bowiem podobnie jak w innych językach programowania
    ka dy problem mo na rozwiązać na wiele sposobów.
Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy…                               23


          FCVC
             6[VWNAQMPC      D[VG /ÎL FTWIK RTQITCO 
             6GMUVAYAQMPKG   D[VG    *GNNQ YQTNF      

          EQFG
          UVCTV
             KPXQMG /GUUCIG$QZ 07.. #4 6GMUVAYAQMPKG #4 6[VWNAQMPC /$A1-
             KPXQMG 'ZKV2TQEGUU 07..
          GPF UVCTV

       Podobnie jak poprzednio, wyjaśnimy teraz znaczenie poszczególnych linii programu
       źródłowego, który — co widać na pierwszy rzut oka — kojarzy się raczej z programem
       w języku wy szego poziomu ni językiem asemblera, bowiem nie występują w nim
       wprost adne instrukcje procesora. Wspominałem ju , e wynika to z braku w programie
       jakichkolwiek obliczeń. Program sprowadza się do wywołania dwóch podprogramów
       bibliotecznych:
              MessageBox — wyświetlenia komunikatu, oraz
              ExitProcess — zakończenia programu.

       
              Podobnie jak w programie DOS-owym, dyrektywa ta powoduje mo liwość
              u ywania w programie zbioru instrukcji procesora 80386. Nie jest przypadkiem,
               e tym razem dyrektywa ta jest pierwszą w programie. Ze względu na inny
              model pamięci, zadeklarowany w następnej linii programu źródłowego, taką
              kolejność dyrektyw będziemy zawsze stosować na początku programu, który
              ma być uruchomiony pod systemem Windows.

       OQFGN HNCV UVFECNN
              Procesor Pentium z systemem operacyjnym Windows pracuje z tzw. płaskim
              modelem pamięci (ang. flat). Jest to szczególny przypadek modelu
              segmentowego, dostępny w trybie adresacji wirtualnej z ochroną. Z kolei drugi
              parametr UVFECNN określa, w jakiej kolejności parametry wywołania procedur
              bibliotecznych w naszym programie przekazywane będą na stos i w jaki sposób
              stos będzie opró niany z tych parametrów. Nie wnikając na tym etapie rozwa ań
              w większe szczegóły, zapamiętamy, e taka linia programu będzie się musiała
              zawsze znaleźć na drugim miejscu po dyrektywie wyboru procesora.

       QRVKQP ECUGOCRPQPG
              Dyrektywa powoduje, e w nazwach symbolicznych rozró niane będą małe
              i du e litery. Dyrektywa jest niezbędna, aby mogło się odbyć prawidłowe
              dołączenie procedur bibliotecznych API.

       KPENWFG
              Następujące po sobie trzy linie programu z dyrektywą KPENWFG powodują
              dołączenie do naszego programu źródłowego zbiorów o nazwach odpowiednio:
              windows.inc, user32.inc oraz kernel32.inc. W zbiorach tych znajdują się
              (w postaci kodów źródłowych) definicje tzw. prototypów procedur
24                                                                     Praktyczny kurs asemblera


                bibliotecznych i nazw symbolicznych2, które mo emy dołączać do programu
                u ytkowego. Brak tych prototypów i definicji spowodowałby, e u yte
                w programie nazwy wywoływanych procedur i niektórych stałych uznane
                byłyby jako niezdefiniowane i w konsekwencji program wynikowy nie
                mógłby zostać wygenerowany.

           KPENWFGNKD
                Dwie linie programu z dyrektywą KPENWFGNKD informują program konsolidujący
                LINK.EXE, jakie moduły biblioteczne powinien dołączyć w procesie
                konsolidacji, czyli generowaniu zbioru drugi.exe.

           FCVC
                Dyrektywa definiująca początek segmentu danych, w związku z płaskim
                modelem pamięci nazywanym w tym przypadku przez niektórych sekcją
                z danymi. Podobnie jak w przypadku programu uruchamianego pod systemem
                operacyjnym MS DOS, następne linie programu to deklaracje zmiennych
                tekstowych.

           6[VWNAQMPC       D[VG   /ÎL FTWIK RTQITCO 
           6GMUVAYAQMPKG    D[VG      *GNNQ YQTNF         
                Dwie dyrektywy D[VG definiują dwie zmienne tekstowe zainicjowanymi
                napisami, z których jeden poka e się na ramce okienka, drugi zaś — jako
                właściwy komunikat — wewnątrz. Podprogram biblioteczny, który
                wykorzystamy do wyświetlenia napisu, wymaga, aby tekst kończył się bajtem
                o wartości zero (podobnie jak w przypadku funkcji systemu MS DOS
                znakiem dolara).

           EQFG
                Początek segmentu (sekcji) z kodem programu.

           UVCTV
                Etykieta (czyli adres symboliczny) informująca, e w tym miejscu powinno
                rozpocząć się wykonywanie programu. Etykieta ta będzie musiała dodatkowo
                wystąpić jako argument dyrektywy GPF kończącej program źródłowy.

           KPXQMG /GUUCIG$QZ07..#4 6GMUVAYAQMPKG#4 6[VWNAQMPC/$A1-
                Dyrektywa KPXQMG pozwala wywołać procedurę /GUUCIG$QZ — przesyła ona
                na stos parametry wywołania i wyświetla komunikat. Parametrami wywołania
                są w tym przypadku kolejno:
                    07..  „uchwyt” do okna3, w naszym przypadku niepotrzebny i równy zero,

                    #4 6GMUVAYAQMPKG  adres początku komunikatu, jaki ma być wyświetlony,

2
    U yliśmy dwóch takich niezdefiniowanych bezpośrednio w naszym programie nazw: 07.. i /$A1-.
3
    Pojęcie „uchwyt” związane jest z programowaniem pod systemem operacyjnym Windows i jest
    niezale ne od języka programowania.
Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy…                                    25


                   #4 6[VWNAQMPC  adres początku napisu, jaki ma być na ramce okienka,

                   /$A1-  parametr określający, jakie standardowe przyciski mają być
                   wyświetlone (w naszym przypadku jedynie przycisk „OK”).
                Dyrektywa KPXQMG nale y do grupy dyrektyw asemblera nawiązujących
                do konstrukcji typowych dla języków wysokiego poziomu4. Operator #4
                w polu parametrów wywołania procedury ma w tym przypadku identyczne
                znaczenie, jak poznany wcześniej operator QHHUGV w polu argumentu instrukcji
                procesora. W czasie procesu asemblacji dyrektywa zostanie zastąpiona
                następującą prostą sekwencją instrukcji procesora:
                   RWUJ   /$A1-
                   RWUJ   QHHUGV 6[VWNAQMPC
                   RWUJ   QHHUGV 6GMUVAYAQMPKG
                   RWUJ   07..
                   ECNN   /GUUCIG$QZ

                Je eli w programie źródłowym zamiast dyrektywy KPXQMG napiszemy powy sze
                instrukcje, końcowy efekt działania programu będzie oczywiście dokładnie
                taki sam. Instrukcje procesora RWUJ przesyłają argumenty instrukcji na szczyt
                stosu, skąd pobierze go procedura /GUUCIG$QZ. Procedura wywołana zostanie
                typową instrukcją procesora wywołania podprogramu ECNN.

           KPXQMG 'ZKV2TQEGUU07..
                Wywołanie procedury kończącej program. W czasie asemblacji dyrektywa
                zostanie zastąpiona następującą sekwencją instrukcji:
                   RWUJ 07..
                   ECNN 'ZKV2TQEGUU

           Skoro wiemy ju , jak powinien wyglądać najprostszy program pracujący pod kontrolą
           systemu Windows, to spróbujmy go uruchomić. Podobnie jak w przypadku poprzednie-
           go programu uruchomionego pod systemem MS DOS, umieścimy dla prostoty wszystkie
           niezbędne zbiory w jednej kartotece, tak jak to pokazuje rysunek 2.4.

Rysunek 2.4.
Zawartość kartoteki
przed asemblacją




4
    Czasem nieco tylko złośliwie mówię, e tego typu dyrektywy oddalają język asemblera od prawdziwego
    asemblera…
26                                                                Praktyczny kurs asemblera


        Oprócz zbioru z programem źródłowym drugi.asm, programami asemblera ML.EXE,
        ML.ERR oraz programu konsolidatora LINK.EXE, w kartotece znajdujemy niezbędne
        dla prawidłowej asemblacji zbiory biblioteczne typu .LIB oraz dołączane do programu
        źródłowego zbiory typu .INC zawierające wspomniane definicje prototypów i symboli.
        Aby prawidłowo przeprowadzić proces asemblacji i konsolidacji, musimy wywołać
        program asemblera ML.EXE z przełącznikami, które pozwolą wygenerować zbiory
        drugi.obj oraz drugi.exe w postaci akceptowanej przez program LINK.EXE oraz sys-
        tem operacyjny Windows. Ilustruje to rysunek 2.5.

Rysunek 2.5.
Wywołanie
asemblera
z przełącznikami
pozwalającymi
wygenerować
program pod system
operacyjny Windows



        Uwa ny Czytelnik zauwa ył zapewne, e u yliśmy tutaj dokładnie tego samego pro-
        gramu asemblera, co w poprzednim przykładzie dla systemu MS DOS. Musieliśmy
        jednak zastosować inny program konsolidatora LINK.EXE, który uwzględnia fakt innej
        ni w poprzednim przypadku organizacji pamięci operacyjnej. Poszczególne przełącz-
        niki w naszym przykładzie mają następujące znaczenie:
             /coff  Zbiór drugi.obj wygenerowany zostanie w formacie Common Object
             File Format
             /link  Kolejne przełączniki dotyczyć będą programu konsolidatora
             /subsystem:windows  Program wykonalny będzie uruchamiany pod
             systemem operacyjnym Windows

        Po sprawdzeniu, e zbiory drugi.obj i drugi.exe zostały rzeczywiście utworzone, mo emy
        uruchomić nasz program. Rysunek 2.6 pokazuje uzyskany rezultat. Program mo emy
        uruchomić zarówno z linii komendy systemu MS DOS, jak i klikając myszą odpowied-
        nią ikonę w okienku mened era plików. Warto (tak przy okazji) zwrócić uwagę na
        wielkość zbioru drugi.exe i porównać go z uruchomionym wcześniej pierwszy.exe.

Rysunek 2.6.
Efekt wykonania
programu drugi.exe
Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy…                               27


          Program asemblerowy, który ma być uruchomiony pod systemem operacyjnym Win-
          dows, może korzystać z programów bibliotecznych API, podobnie jak programy pisane
          w innych językach programowania. Program asemblera generujący zbiór typu .obj
          nie różni się w tym przypadku od asemblera używanego w przypadku programu uru-
          chamianego pod systemem MS DOS, choć inne nieco jest jego wywołanie. Inny
          natomiast musi być zastosowany program konsolidatora, który uwzględnia specy-
          fikę stosowanego po systemem operacyjnym Windows modelu pamięci.


       Skoro uruchomiliśmy ju dwa pierwsze proste programy, to przed próbą zaprojektowa-
       nia nieco bardziej zło onych programów musimy wrócić do podstaw i w minimalnej
       dawce — niezbędnej programiście — omówić architekturę procesora, jego listę instruk-
       cji oraz tryby adresowania argumentów.

Contenu connexe

Tendances

ActionScript. Receptury
ActionScript. RecepturyActionScript. Receptury
ActionScript. Receptury
Wydawnictwo Helion
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznik
Wydawnictwo Helion
 
Montaż komputera PC. Ilustrowany przewodnik
Montaż komputera PC. Ilustrowany przewodnikMontaż komputera PC. Ilustrowany przewodnik
Montaż komputera PC. Ilustrowany przewodnik
Wydawnictwo Helion
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
Wydawnictwo Helion
 
Flash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatceFlash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatce
Wydawnictwo Helion
 
Adobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startAdobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki start
Wydawnictwo Helion
 
The Shellcoders Handbook. Edycja polska
The Shellcoders Handbook. Edycja polskaThe Shellcoders Handbook. Edycja polska
The Shellcoders Handbook. Edycja polska
Wydawnictwo Helion
 
ABC sam składam komputer
ABC sam składam komputerABC sam składam komputer
ABC sam składam komputer
Wydawnictwo Helion
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
Wydawnictwo Helion
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
Wydawnictwo Helion
 
Po prostu Mac OS X 10.5 Leopard PL
Po prostu Mac OS X 10.5 Leopard PLPo prostu Mac OS X 10.5 Leopard PL
Po prostu Mac OS X 10.5 Leopard PL
Wydawnictwo Helion
 
Mikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowaniaMikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowania
WKL49
 
Mikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowaniaMikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowania
WKL49
 
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIPHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie III
Wydawnictwo Helion
 

Tendances (20)

ActionScript. Receptury
ActionScript. RecepturyActionScript. Receptury
ActionScript. Receptury
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznik
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 
Montaż komputera PC. Ilustrowany przewodnik
Montaż komputera PC. Ilustrowany przewodnikMontaż komputera PC. Ilustrowany przewodnik
Montaż komputera PC. Ilustrowany przewodnik
 
Uczta programistów
Uczta programistówUczta programistów
Uczta programistów
 
Flash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatceFlash 8. Techniki zaawansowane. Klatka po klatce
Flash 8. Techniki zaawansowane. Klatka po klatce
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
 
Adobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startAdobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki start
 
The Shellcoders Handbook. Edycja polska
The Shellcoders Handbook. Edycja polskaThe Shellcoders Handbook. Edycja polska
The Shellcoders Handbook. Edycja polska
 
ABC sam składam komputer
ABC sam składam komputerABC sam składam komputer
ABC sam składam komputer
 
Photoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyPhotoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowy
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 
Adobe Premiere Pro. Ćwiczenia
Adobe Premiere Pro. ĆwiczeniaAdobe Premiere Pro. Ćwiczenia
Adobe Premiere Pro. Ćwiczenia
 
Programowanie w języku C. FAQ
Programowanie w języku C. FAQProgramowanie w języku C. FAQ
Programowanie w języku C. FAQ
 
Po prostu Mac OS X 10.5 Leopard PL
Po prostu Mac OS X 10.5 Leopard PLPo prostu Mac OS X 10.5 Leopard PL
Po prostu Mac OS X 10.5 Leopard PL
 
Mikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowaniaMikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowania
 
Mikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowaniaMikrokontrolery avr język c podstawy programowania
Mikrokontrolery avr język c podstawy programowania
 
Anatomia PC. Kompendium
Anatomia PC. KompendiumAnatomia PC. Kompendium
Anatomia PC. Kompendium
 
PHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie IIIPHP. Programowanie. Wydanie III
PHP. Programowanie. Wydanie III
 

En vedette

Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...
Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...
Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...
Dagmara Lec
 
Problemy z uwierzytelnianiem
Problemy z uwierzytelnianiemProblemy z uwierzytelnianiem
Problemy z uwierzytelnianiem
Marcin Spychala
 
Media 06.06.2012
Media 06.06.2012Media 06.06.2012
Media 06.06.2012
infokosz
 
Formy prawno organizacyjne
Formy prawno organizacyjneFormy prawno organizacyjne
Formy prawno organizacyjne
iwsz1
 
Ppt 4. rozliczanie czasu pracy - nadgodziny i czas wolny
Ppt 4.   rozliczanie czasu pracy - nadgodziny i czas wolnyPpt 4.   rozliczanie czasu pracy - nadgodziny i czas wolny
Ppt 4. rozliczanie czasu pracy - nadgodziny i czas wolny
UCMS Group Poland
 
ANVIE Siekierski 04 11 2014_slides2
ANVIE Siekierski 04 11 2014_slides2ANVIE Siekierski 04 11 2014_slides2
ANVIE Siekierski 04 11 2014_slides2
keno_slideshare
 
Pola figur płaskich prezentacja
Pola figur płaskich   prezentacjaPola figur płaskich   prezentacja
Pola figur płaskich prezentacja
Agata Winiarska
 
HRM_Nie być jak Steve Jobs
HRM_Nie być jak Steve JobsHRM_Nie być jak Steve Jobs
HRM_Nie być jak Steve Jobs
Maja Meissner
 

En vedette (20)

Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...
Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...
Czy społeczeństwo staje się coraz bardziej rozwarstwione czy też mamy coraz w...
 
Problemy z uwierzytelnianiem
Problemy z uwierzytelnianiemProblemy z uwierzytelnianiem
Problemy z uwierzytelnianiem
 
Z1.05
Z1.05Z1.05
Z1.05
 
Media 06.06.2012
Media 06.06.2012Media 06.06.2012
Media 06.06.2012
 
STRATEGIA WALKI Z TERRORYZMEM W OPINII PROKURATORÓW I SĘDZIÓW
STRATEGIA WALKI Z TERRORYZMEMW OPINII PROKURATORÓW I SĘDZIÓWSTRATEGIA WALKI Z TERRORYZMEMW OPINII PROKURATORÓW I SĘDZIÓW
STRATEGIA WALKI Z TERRORYZMEM W OPINII PROKURATORÓW I SĘDZIÓW
 
Formy prawno organizacyjne
Formy prawno organizacyjneFormy prawno organizacyjne
Formy prawno organizacyjne
 
DESPRE SPAȚIUL LINGVISTIC PELASGO-VALAH
DESPRE SPAȚIUL LINGVISTIC PELASGO-VALAH DESPRE SPAȚIUL LINGVISTIC PELASGO-VALAH
DESPRE SPAȚIUL LINGVISTIC PELASGO-VALAH
 
Szlaki kulturowe - teoria
Szlaki kulturowe - teoriaSzlaki kulturowe - teoria
Szlaki kulturowe - teoria
 
Ppt 4. rozliczanie czasu pracy - nadgodziny i czas wolny
Ppt 4.   rozliczanie czasu pracy - nadgodziny i czas wolnyPpt 4.   rozliczanie czasu pracy - nadgodziny i czas wolny
Ppt 4. rozliczanie czasu pracy - nadgodziny i czas wolny
 
Technik.teleinformatyk 312[02] z2.03_n
Technik.teleinformatyk 312[02] z2.03_nTechnik.teleinformatyk 312[02] z2.03_n
Technik.teleinformatyk 312[02] z2.03_n
 
Sztuka kształtowania przestrzeni w bibliotece / Dariusz Śmiechowski
Sztuka kształtowania przestrzeni w bibliotece / Dariusz ŚmiechowskiSztuka kształtowania przestrzeni w bibliotece / Dariusz Śmiechowski
Sztuka kształtowania przestrzeni w bibliotece / Dariusz Śmiechowski
 
System oceniania,biologia mk
System oceniania,biologia mkSystem oceniania,biologia mk
System oceniania,biologia mk
 
Ruch rowerowy w Gdańsku 2014
Ruch rowerowy w Gdańsku 2014Ruch rowerowy w Gdańsku 2014
Ruch rowerowy w Gdańsku 2014
 
ANVIE Siekierski 04 11 2014_slides2
ANVIE Siekierski 04 11 2014_slides2ANVIE Siekierski 04 11 2014_slides2
ANVIE Siekierski 04 11 2014_slides2
 
Pola figur płaskich prezentacja
Pola figur płaskich   prezentacjaPola figur płaskich   prezentacja
Pola figur płaskich prezentacja
 
Lotopałanka
LotopałankaLotopałanka
Lotopałanka
 
Instructions SCHMIDT & BENDER Zenith | Optics Trade
Instructions SCHMIDT & BENDER Zenith | Optics TradeInstructions SCHMIDT & BENDER Zenith | Optics Trade
Instructions SCHMIDT & BENDER Zenith | Optics Trade
 
HRM_Nie być jak Steve Jobs
HRM_Nie być jak Steve JobsHRM_Nie być jak Steve Jobs
HRM_Nie być jak Steve Jobs
 
Logiki 2015-final-koy
Logiki 2015-final-koyLogiki 2015-final-koy
Logiki 2015-final-koy
 
Sektor3.0 Bariery: Jak sobie radzić z brakiem kompetencji?
Sektor3.0 Bariery: Jak sobie radzić z brakiem kompetencji?Sektor3.0 Bariery: Jak sobie radzić z brakiem kompetencji?
Sektor3.0 Bariery: Jak sobie radzić z brakiem kompetencji?
 

Similaire à Praktyczny kurs asemblera

Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Wydawnictwo Helion
 
Aurox. Ćwiczenia
Aurox. ĆwiczeniaAurox. Ćwiczenia
Aurox. Ćwiczenia
Wydawnictwo Helion
 
Skrypty powłoki. Od podstaw
Skrypty powłoki. Od podstawSkrypty powłoki. Od podstaw
Skrypty powłoki. Od podstaw
Wydawnictwo Helion
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
Wydawnictwo Helion
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
Wydawnictwo Helion
 
Mandrake Linux
Mandrake LinuxMandrake Linux
Mandrake Linux
Wydawnictwo Helion
 
Perl. Zaawansowane programowanie
Perl. Zaawansowane programowaniePerl. Zaawansowane programowanie
Perl. Zaawansowane programowanie
Wydawnictwo Helion
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Wydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
Wydawnictwo Helion
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
Wydawnictwo Helion
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
Wydawnictwo Helion
 
Strukturalna organizacja systemów komputerowych. Wydanie V
Strukturalna organizacja systemów komputerowych. Wydanie VStrukturalna organizacja systemów komputerowych. Wydanie V
Strukturalna organizacja systemów komputerowych. Wydanie V
Wydawnictwo Helion
 
100 sposobów na BSD
100 sposobów na BSD100 sposobów na BSD
100 sposobów na BSD
Wydawnictwo Helion
 
Projektowanie i analiza algorytmów
Projektowanie i analiza algorytmówProjektowanie i analiza algorytmów
Projektowanie i analiza algorytmów
Wydawnictwo Helion
 
Algorytmy w Perlu
Algorytmy w PerluAlgorytmy w Perlu
Algorytmy w Perlu
Wydawnictwo Helion
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
Wydawnictwo Helion
 
Hack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaHack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polska
Wydawnictwo Helion
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
Wydawnictwo Helion
 

Similaire à Praktyczny kurs asemblera (20)

Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
Aurox. Ćwiczenia
Aurox. ĆwiczeniaAurox. Ćwiczenia
Aurox. Ćwiczenia
 
Skrypty powłoki. Od podstaw
Skrypty powłoki. Od podstawSkrypty powłoki. Od podstaw
Skrypty powłoki. Od podstaw
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
Java. Rozmówki
Java. RozmówkiJava. Rozmówki
Java. Rozmówki
 
Mandrake Linux
Mandrake LinuxMandrake Linux
Mandrake Linux
 
Perl. Zaawansowane programowanie
Perl. Zaawansowane programowaniePerl. Zaawansowane programowanie
Perl. Zaawansowane programowanie
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
 
Mandrake Linux. Ćwiczenia
Mandrake Linux. ĆwiczeniaMandrake Linux. Ćwiczenia
Mandrake Linux. Ćwiczenia
 
Strukturalna organizacja systemów komputerowych. Wydanie V
Strukturalna organizacja systemów komputerowych. Wydanie VStrukturalna organizacja systemów komputerowych. Wydanie V
Strukturalna organizacja systemów komputerowych. Wydanie V
 
100 sposobów na BSD
100 sposobów na BSD100 sposobów na BSD
100 sposobów na BSD
 
Projektowanie i analiza algorytmów
Projektowanie i analiza algorytmówProjektowanie i analiza algorytmów
Projektowanie i analiza algorytmów
 
Algorytmy w Perlu
Algorytmy w PerluAlgorytmy w Perlu
Algorytmy w Perlu
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
Hack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polskaHack Proofing Linux. Edycja polska
Hack Proofing Linux. Edycja polska
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 

Plus de Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
Wydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
Wydawnictwo Helion
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
Wydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Wydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
Wydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Wydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Wydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
Wydawnictwo Helion
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
Wydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
Wydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
Wydawnictwo Helion
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
Wydawnictwo Helion
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
Wydawnictwo Helion
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
Wydawnictwo Helion
 

Plus de Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

Praktyczny kurs asemblera

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI Praktyczny kurs asemblera KATALOG KSI¥¯EK Autor: Eugeniusz Wróbel KATALOG ONLINE ISBN: 83-7361-433-8 Format: B5, stron: 384 ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Wejd w wiat programowania w jêzyku asemblera • Dowiedz siê, kiedy u¿ycie asemblera jest niezbêdne • Poznaj zasady programowania w asemblerze CENNIK I INFORMACJE • Napisz szybkie i wydajne programy dla DOS-a i Windows • Zdob¹d wiedzê o zasadach dzia³ania procesora i pamiêci ZAMÓW INFORMACJE Uwa¿asz, ¿e mo¿liwo ci jêzyków programowania wysokiego poziomu nie pozwalaj¹ O NOWO CIACH na napisanie programu, którego potrzebujesz? Chcesz stworzyæ sterownik, program rezydentny, demo lub... wirusa? Interesuje Ciê, co dzieje siê w komputerze podczas ZAMÓW CENNIK wykonywania programu? Wykorzystaj potencja³ asemblera! CZYTELNIA Programowanie w jêzyku niskiego poziomu daje niemal nieograniczon¹ kontrolê nad sprzêtem i dzia³aniem aplikacji. Programy napisane w jêzyku asemblera dzia³aj¹ FRAGMENTY KSI¥¯EK ONLINE szybko, s¹ niewielkie i zajmuj¹ ma³o pamiêci. S¹ bardzo wydajne i otwieraj¹ dostêp do takich obszarów komputera, do których dostêp z poziomu C++ czy Visual Basica jest niemo¿liwy. Ksi¹¿ka „Praktyczny kurs asemblera” wprowadzi Ciê w wiat programowania w tym jêzyku. Dowiesz siê, jak dzia³a procesor, w jaki sposób komunikuje siê z pamiêci¹ i pozosta³ymi elementami komputera. Poznasz typy rozkazów procesora, tryby adresowania i zasady tworzenia programów w asemblerze. Lepiej poznasz swój komputer i dowiesz siê, w jaki sposób zapamiêtuje i przetwarza dane. Komputer przestanie byæ dla Ciebie „czarn¹ skrzynk¹” wykonuj¹c¹ w czarodziejski sposób Twoje polecenia. • Podstawowe wiadomo ci o architekturze procesorów Intel Wydawnictwo Helion • Organizacja pamiêci i tryby adresowania ul. Chopina 6 • Omówienie listy rozkazów procesora 44-100 Gliwice • Narzêdzia do tworzenia programów w jêzyku asemblera tel. (32)230-98-63 • Struktura programu w asemblerze e-mail: helion@helion.pl • Definiowanie zmiennych • Tworzenie podprogramów i makrorozkazów • Wykorzystanie funkcji BIOS-a oraz MS-DOS • Programy w asemblerze uruchamiane w systemie Windows • Optymalizacja kodu • Tworzenie modu³ów dla innych jêzyków programowania
  • 2. Spis treści Rozdział 1. Wprowadzenie ................................................................................... 7 1.1. Co to jest asembler? .....................................................................................................7 1.2. Dlaczego programować w języku asemblera? ...........................................................10 1.3. Dlaczego warto poznać język asemblera?..................................................................12 1.4. Wymagane umiejętności ............................................................................................12 1.5. Konwencje stosowane w ksią ce ...............................................................................13 Rozdział 2. Zaczynamy typowo — wiedząc niewiele, uruchamiamy nasz pierwszy program ................................................ 17 2.1. „Hello, world!” pod systemem operacyjnym MS DOS .............................................18 2.2. „Hello, world!” pod systemem operacyjnym Windows.............................................22 Rozdział 3. Wracamy do podstaw — poznajemy minimum wiedzy na temat architektury procesorów 80x86 ......................................... 29 3.1. Rejestry procesora 8086 .............................................................................................30 3.2. Zwiększamy rozmiar rejestrów — od procesora 80386 do Pentium 4 ......................33 3.3. Zwiększamy liczbę rejestrów — od procesora 80486 do Pentium 4 .........................35 3.4. Segmentowa organizacja pamięci ..............................................................................39 3.5. Adresowanie argumentów..........................................................................................43 3.6. Adresowanie argumentów w pamięci operacyjnej.....................................................44 Rozdział 4. Poznajemy narzędzia ........................................................................ 47 4.1. Asembler MASM .......................................................................................................49 4.2. Program konsolidujący — linker ...............................................................................52 4.3. Programy uruchomieniowe ........................................................................................54 4.4. Wszystkie potrzebne narzędzia razem, czyli środowiska zintegrowane....................62 Rozdział 5. Nadmiar możliwości, z którym trudno sobie poradzić — czyli lista instrukcji procesora...................................................... 67 5.1. Instrukcje ogólne — jednostki stałoprzecinkowej .....................................................70 5.2. Koprocesor arytmetyczny — instrukcje jednostki zmiennoprzecinkowej.................73 5.3. Instrukcje rozszerzenia MMX....................................................................................75 5.4. Instrukcje rozszerzenia SSE .......................................................................................78 5.5. Instrukcje rozszerzenia SSE2 .....................................................................................82 5.6. Instrukcje rozszerzenia SSE3 .....................................................................................85 5.7. Instrukcje systemowe .................................................................................................85
  • 3. 4 Praktyczny kurs asemblera Rozdział 6. Wracamy do ogólnej struktury programu asemblerowego .................. 87 6.1. Uproszczone dyrektywy definiujące segmenty..........................................................87 6.2. Pełne dyrektywy definiowania segmentów................................................................92 6.3. Spróbujmy drobną część tej wiedzy zastosować w prostym programie, a przy okazji poznajmy nowe pomocnicze dyrektywy...................................................96 Rozdział 7. Ważna rzecz w każdym języku programowania — definiowanie i stosowanie zmiennych ......................................... 105 7.1. Zmienne całkowite ...................................................................................................106 7.2. Zmienne zmiennoprzecinkowe ................................................................................109 7.3. Definiowanie tablic i łańcuchów..............................................................................110 7.4. Struktury zmiennych ................................................................................................114 7.5. Dyrektywa definiująca pola bitowe..........................................................................117 Rozdział 8. Podprogramy ................................................................................. 119 8.1. Stos ...........................................................................................................................119 8.2. Wywołanie i organizacja prostych podprogramów..................................................122 8.3. Poznajemy dyrektywę PROC-ENDP .......................................................................123 8.4. Parametry wywołania podprogramu ........................................................................128 8.5. Zmienne lokalne.......................................................................................................137 Rozdział 9. Oddalamy się od asemblera w kierunku języków wyższego poziomu, czyli użycie makroinstrukcji oraz dyrektyw asemblacji warunkowej.... 139 9.1. Makroinstrukcja definiowana...................................................................................139 9.2. Dyrektywa LOCAL..................................................................................................144 9.3. Dyrektywy asemblacji warunkowej .........................................................................144 9.4. Makroinstrukcje niedefiniowane..............................................................................148 9.5. Makroinstrukcje tekstowe ........................................................................................149 9.6. Makroinstrukcje operujące na łańcuchach (na tekstach)..........................................150 Rozdział 10. Czy obsługę wszystkich urządzeń komputera musimy wykonać sami? Funkcje systemu MS DOS oraz BIOS .............................................. 153 10.1. Co ma prawo przerwać wykonanie naszego programu?........................................154 10.2. Obsługa klawiatury oraz funkcje grafiki na poziomie BIOS .................................156 10.3. Wywoływanie podprogramów systemu operacyjnego MS DOS...........................163 Rozdział 11. Obalamy mity programując w asemblerze pod systemem operacyjnym Windows............................................. 169 11.1. Systemowe programy biblioteczne ........................................................................170 11.2. Najprawdziwsze pierwsze okno .............................................................................173 11.3. Struktury programowe HLL — to te jest asembler!.............................................178 11.4. Idziemy jeden krok dalej i wykorzystujemy program generatora okien Prostart......180 Rozdział 12. Czy możemy przyśpieszyć działanie naszego programu? Wybrane zagadnienia optymalizacji programu.................................. 189 12.1. Kiedy i co w programie powinniśmy optymalizować?..........................................191 12.2. Optymalizujemy program przygotowany dla procesora Pentium 4.......................193 12.3. Wspieramy proces optymalizacji programem Vtune .............................................200 12.4. Na ile ró nych sposobów mo emy zakodować kopiowanie tablic?........................201 Rozdział 13. Dzielimy program na moduły i łączymy moduły zakodowane w różnych językach programowania ................................................ 209 13.1. Jak realizować połączenia międzymodułowe?.......................................................210 13.2. Mieszamy moduły przygotowane w ró nych językach .........................................214
  • 4. Spis treści 5 Rozdział 14. Przykładowe programy (MS DOS) ................................................... 219 14.1. Identyfikujemy procesor ........................................................................................219 14.2. Wchodzimy w świat grafiki — nieco patriotycznie...............................................225 14.3. Program rezydentny, czyli namiastka wielozadaniowości.....................................228 14.4. Pozorujemy głębię..................................................................................................233 14.5. Wy sza graficzna szkoła jazdy ze zmiennymi zespolonymi .................................236 Rozdział 15. Przykładowe programy (Windows) .................................................. 243 15.1. Zegarek...................................................................................................................243 15.2. Dotknięcie grafiki przez du e „G” .........................................................................248 15.3. Przekształcamy mapę bitową .................................................................................250 Załącznik 1. Interesujące strony w internecie .................................................... 271 Załącznik 2. Lista dyrektyw i pseudoinstrukcji języka MASM .............................. 275 Z2.1. Dyrektywy określające listę instrukcji procesora ..................................................275 Z2.2. Organizacja segmentów.........................................................................................277 Z2.3. Definiowanie stałych oraz dyrektywy związane z nazwami symbolicznymi........279 Z2.4. Definiowanie zmiennych .......................................................................................280 Z2.4. Dyrektywy asemblacji warunkowej.......................................................................282 Z2.5. Makroinstrukcje i dyrektywy nimi związane.........................................................283 Z2.6. Pseudoinstrukcje typu HLL ...................................................................................285 Z2.7. Dyrektywy związane z podprogramami ................................................................286 Z2.8. Dyrektywy wpływające na kształt listingu asemblacji ..........................................287 Z2.9. Połączenia międzymodułowe ................................................................................289 Z2.10. Dyrektywy związane z diagnostyką procesu asemblacji.....................................290 Z2.11. Inne dyrektywy i pseudoinstrukcje ......................................................................291 Załącznik 3. Operatory stosowane w języku MASM ............................................ 293 Z3.1. Operatory stosowane w wyra eniach obliczanych w czasie asemblacji ...............293 Z3.2. Operatory stosowane w wyra eniach obliczanych w czasie wykonywania programu.................................................................................297 Załącznik 4. Symbole predefiniowane................................................................. 299 Załącznik 5. Przegląd instrukcji procesora Pentium 4......................................... 303 Z5.1. Instrukcje ogólne (jednostki stałoprzecinkowej) ...................................................303 Z5.2. Instrukcje jednostki zmiennoprzecinkowej (koprocesora arytmetycznego)..........309 Z5.3. Instrukcje rozszerzenia MMX ...............................................................................313 Z5.4. Instrukcje rozszerzenia SSE...................................................................................315 Z5.5. Instrukcje rozszerzenia SSE2.................................................................................319 Z5.6. Instrukcje rozszerzenia SSE3.................................................................................323 Z5.7. Instrukcje systemowe.............................................................................................325 Załącznik 6. Opis wybranych przerwań systemu BIOS ......................................... 327 Z6.1. Funkcje obsługi klawiatury wywoływane przerwaniem programowym INT 16h...327 Z6.2. Funkcje obsługi karty graficznej wywoływane przerwaniem programowym INT 10h. .........................................................................329 Załącznik 7. Wywołania funkcji systemu operacyjnego MS DOS.......................... 335 Z7.1. Funkcje realizujące odczyt lub zapis znaku z układu wejściowego lub wyjściowego ...........................................................................................................335 Z7.2. Funkcje operujące na katalogach...........................................................................337 Z7.3. Operacje na dysku..................................................................................................337 Z7.4. Operacje na plikach (zbiorach) dyskowych...........................................................339 Z7.5. Operacje na rekordach w pliku ..............................................................................341
  • 5. 6 Praktyczny kurs asemblera Z7.6. Zarządzanie pamięcią operacyjną..........................................................................342 Z7.7. Funkcje systemowe................................................................................................342 Z7.8. Sterowanie programem ..........................................................................................344 Z7.9. Funkcje związane z czasem i datą ...........................................................................345 Z7.10 Inne funkcje ..........................................................................................................345 Załącznik 8. Opis wybranych funkcji API ............................................................ 347 Z8.1. CheckDlgButtom ...................................................................................................347 Z8.2. CloseHandle...........................................................................................................348 Z8.3 CopyFile..................................................................................................................349 Z8.4. CreateFile...............................................................................................................350 Z8.5. CreateWindowEx...................................................................................................352 Z8.6. DeleteFile...............................................................................................................355 Z8.7. ExitProcess.............................................................................................................355 Z8.8. GetFileSize.............................................................................................................356 Z8.9. MessageBox...........................................................................................................357 Z8.10. ShowWindow.......................................................................................................359 Załącznik 9. Tablica kodów ASCII oraz kody klawiszy ......................................... 361 Z9.1. Kody ASCII ...........................................................................................................361 Z9.2. Kody klawiszy .......................................................................................................361 Załącznik 10. Program Segment Prefix (PSP).................................................... 367 Załącznik 11. Płyta CD załączona do książki ..................................................... 369 Skorowidz ........................................................................................................ 371
  • 6. Rozdział 2. Zaczynamy typowo — wiedząc niewiele, uruchamiamy nasz pierwszy program Ka dy szanujący się podręcznik programowania niezale nie od tego, jakiego języka dotyczy, musi rozpocząć się zgodnie z powszechnie szanowaną tradycją: programem wyświetlającym na ekranie monitora komunikat „Hello, world!”. Wprawdzie nie znamy jeszcze ani architektury procesora Pentium, ani te samego języka asemblera i jego skład- ni, to jednak spróbujmy pokazać, jak wyglądałby taki miniprogram, i to zarówno w wersji przeznaczonej do uruchomienia pod systemem operacyjnym MS DOS, jak i pod sys- temem Windows. Tak jak to zostało zasygnalizowane w pierwszym rozdziale, nie bę- dziemy chcieli w naszym pierwszym programie zrobić wszystkiego sami! Skorzystamy w obu przypadkach z podprogramów (biblioteki) systemowych wyświetlania tekstu na ekranie monitora. Tak więc nasz program sprowadzi się do: zadeklarowania, jaki tekst chcemy wyświetlić, przygotowania parametrów wywołania procedury systemowej, wywołania tej e procedury, zakończenia programu, czyli oddania sterowania systemowi operacyjnemu.
  • 7. 18 Praktyczny kurs asemblera 2.1. „Hello, world!” pod systemem operacyjnym MS DOS Najprostszy program asemblerowy, który w okienku wirtualnego systemu MS DOS bądź na całym ekranie wyświetli ądany napis, mo e mieć następującą postać: /ÎL RKGTYU[ RTQITCO Y CUGODNGTG 5[UVGO QRGTCE[LP[ /5 15 OQFGN UOCNN OQFGN RCOKúEK UGIOGPV RTQITCOW K UGIOGPV FCP[EJ FQUVúRP[ DKÎT TQMCÎY RTQEGUQTC FCVC RQEæVGM UGIOGPVW FCP[EJ VGMUV D[VG *GNNQ YQTNF CJFJ UVCEM J UGIOGPV UVQUW Q CFGMNCTQYCP[O TQOKCTG EQFG RQEæVGM UGIOGPVW MQFGO RTQITCOW UVCTVWR OCMTQKPUVTWMELC IGPGTWLæEC UGMYGPELú KPKELWLæEæ TGLGUVT[ UGIOGPVQYG 5 K 55 OQX FZ QHHUGV VGMUV YRTQYCFGPKG RCTCOGVTÎY Y[YQ CPKC OQX CJ J RTQEGFWT[ Y[ YKGVNGPKC MQOWPKMCVW KPV J Y[YQ CPKG RTQEGFWT[ U[UVGOQYGL GZKV OCMTQKPUVTWMELC IGPGTWLæEC UGMYGPELú MQ EQYæ RTQITCOW GPF MQPKGE RTQITCOW TÎF QYGIQ Spróbujmy teraz kolejno objaśnić poszczególne linie programu. Od razu mo na zauwa- yć szczególną rolę znaku średnika (). Za tym znakiem umieszczać będziemy komen- tarz objaśniający działanie programu, który nie jest analizowany przez asembler. Im więcej będzie tego komentarza i im bardziej będzie wyczerpujący, tym nasz program będzie bardziej zrozumiały dla innych, jak i (po jakimś czasie) dla nas samych. A teraz wyjaśnijmy, co oznaczają poszczególne linie programu: OQFGN UOCNN Procesor Pentium narzuca pewną specyficzną, segmentową organizację pamięci operacyjnej. Dyrektywa OQFGN pozwala w prosty sposób zdefiniować tzw. model pamięci, czyli sposób zorganizowania segmentów w naszym programie. Parametr UOCNN informuje, e w naszym programie będziemy mieli do dyspozycji jeden segment z kodem programu oraz jeden segment z danymi. Ta dyrektywa powoduje, e asembler (program tłumaczący) zezwoli na u ywanie w programie zbioru instrukcji procesora 80386 (a więc tak e procesora Pentium). W naszym prostym przykładzie moglibyśmy pominąć tę dyrektywę, wtedy jednak asembler akceptowałby jedynie instrukcje procesora 8086. Wpłynęłoby to jedynie na nieco inne przetłumaczenie objaśnionej poni ej makroinstrukcji UVCTVWR, jednak bez zmiany jej znaczenia w programie. FCVC Dyrektywa definiująca początek segmentu z danymi.
  • 8. Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy… 19 VGMUV D[VG *GNNQ YQTNF CJFJ Linia programu deklarująca naszą jedyną zmienną, czyli tekst, jaki chcemy wyświetlić na ekranie. Słowo VGMUV jest zdefiniowaną przez nas nazwą zmiennej tekstowej, z kolei słowo D[VG jest dyrektywą asemblera informującą, e zmienna tekstowa jest w rzeczywistości zmienną bajtową. Ka da z liter wyświetlanego tekstu umieszczonego w cudzysłowie zamieniona zostanie w procesie asemblacji na odpowiadający jej bajt w kodzie ASCII. CJ, FJ to kody ASCII nowej linii oraz powrotu karetki (przesunięcia kursora do początku linii) wyra one liczbą szesnastkową. Poniewa do wyświetlenia komunikatu na ekranie wykorzystamy procedurę systemową, łańcuch znaków zakończyć musimy kodem ASCII znaku dolara, co zapisaliśmy: . Brak znaku dolara spowodowałby, e wyświetlane byłyby kolejne bajty z pamięci operacyjnej zawierające przypadkowe wartości. UVCEM J Dyrektywa kończy segment danych i deklaruje segment stosu o wielkości 256 bajtów (czyli 100 szesnastkowo). EQFG Dyrektywa definiująca kolejny segment, tym razem z kodem programu. UVCTVWR Pierwsze instrukcje programu powinny zainicjować odpowiednimi wartościami rejestry, które odpowiadają za rozmieszczenie segmentów w pamięci operacyjnej. Program musi mieć informację, jaki jest adres początku segmentu danych i segmentu stosu (adres początku segmentu programu zostanie ustawiony przez system operacyjny w czasie ładowania programu do pamięci). Makroinstrukcja predefiniowana UVCTVWR zostanie w czasie asemblacji zamieniona na ciąg instrukcji procesora wpisujących do rejestrów segmentowych odpowiednie wartości. Będzie ona równocześnie informacją, gdzie zaczyna się program. Teraz nastąpi główna część programu. Instrukcje OQX, będące jednymi z najczęściej u ywanych w asemblerze, powodują skopiowanie prawego argumentu w miejsce lewe- go. Będzie to przygotowanie parametrów wywołania podprogramu systemowego, który wywołamy rozkazem KPV. OQX FZ QHHUGV VGMUV Rozkaz załaduje do rejestru procesora DX adres początku zmiennej tekstowej o nazwie VGMUV w pamięci operacyjnej. Będzie to adres 16-bitowy (taką wielkość ma rejestr DX) liczony względem początku segmentu danych, nazywany przez niektórych odległością w bajtach od początku segmentu. Adres ten będziemy nazywać krótko angielskim terminem offset. 1HHUGV to tak e nazwa operatora, który u yty w omawianej instrukcji powoduje wydzielenie z nazwy VGMUV tej części adresu.
  • 9. 20 Praktyczny kurs asemblera OQX CJ J Wszystkie udostępnione programom u ytkowym funkcje systemu operacyjnego MS DOS wywołuje się w identyczny sposób, dlatego ich rozró nienie następuje przez podanie jej numeru w rejestrze AH procesora. Procedura wyprowadzająca na ekran monitora tekst, którego offset umieszczony jest w rejestrze DX, ma numer 9. KPV J Instrukcja procesora KPV powoduje wywołanie specyficznego podprogramu, tzw. podprogramu obsługi przerwania (ang. interrupt). System operacyjny MS DOS standardowo wykorzystuje rozkaz KPV J do wywoływania udostępnionych programom u ytkowym funkcji (procedur) systemowych, rozró nianych zawartością rejestru AH. GZKV Makroinstrukcja predefiniowana GZKV zostanie w procesie asemblacji zamieniona na następujący ciąg instrukcji procesora, który powoduje zakończenie programu i oddanie sterowania systemowi operacyjnemu: OQX CJ EJ KPV J Jak widać, jest to znane nam ju wywołanie procedury systemowej, tym razem o numerze 4c szesnastkowo. W taki sposób kończyć będziemy ka dy program asemblerowy uruchamiany pod systemem MS DOS. GPF Dyrektywa kończąca program źródłowy, wstrzymująca proces asemblacji. Je eli w zbiorze z programem źródłowym będą jeszcze jakieś linie programu, to nie będą one analizowane. Skoro wiemy ju , jak wyglądać powinien nasz pierwszy program w asemblerze i co oznaczają poszczególne linie programu źródłowego, to nale ałoby teraz pokazać, co trzeba zrobić, aby program ten mo na było uruchomić. W celu maksymalnego uprosz- czenia przyjmijmy, e w wydzielonej kartotece mamy wszystkie niezbędne w tym przy- padku programy (zbiory) tak, jak pokazuje to rysunek 2.1. Rysunek 2.1. Zawartość kartoteki przed asemblacją
  • 10. Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy… 21 Zbiór o nazwie pierwszy.asm zawiera program źródłowy „Hello, world!”. Wyjaśnijmy rolę pozostałych zbiorów: ML.EXE — program asemblera, pozwalający równocześnie wywołać program konsolidujący LINK.EXE, ML.ERR — zbiór tekstowy z komunikatami asemblera, LINK.EXE — program konsolidujący (linker), mo e być wywoływany automatycznie przez ML.EXE. Przykładowa sesja wywołania z linii komendy MS DOS programu asemblera i linkera zilustrowana jest na rysunku 2.2. Wyświetlenie zawartości kartoteki pokazuje, e w wyni- ku asemblacji oraz konsolidacji utworzone zostały zbiory pierwszy.obj oraz pierwszy.exe. Rysunek 2.2. Wywołanie asemblera ML.EXE Na razie nie będziemy zajmować się rozwikłaniem wszystkich komunikatów, które wyświetliły się na ekranie. Wa ne jest, e nie pojawił się aden komunikat o błędzie asemblacji, mo emy więc zaryzykować uruchomienie naszego pierwszego programu. Uzyskany efekt ilustruje rysunek 2.3. Rysunek 2.3. Efekt działania programu pierwszy.exe
  • 11. 22 Praktyczny kurs asemblera W linii programu źródłowego może wystąpić: instrukcja procesora zwana także rozkazem procesora (np. MOV, INT), dyrektywa sterująca pracą asemblera w procesie asemblacji (np. .MODEL, .DATA, .STACK, .CODE, END, .386), lub makroinstrukcja predefiniowana (np. .STARTUP, .EXIT) lub indywidualnie zdefiniowana przez nas (o czym będzie w następnych rozdziałach) i zamieniona przez asembler na ciąg instrukcji procesora i dyrektyw asemblera. Funkcje systemu MS DOS udostępnione programom użytkowym wywołuje się roz- kazem INT 21h po wcześniejszym załadowaniu do rejestru AH numeru funkcji. 2.2. „Hello, world!” pod systemem operacyjnym Windows Okienkowa wersja naszego pierwszego (nazwiemy go dla rozró nienia „drugim”) pro- gramu będzie niestety zupełnie inna. Wynika to z oczywistego faktu, e tak naprawdę to cały program sprowadza się do wywołania podprogramu bibliotecznego i nie ma w nim praktycznie adnych obliczeń. Skoro system operacyjny jest zupełnie inny, inna jest biblioteka dostępnych funkcji, inna wreszcie jest tak e organizacja pamięci opera- cyjnej w przypadku pracy procesora w trybie adresacji wirtualnej z ochroną, ponadto system jest wielozadaniowy — zatem nasz program będzie musiał dostosować się do wszelkich wynikających z tego wymogów. Hasło „Hello, world!” wyświetlimy w od- rębnym oknie (a ściślej w małym okienku z komunikatem) wykorzystując do tego funk- cję API (ang. The Microsoft® Win32® Application Programming Interface). API sta- nowi zbiór dynamicznych bibliotek (DLL), z którego korzystają wszystkie procesy uruchamiane w systemie Windows. Więcej na ten temat — w jednym z dalszych roz- działów ksią ki, teraz wystarczy wiedzieć, e aby skorzystać ze wspomnianych funk- cji API, nale y do programu źródłowego dołączyć odpowiednie biblioteki oraz zbiory z deklaracjami tzw. prototypów. Program mógłby1 wyglądać następująco: /ÎL FTWIK RTQITCO Y CUGODNGTG C RKGTYU[ RQF U[UVGOGO QRGTCE[LP[O 9KPFQYU OQFGN HNCV UVFECNN R CUMK OQFGN RCOKúEK QRVKQP ECUGOCR PQPG OC G K FW G NKVGT[ TQTÎ PKCPG FQ æEGPKG DKQTÎY FGMNCTCELCOK RTQVQV[RÎY K U[ODQNK GYPúVTP[EJ KPENWFG YKPFQYUKPE KPENWFG WUGTKPE KPENWFG MGTPGNKPE FQ æEGPKG DKQTÎY DKDNKQVGEP[EJ KPENWFGNKD WUGTNKD KPENWFGNKD MGTPGNNKD 1 Podkreślam słowo „mógłby wyglądać”, bowiem podobnie jak w innych językach programowania ka dy problem mo na rozwiązać na wiele sposobów.
  • 12. Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy… 23 FCVC 6[VWNAQMPC D[VG /ÎL FTWIK RTQITCO 6GMUVAYAQMPKG D[VG *GNNQ YQTNF EQFG UVCTV KPXQMG /GUUCIG$QZ 07.. #4 6GMUVAYAQMPKG #4 6[VWNAQMPC /$A1- KPXQMG 'ZKV2TQEGUU 07.. GPF UVCTV Podobnie jak poprzednio, wyjaśnimy teraz znaczenie poszczególnych linii programu źródłowego, który — co widać na pierwszy rzut oka — kojarzy się raczej z programem w języku wy szego poziomu ni językiem asemblera, bowiem nie występują w nim wprost adne instrukcje procesora. Wspominałem ju , e wynika to z braku w programie jakichkolwiek obliczeń. Program sprowadza się do wywołania dwóch podprogramów bibliotecznych: MessageBox — wyświetlenia komunikatu, oraz ExitProcess — zakończenia programu. Podobnie jak w programie DOS-owym, dyrektywa ta powoduje mo liwość u ywania w programie zbioru instrukcji procesora 80386. Nie jest przypadkiem, e tym razem dyrektywa ta jest pierwszą w programie. Ze względu na inny model pamięci, zadeklarowany w następnej linii programu źródłowego, taką kolejność dyrektyw będziemy zawsze stosować na początku programu, który ma być uruchomiony pod systemem Windows. OQFGN HNCV UVFECNN Procesor Pentium z systemem operacyjnym Windows pracuje z tzw. płaskim modelem pamięci (ang. flat). Jest to szczególny przypadek modelu segmentowego, dostępny w trybie adresacji wirtualnej z ochroną. Z kolei drugi parametr UVFECNN określa, w jakiej kolejności parametry wywołania procedur bibliotecznych w naszym programie przekazywane będą na stos i w jaki sposób stos będzie opró niany z tych parametrów. Nie wnikając na tym etapie rozwa ań w większe szczegóły, zapamiętamy, e taka linia programu będzie się musiała zawsze znaleźć na drugim miejscu po dyrektywie wyboru procesora. QRVKQP ECUGOCRPQPG Dyrektywa powoduje, e w nazwach symbolicznych rozró niane będą małe i du e litery. Dyrektywa jest niezbędna, aby mogło się odbyć prawidłowe dołączenie procedur bibliotecznych API. KPENWFG Następujące po sobie trzy linie programu z dyrektywą KPENWFG powodują dołączenie do naszego programu źródłowego zbiorów o nazwach odpowiednio: windows.inc, user32.inc oraz kernel32.inc. W zbiorach tych znajdują się (w postaci kodów źródłowych) definicje tzw. prototypów procedur
  • 13. 24 Praktyczny kurs asemblera bibliotecznych i nazw symbolicznych2, które mo emy dołączać do programu u ytkowego. Brak tych prototypów i definicji spowodowałby, e u yte w programie nazwy wywoływanych procedur i niektórych stałych uznane byłyby jako niezdefiniowane i w konsekwencji program wynikowy nie mógłby zostać wygenerowany. KPENWFGNKD Dwie linie programu z dyrektywą KPENWFGNKD informują program konsolidujący LINK.EXE, jakie moduły biblioteczne powinien dołączyć w procesie konsolidacji, czyli generowaniu zbioru drugi.exe. FCVC Dyrektywa definiująca początek segmentu danych, w związku z płaskim modelem pamięci nazywanym w tym przypadku przez niektórych sekcją z danymi. Podobnie jak w przypadku programu uruchamianego pod systemem operacyjnym MS DOS, następne linie programu to deklaracje zmiennych tekstowych. 6[VWNAQMPC D[VG /ÎL FTWIK RTQITCO 6GMUVAYAQMPKG D[VG *GNNQ YQTNF Dwie dyrektywy D[VG definiują dwie zmienne tekstowe zainicjowanymi napisami, z których jeden poka e się na ramce okienka, drugi zaś — jako właściwy komunikat — wewnątrz. Podprogram biblioteczny, który wykorzystamy do wyświetlenia napisu, wymaga, aby tekst kończył się bajtem o wartości zero (podobnie jak w przypadku funkcji systemu MS DOS znakiem dolara). EQFG Początek segmentu (sekcji) z kodem programu. UVCTV Etykieta (czyli adres symboliczny) informująca, e w tym miejscu powinno rozpocząć się wykonywanie programu. Etykieta ta będzie musiała dodatkowo wystąpić jako argument dyrektywy GPF kończącej program źródłowy. KPXQMG /GUUCIG$QZ07..#4 6GMUVAYAQMPKG#4 6[VWNAQMPC/$A1- Dyrektywa KPXQMG pozwala wywołać procedurę /GUUCIG$QZ — przesyła ona na stos parametry wywołania i wyświetla komunikat. Parametrami wywołania są w tym przypadku kolejno: 07..  „uchwyt” do okna3, w naszym przypadku niepotrzebny i równy zero, #4 6GMUVAYAQMPKG  adres początku komunikatu, jaki ma być wyświetlony, 2 U yliśmy dwóch takich niezdefiniowanych bezpośrednio w naszym programie nazw: 07.. i /$A1-. 3 Pojęcie „uchwyt” związane jest z programowaniem pod systemem operacyjnym Windows i jest niezale ne od języka programowania.
  • 14. Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy… 25 #4 6[VWNAQMPC  adres początku napisu, jaki ma być na ramce okienka, /$A1-  parametr określający, jakie standardowe przyciski mają być wyświetlone (w naszym przypadku jedynie przycisk „OK”). Dyrektywa KPXQMG nale y do grupy dyrektyw asemblera nawiązujących do konstrukcji typowych dla języków wysokiego poziomu4. Operator #4 w polu parametrów wywołania procedury ma w tym przypadku identyczne znaczenie, jak poznany wcześniej operator QHHUGV w polu argumentu instrukcji procesora. W czasie procesu asemblacji dyrektywa zostanie zastąpiona następującą prostą sekwencją instrukcji procesora: RWUJ /$A1- RWUJ QHHUGV 6[VWNAQMPC RWUJ QHHUGV 6GMUVAYAQMPKG RWUJ 07.. ECNN /GUUCIG$QZ Je eli w programie źródłowym zamiast dyrektywy KPXQMG napiszemy powy sze instrukcje, końcowy efekt działania programu będzie oczywiście dokładnie taki sam. Instrukcje procesora RWUJ przesyłają argumenty instrukcji na szczyt stosu, skąd pobierze go procedura /GUUCIG$QZ. Procedura wywołana zostanie typową instrukcją procesora wywołania podprogramu ECNN. KPXQMG 'ZKV2TQEGUU07.. Wywołanie procedury kończącej program. W czasie asemblacji dyrektywa zostanie zastąpiona następującą sekwencją instrukcji: RWUJ 07.. ECNN 'ZKV2TQEGUU Skoro wiemy ju , jak powinien wyglądać najprostszy program pracujący pod kontrolą systemu Windows, to spróbujmy go uruchomić. Podobnie jak w przypadku poprzednie- go programu uruchomionego pod systemem MS DOS, umieścimy dla prostoty wszystkie niezbędne zbiory w jednej kartotece, tak jak to pokazuje rysunek 2.4. Rysunek 2.4. Zawartość kartoteki przed asemblacją 4 Czasem nieco tylko złośliwie mówię, e tego typu dyrektywy oddalają język asemblera od prawdziwego asemblera…
  • 15. 26 Praktyczny kurs asemblera Oprócz zbioru z programem źródłowym drugi.asm, programami asemblera ML.EXE, ML.ERR oraz programu konsolidatora LINK.EXE, w kartotece znajdujemy niezbędne dla prawidłowej asemblacji zbiory biblioteczne typu .LIB oraz dołączane do programu źródłowego zbiory typu .INC zawierające wspomniane definicje prototypów i symboli. Aby prawidłowo przeprowadzić proces asemblacji i konsolidacji, musimy wywołać program asemblera ML.EXE z przełącznikami, które pozwolą wygenerować zbiory drugi.obj oraz drugi.exe w postaci akceptowanej przez program LINK.EXE oraz sys- tem operacyjny Windows. Ilustruje to rysunek 2.5. Rysunek 2.5. Wywołanie asemblera z przełącznikami pozwalającymi wygenerować program pod system operacyjny Windows Uwa ny Czytelnik zauwa ył zapewne, e u yliśmy tutaj dokładnie tego samego pro- gramu asemblera, co w poprzednim przykładzie dla systemu MS DOS. Musieliśmy jednak zastosować inny program konsolidatora LINK.EXE, który uwzględnia fakt innej ni w poprzednim przypadku organizacji pamięci operacyjnej. Poszczególne przełącz- niki w naszym przykładzie mają następujące znaczenie: /coff  Zbiór drugi.obj wygenerowany zostanie w formacie Common Object File Format /link  Kolejne przełączniki dotyczyć będą programu konsolidatora /subsystem:windows  Program wykonalny będzie uruchamiany pod systemem operacyjnym Windows Po sprawdzeniu, e zbiory drugi.obj i drugi.exe zostały rzeczywiście utworzone, mo emy uruchomić nasz program. Rysunek 2.6 pokazuje uzyskany rezultat. Program mo emy uruchomić zarówno z linii komendy systemu MS DOS, jak i klikając myszą odpowied- nią ikonę w okienku mened era plików. Warto (tak przy okazji) zwrócić uwagę na wielkość zbioru drugi.exe i porównać go z uruchomionym wcześniej pierwszy.exe. Rysunek 2.6. Efekt wykonania programu drugi.exe
  • 16. Rozdział 2. ♦ Zaczynamy typowo — wiedząc niewiele, uruchamiamy… 27 Program asemblerowy, który ma być uruchomiony pod systemem operacyjnym Win- dows, może korzystać z programów bibliotecznych API, podobnie jak programy pisane w innych językach programowania. Program asemblera generujący zbiór typu .obj nie różni się w tym przypadku od asemblera używanego w przypadku programu uru- chamianego pod systemem MS DOS, choć inne nieco jest jego wywołanie. Inny natomiast musi być zastosowany program konsolidatora, który uwzględnia specy- fikę stosowanego po systemem operacyjnym Windows modelu pamięci. Skoro uruchomiliśmy ju dwa pierwsze proste programy, to przed próbą zaprojektowa- nia nieco bardziej zło onych programów musimy wrócić do podstaw i w minimalnej dawce — niezbędnej programiście — omówić architekturę procesora, jego listę instruk- cji oraz tryby adresowania argumentów.