Literatura:
- Abel P.: Programowanie Asembler IBM PC. RM, Warszawa 2004
- Kruk S.: Asembler wykłady i ćwiczenia, MIKOM Warszawa 2003
- Wróbel A. i inni: Asembler Ćwiczenia praktyczne, HELION Gliwice 2002
Generacje mikroprocesorów:
- Intel 8008 — pierwsza generacja mikroprocesorów 1970
- Intel 8080 — druga generacja mikroprocesorów 1974
- Intel 8086 — 1978 | trzecia
- Intel 8088 — 1981 | generacja
- …
- 80286
- 80386
- 80486
- Pentium
- Celeron
- …
język maszynowy != język wewnętrzny (asemblerowy)
Poziomy programowania:
- język maszynowy (zera i jedynki)
- język niskiego poziomu (asemblerowy, wewnętrzny, mnemoniki)
- języki wysokiego poziomu (C, C++, Visual Basic)
Zalety asemblera:
- da sie przejżyście programować,
- przejrzyst erelacje wejscia wyjscia,
- powstaje szybki program zajmujący mało pamięci,
- umożliwia wykonanie trudnych zadań technicznych,
bit — najmniejsza jednostka informacji (przyjmuje wartosci 0|1) ang. Binary Digit
bajt — 8 bitów
słowo dwóbajtowe — 16-bitowy (2-bajtowy) element danych
słowo podwójne — 4-bajtowy element danych
słowo poczwórne — 8-bajtowe
Bajt jest nieprzekłamany jeśli liczba jedynek jest nieparzysta (razem z bitem parzystości).
01001000 1 — nieprzekłamany bajt
00100101 1 — przekłamany bajt
Numeracja bitów:
litera A | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
numeracja bitów | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Jednostki:
- bit (b) 1 bit
- bajt (B) 8 bitów
- kilobajt (kB) 1024 bajtów
- megabajt (MB)1024 kilobajtów
System dwujkowy (binarny):
- podstawa systemu (2)
- zbiór cyfr tego systemu (0,1)
System dziesiętny (decymalny):
- podstawa systemu (10)
- zbiór cyfr tego systemu (0..10)
Arytmetyka liczb dwójkowych
- dodawanie
- liczby ujemne (uzupełnienie dwójkowe patrz kod U2)
System szestnastkowy (heksadecymalny)
- podstawa systemu (16)
- zbiór cyfr tego systemu (0..9A..F)
010110010011010110101001110011102 = 5935A9CE16
0101 | 1001 | 0011 | 0101 | 1010 | 1001 | 1100 | 1110 |
5 | 9 | 3 | 5 | A | 9 | C | E |
Arytmetyka szestnastkowa:
716 + 316 = A16
616 + 716 = D16
F16 + F16 = 1E16
FF16 + 116 = 10016
kod ASCII: ang. American Standard Code for Information Interchange kod dla danych liczbowych alfanumerycznych
Adresowanie danych w pamięci odbywa się po bajtach
np.: 052916 <— adres jakiegoś bajtu
FFAA - słowo dwujkowe
FF | AA |
bajt starszy | bajt młodszy |
Pamięć operacyjna
część górna | część dolna | |
pamięć operacyjna | FF | AA |
adres | 4A2616 | 4A2716 |
Rodzaje adresów:
- adres bezwzględny np. 4A2616
- adres w postaci segment:przesunięcie(offset)
Segmenty dotyczą pamięci operacyjnej — w trybie podstawowy (rzeczywisty) są 3:
- segment kodu — ang. Code Segment CS
- segment danych — ang. Data Segment DS
- segment stosu — ang. Stack Segment SS
granica akapitu: lokacja o adresie bez reszty podzielna przez 1610, (tj. 1016)
np. 4A2716,, — 16-bit, ale szyna jest 20-bitowa (4 ostatnie bity to 00002)
FF016 / 1016 = FF16
Segmenty dodatkowe w bardziej zaawansowanych mikroprocesorach:
- ES ang. Extra Segment
- FS
- GS
Przesunięcie w trybie rzeczywistym jest na dwóch bajtach. Minimalne przesunięcie 016 a maksymalne FFFF16 (6553510).
Jak obliczyć adres bezwzględny mając adres segmentu i offsetu.
np. DS 038E016 a ofset 03216
038E016 + 03216 = 0391216 (adres bezwzględny)
Rejestry:
- uniwersalne,
- wskaźnikowe,
- segmentowe — tu są adresy segmentów (czyli ich początek) rejestr 16-bitowy (CS DS SS — to nie to samo co segmenty).