42 4. Język asemblerowy mikroprocesorów 8086/80X8
(ODH). Asembler przetwarza łańcuch stałych alfanumerycznych (czyli teksty) w ciąg bajtów zawierających kody ASCII kolejnych znaków.
'ALA' ’4*7*(6 + 9) = ???’
'tekst przykładowy' 'abcdcfghijklmnopr' ▲
Stałe alfanumeryczne o długości jednego bajtu lub jednego słowa mogą być przedstawione także jako stałe numeryczne.
MOV BH,’B’ jest równoważne MOV BH,42H
MOV CX,’B3’ jest równoważne MOV CX,4233H *
Słowami kluczowymi nazywamy słowa mające w języku asemblera specjalne znaczenie. Są one nazwami zastrzeżonymi, co oznacza, że nie mogą być używane do innych celów niż zostało to zdefiniowane, np. jako nazwy etykiet (adresów symbolicznych) lub stałych czy zmiennych. Przykłady słów kluczowych
SI - nazwa rejestru,
LODSB - symboliczny kod rozkazu,
DB - dyrektywa generujÄ…ca dane,
WORD - operator,
END - dyrektywa sterujÄ…ca pracÄ… asemblera.
Nazwy symboliczne są to ciągi znaków, które mają dla asemblera szczególne znaczenie, nie są słowami kluczowymi i służą do identyfikacji zmiennych, stałych, etykiet (adresów symbolicznych) oraz innych elementów i konstrukcji programu jak: segment, rekord, grupa, parametry formalne itp. (opis tych pojęć znajduje się w dalszej części książki). Wszystkie nazwy, aby były poprawne, muszą spełniać wymagania
- pierwszy znak nazwy jest literą (a...z, A...Z) lub jednym ze znaków specjalnych: @ _ ?; nazwa może być jednoznakowa, jednak pod warunkiem, że nie jest nią pytajnik;
- każdy następny znak może być jednym z ww. lub cyfrą dziesiętną (0...9);
- nazwa może mieć dowolną długość; tylko 31 pierwszych znaków jest rozróżnianych.
Nazwy prawidłowe EW EW1549
DDDDH ?co NUMER 123456 @ 7890
Nazwy nieprawidłowe 'nazwa' OAla ODDDDH ?
NUMER 123456 $_7890 +
powered by
4.2. Podstawowe elementy języka
Z każdą nazwą symboliczną oraz innymi symbolami (np. nazwami rejestrów) s j związane pewne dodatkowe informacje zwane atrybutami, takie jak: przynależność do segmentu, offset, długość w bajtach i inne.
trybuty symboli rejestrów i znaczników
Symbol rejestru |
Atrybut: klasa (ang. class ) |
Atrybut: rozmiar (ang. nze) |
All.BH.CH.DH |
H |
1 bajt |
al.bl.oldl |
L |
I bajt |
ax.bx.cx.dx |
X |
2 bajty |
BP.SP |
P |
2 bajty |
SI.DI |
I |
2 bajty |
CS.DS.SS,ES |
S |
2 bajty |
AF.CF.DF.IF.OI-.PF.SI.TF.ZF |
F |
1 bit |
Atrybuty nazw zmiennych
Z nazwÄ… zmiennej sÄ… zwiÄ…zane trzy atrybuty
Segment informuje jaki jest adres początku segmentu, do którego jest przyporządkowana zmienna.
Offset informuje o odległości (w bajtach) od początku segmentu.
Typ (ang. type ) informuje, czy zmienna jest bajtem, słowem czy podwójnym słowem.
Segment informuje jaki jest adres początku segmentu, w którym jest zdefiniowana etykieta.
Offset informuje o odległości (w bajtach) od początku segmentu.
Dystans informuje, czy odwołania do etykiety (rozkazy skoku) znajdują się wewnątrz tego samego segmentu (NEAR), czy leż występują w innych segmentach (FAR). Atrybut ten powoduje generowanie w czasie asemblacji właściwych rozkazów skoku.
Przynależność (ang. cs-assume ) informacja o nazwie segmentu, w którym etykieta jest zdefiniowana. Atrybut umożliwia generowanie w czasie asemblacji właściwych przedrostków segmentów (ang. segment-prefa-byte ).
W wierszu programu źródłowego może znajdować się
instrukcja właściwa, będąca symbolicznym kodem rozkazu maszynowego procesora, zwana instrukcją;
dyrektywa sterująca pracą asemblera (i nic pozostawiająca śladu w programie wynikowym) bądź pscudoinstrukcja generująca stałe lub deklarująca zmienne, zwana dalej instrukcją; ^
Makroinstrukcja, zamieniana w czasie asemblacji na ciąg instrukcji i dyrektyw, a ostatecznie na ciąg rozkazów maszynowych procesora.