Witam
Mam nadzieję, że zamieszczone na tej stronie informacje
wynagrodzą niezbyt wyszukany wygląd, a moje kursy w szybki i łatwy sposób umożliwią
każdemu zdobycie niemałych umiejętności w programowaniu z wykorzystaniem języka
asembler.
Jeśli trafiliście tu przez przypadek i nie interesuje Was język asembler,
to przeczytajcie chociaż
wstęp do tematu, aby przekonać się, ile
błędnych i niesprawiedliwych
opinii krąży o tym wspaniałym języku w środowisku tak zwanych prawdziwych programistów (którzy
najczęściej o asemblerze po prostu nic nie wiedzą).
UWAGA: Materiały zgromadzone na tej stronie dotyczą procesorów rodziny
x86, czyli od 8086 poprzez 80586,
aż do najnowszych modeli Intela oraz wszystkich procesorów zgodnych z procesorami Intela:
AMD,
Cyrix,
Transmeta, ... Nie wiem nic o programowaniu układów 805x,
PIC, ARM, AVR, Alpha, SPARC,
PowerPC, Motoroli 68000,
wyświetlaczy LCD i tym podobnych rzeczy.
Oto, co ja Wam oferuję
- Kodu źródłowego umieszczonego w tym kursie można używać na zasadach licencji
GNU LGPL w wersji trzeciej. Wyjątkiem
jest program l_mag, którego licencją jest GNU GPL w wersji trzeciej. Programy innych osób mają swoje licencje.
- Zasady korzystania z materiałów:
- Kurs i wszelkie materiały (za wyjątkiem programów, które objęte są osobnymi zasadami)
można bez ograniczeń kopiować, drukować lub przenosić na inne nośniki informacji na własny użytek, o
ile zachowa się informacje o autorze.
- Można dokonywać modyfikacji treści kursu, ale tylko na własny użytek.
- Kurs rozpowszechniać można tylko z niezmienioną treścią, można jednak w osobnych plikach dodawać
komentarze i inne materiały.
- W przypadku rozpowszechniania
do innych odbiorców należy przekazać informację o pochodzeniu kursu (na przykład adres www)
i autorze oraz zasady dotyczące użytkowania kursu.
Jeśli zauważyliście błędy albo Waszym zdaniem trzeba coś zmienić lub dodać,
to naprawdę piszcie do mnie. Adres jest na dole strony.
- Kurs języka asembler dla DOS-a/
(oraz FreeDOS i podobnych)
online (dla kompilatorów:
Turbo Assembler - TASM,
Netwide Assembler - NASM i
Flat Assembler - FASM):
(przeskocz kurs dla DOSa)
- Wstęp - Dlaczego DOS?
- Część 1D - Podstawy, czyli czym to się je.
- Część 2D - Pamięć, czyli gdzie upychać coś, co się nie mieści
w procesorze.
- Część 3D - Podstawowe instrukcje, czyli poznajemy dialekt
procesora.
- Część 4D - Pierwsze programy, czyli przełamywanie
pierwszych lodów.
- Część 5D - Koprocesor, czyli jak liczyć na ułamkach.
Odwrotna Notacja Polska.
- Część 6D -
SIMD, czyli jak działa
MMX.
- Część 7D - Porty, czyli łączność między procesorem a innymi
urządzeniami.
- Część 8D - Zaawansowane programy, czyli zobaczmy,
co ten język naprawdę potrafi.
- Część 9D - Narzędzia programisty,
czyli co może nam pomagać w programowaniu.
- Część 10D - Nie jesteśmy sami, czyli jak łączyć asemblera
z innymi językami.
- Część 11D - Pamięć jest nietrwała, czyli jak
posługiwać się plikami.
- Część 12D - Czego od nas pragną, czyli linia poleceń programu.
Zmienne środowiska.
- Część 13D - Operacje na bitach, czyli to, w czym
asembler błyszczy najbardziej.
- Część 14D - Operacje o wielokrotnej precyzji,
czyli co zrobić, gdy liczby nie mieszczą się w rejestrach.
- Część 15D - If/else if/else, do, while, for, switch/case
- czyli o tym, jak używać bloków kontrolnych.
- Część 16D - Operacje na łańcuchach znaków. Wyrażenia regularne.
- Część 17D - Pobieranie i wyświetlanie,
czyli jak komunikować się ze światem.
- Opis podstawowych funkcji najczęściej używanych przerwań
- Skankody i kody
ASCII klawiszy
- Różnice między dyrektywami różnych kompilatorów
- Kurs języka asembler dla Linuksa online (dla kompilatorów:
Netwide Assembler - NASM i
Flat Assembler - FASM):
(przeskocz kurs dla Linuksa)
- Informacja dla użytkowników *BSD
- Część 1L - Podstawy, czyli czym to się je.
- Część 2L - Pamięć, czyli gdzie upychać coś, co się nie mieści
w procesorze.
- Część 3L - Podstawowe instrukcje, czyli poznajemy dialekt
procesora.
- Część 4L - Pierwsze programy, czyli przełamywanie pierwszych lodów.
- Część 5L - Koprocesor, czyli jak liczyć na ułamkach.
Odwrotna Notacja Polska.
- Część 6L -
SIMD, czyli jak działa
MMX.
- Część 7L - Porty, czyli łączność między procesorem a innymi
urządzeniami.
- Część 8L - Zaawansowane programy, czyli zobaczmy,
co ten język naprawdę potrafi.
- Część 9L - Narzędzia programisty,
czyli co może nam pomagać w programowaniu.
- Część 10L - Nie jesteśmy sami, czyli jak łączyć asemblera
z innymi językami.
- Część 11L - Pamięć jest nietrwała, czyli jak
posługiwać się plikami.
- Część 12L - Czego od nas pragną, czyli linia poleceń programu.
Zmienne środowiska.
- Część 13L - Operacje na bitach, czyli to, w czym
asembler błyszczy najbardziej.
- Część 14L - Operacje o wielokrotnej precyzji,
czyli co zrobić, gdy liczby nie mieszczą się w rejestrach.
- Część 15L - If/else if/else, do, while, for, switch/case
- czyli o tym, jak używać bloków kontrolnych.
- Część 16L - Operacje na łańcuchach znaków. Wyrażenia regularne.
- Część 17L - Pobieranie i wyświetlanie,
czyli jak komunikować się ze światem.
- Opis przerwania systemowego Linuksa int 80h: funkcje 1-50 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 51-100 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 101-150 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 151-200 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 201-250 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 251-300 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 301-350 (x86)
- Opis przerwania systemowego Linuksa int 80h: funkcje 351-379 (x86)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 0-50 (x86-64)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 51-100 (x86-64)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 101-150 (x86-64)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 151-200 (x86-64)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 201-250 (x86-64)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 251-300 (x86-64)
- Opis funkcji systemowych Linuksa 64-bit: funkcje 301-328 (x86-64)
- Różnice między składnią Intela a AT&T: AT&T a Intel
- Różnice między dyrektywami NASMa i FASMa: NASM a FASM
- Mini-kursy dla DOSa (online):
(przeskocz mini-kursy dla DOSa)
- Mini-kursy dla Linuksa (online):
(przeskocz mini-kursy dla Linuksa)
- Moja biblioteka procedur (napisanych oczywiście w asemblerze)
dla procesorów x86:
(przeskocz bibliotekę)
- wyświetlanie i pobieranie liczb całkowitych, od 8 do 64 bitów długości: dwójkowo, ósemkowo,
dziesiętnie i szestnastkowo
- wyświetlanie i pobieranie liczb zmiennoprzecinkowych dowolnej precyzji (32, 64 lub 80
bitów) dowolnej postaci, w tym wykładniczej
- wyświetlanie i pobieranie tekstów
- generowanie liczb pseudolosowych od 8 do 64 bitów długości
- wykrywanie rodzaju procesora i koprocesora
- emitowanie dźwięku przez głośniczek
- operacje na łańcuchach znaków
- operacje na spakowanych i niespakowanych liczbach BCD, od 8 do 64 bitów długości
- instrukcja obsługi i gotowe przykłady użycia
- wersja Linux/*BSD: numery większości funkcji systemowych, stałe systemowe, numery
błędów systemowych, obsługa składni NASMa i FASMa, część struktur używanych przez
przerwanie int 80h
- wersja DOS/BIOS:
obsługa składni TASMa, FASMa i NASMa
- obsługiwane formaty plików:
- DOS: OMF/LIB (kod 16-bitowy),
na przykład dla linkerów VAL i ALINK
- DOS: COFF
(kod 32-bitowy), na przykład dla linkera LD z
DJGPP
- Linux/*BSD: ELF
(kod 32-bitowy), na przykład dla linkera LD z binutils
Wersja dla każdego systemu (DOS, BIOS, Linux, BSD):
bibl.zip
Wersja DLL dla Windowsa, dzięki uprzejmości Remka:
bibl_dll.zip
Biblioteka przeznaczona jest dla tych, którzy chcą się uczyć asemblera, lecz jeszcze
nie chcą zagnieżdżać się w mroczne zakamarki wypisywania i pobierania danych.
Wejście/wyjście może dla niektórych okazać się najtrudniejszą rzeczą do napisania w
całym programie! Moja biblioteka służy właśnie do tego, aby tym się nie przejmować, a
skupić się na tym, co jest najważniejsze - zrozumieniu języka i pisaniu algorytmów.
W archiwum znajduje się krótki opis użytkowania: bibl\czytaj.txt
oraz przykłady zastosowania procedur: bibl\przykl\.
- Różne programy - przykłady w asemblerze,
konwertery w Perlu, definicje kolorowania składni dla edytora KDE Kate/KWrite.
- Autoryzowane kopie moich materiałów:
- Odnośniki do innych stron
(kompilatory, kursy, książki, dokumentacja, programy)
Jeśli macie jakieś pytania lub uwagi dotyczące tej strony, biblioteki lub moich kursów,
to piszcie.
Wasze opinie są dla mnie ważne, gdyż dzięki nim mogę bardziej dostosować treść strony do
Waszych potrzeb.
Proszę nie pisać do mnie w sprawach innych procesorów niż te z
rodziny x86 lub jej 64-bitowej
następczyni. Nie wiem nic o programowaniu układów 805x,
PIC, ARM, AVR, Alpha, SPARC, PowerPC, Motoroli 68000, wyświetlaczy LCD i tym podobnych rzeczy.
Mój adres to bogdandr MAŁPKA op KROPKA pl.
Proszę NIE dodawać sobie mojego adresu do książki adresowej, a przede
wszystkim NIE umieszczać go na żadnej stronie internetowej. Osoby, które
już to zrobiły, proszę o usunięcie.
Mój certyfikat publiczny:
MD5 certyfikatu: 68:0D:78:15:1F:6E:24:7A:48:82:EB:CA:0F:3B:5A:A0
SHA1 certyfikatu: 8C:9B:7A:AB:A9:8E:39:FE:3A:B0:34:35:C1:41:10:89:38:4B:42:E2
Certyfikat wystawcy:
MD5 certyfikatu wystawcy: EB:77:B9:23:0F:21:02:2A:29:54:8A:78:A3:A4:8F:20
SHA1 certyfikatu wystawcy: FE:E7:83:1D:AA:8D:1E:10:32:40:2D:08:1D:23:00:0F:86:C4:48:46
Mój klucz publiczny GnuPG/PGP:
Numer 1C56DA1E,
SHA1 klucza: E91E 699F 1026 D0EF 745E EC3B 353A D368 1C56 DA1E
Certyfikat serwera znaczników czasu potwierdzającego czas podpisu można znaleźć na stronie
freeTSA.org.
Jeśli nie wiecie, co zrobić z tym powyżej, to przeczytajcie krótką
instrukcję obsługi.
Jeśli macie pytania ogólne dotyczące asemblera lub jeśli macie problem ze swoimi programami,
zachęcam Was do pisania na grupy dyskusyjne
alt.pl.asm,
alt.pl.asm.win32
(nie wszędzie dostępne) lub
pl.comp.lang.asm
(powinna być wszędzie dostępna), aby inni także
mogli się czegoś nauczyć. My nie wyśmiewamy nikogo za proste pytania!
Aktualnie grupy alt.pl.asm i pl.comp.lang.asm można znaleźć między innymi na tych serwerach:
Chętnie zbieram informacje o innych serwerach news posiadających te grupy.
Polecam też (głównie do czytania) anglojęzyczne grupy dyskusyjne
alt.lang.asm oraz
comp.lang.asm.x86 (lepsza).