Professional Documents
Culture Documents
MNAV nPC1
MNAV nPC1
1 1
Konkrétní místo v segmentu je určeno pouze tzv. relativní adresou – offsetem. Způsob
adresování ukazuje Obrázek 1.2.
ROSTOUCÍ OPERAČNÍ
ADRESA
PAMĚŤ
B.A.
Obecně se pro adresování např. kódového segmentu použije bázová adresa (B.A.)
uložená v kódovém segmentovém registru CS. Podobně je tomu i u ostatních segmentů.
Konkrétní adresa je pak určena pouze její „vzdáleností“ od báze daného segmentu relativní
adresou – offsetem. Adresa je tedy specifikována dvousložkově, jednou složkou je obsah
odpovídajícího segmentového registru a druhou složkou je offset v rámci odpovídajícího
segmentu.
„Vytváření“ hodnoty offsetu je dáno způsobem adresování a je podrobně uvedeno
v přednáškách.
0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2
PAMĚŤ
POČÁTEK SEGMENT
SEGMENTU
1235 : 0000h
Vždy, když je v logické adrese offset roven 0, tak je na této adrese počátek (báze)
segmentu. Počátek dalšího segmentu tedy může existovat každých 16 adres v paměti. Takže
fyzické adrese 12350h odpovídá kromě logické adresy 1234:0010h, také adresa 1235:0000h a
následně dle tohoto principu také další logické adresy.
Výpočet fyzické adresy:
1. Posun binárního obsahu segmentového registru o 4 bity vlevo (v hexadecimálním
kódu posun o 1 platnou číslici vlevo).
2. Přičtení offsetu.
12340h
0022h
12362h Fyzická adresa
ŠÍŘKA 8 BITŮ
ULOŽENÁ
HODNOTA
F1h 1 1 1 1 0 0 0 1 b
ADRESA
Fh 1h
1111b 0001b
Do jedné buňky paměti je možné uložit právě 8 bitů (1 byte). Obrázek 1.4 ukazuje
způsob uložení 1 byte v paměti a souvislost mezi hexadecimálním a binárním popisem
uložené hodnoty. Je samozřejmě nutné pracovat i s operandy, které mají větší rozsah, než
umožňuje popis pomocí 1 byte.
Typy operandů:
1. Čísla – celá (se znaménkem i bez znaménka).
8 bitů INTEGER BYTE
16 bitů INTEGER WORD
32 bitů INTEGER DOUBLEWORD
2. Znaky – kód ASCII (American Standard Code for Information Interchange), znak
je vyjádřen číslem, které vyjadřuje pořadí v tabulce 0 – 255 (definováno právě
jedním Bytem).
3. Řetězce znaků – souvislý soubor znaků, které jsou jednotlivě popsaný kódem
ASCII
INSTRUKCE:
[návěští:] _ název instrukce _ [operandy] _ [;komentář]
DIREKTIVA (PSEUDO-INSTRUKCE):
[identifikátor] _ název direktivy _ [parametry] _ [;komentář]
Direktivy DB, DW, DD, DQ, DT – definují název (identifikátor), datový typ adresy a
výchozí hodnotu dat.
[name] _ dX _ value1[,value2]
name – jméno (identifikátor) adresy
value – hodnota, která bude na adrese uložena po spuštění programu. Je možné
zadávat více hodnot najednou, hodnoty se oddělují čárkou. Každá zadaná
hodnota zabírá podle nadefinovaného typu odpovídající počet buněk
(bytů) paměti.
dX – volba datového typu: db – 1B, dw –2B, dd – 4B, dq – 8B, dt – 10B
Direktiva TIMES – opakování stejné hodnoty nebo specifické instrukce, příklad uveden
pro použití s direktivou dX
name _ times _ value1 _ db _ value2
name – jméno (identifikátor) adresy
value1 – počet opakování
value2 – opakovaná hodnota
od adresy se jménem name bude směrem k vyšším adresám value1 krát
opakována hodnota value2
Direktiva STRUC (párová) – definuje strukturu – sloučí definici více názvů a typů
adres do struktury, využívá se pro násobné definování stejné struktury v paměti.
struc _ name
[name1] _ dX _ value1[,value2]
[name2] _ dX _ value3[,value4]
[name3] _ dX _ value5[,value6]
…
…
endstruc
name – jméno (identifikátor) struktury
namex – jména (identifikátory) adres, viz direktiva DB, DW, DD, DQ, DT,
Položka struktury se pak v kódu volá konvencí name.namex.