20 2. Mikroprocesory 8086/8088
Znacznik kierunku DF jest wykorzystywany przy wykonywaniu działań na łańcuchach (ciągach słów). Jeżeli ma wartość 1, to przetwarzanie łańcuchów odbywa się przy rosnących adresach, jeżeli jest równy 0 - przy malejących adresach (zob. p.7.3).
Jak już wspomniano procesory 8086/8088 zawierają 20 linii adresowych, co umożliwia zaadresowanie do 1 MB (220 = 1 048 576) pamięci operacyjnej. Mimo 16-bitowej organizacji (a dla 8086 także 16-bitowej zewnętrznej magistrali danych) pamięć ma organizację bajtową. Dla procesora 8088 z 8-bilową magistralą danych taka organizacja pamięci jest korzystna - pamięć o pojemności 1 MB stanowi ciągły obszar wybierany liniami adresowymi A0-A19. Dostęp do 16-bitowego słowa jest związany z koniecznością wykonania dwóch cykli pamięci. W przypadku procesora 8086 pamięć jest podzielona fizycznie na dwa bloki, każdy o pojemności maksymalnie 512 KB (0,5 MB). Jeden blok (ang. lower bank ) jest przyłączony do mniej znaczącego bajtu linii danych (D0-D7) i jest adresowany liniami A1-A19. Blok ten jest wybierany wówczas, gdy bit adresu A0 jest równy zero, czyli dla wszystkich adresów parzystych (ang. even ). Drugi blok (ang. upper bank ) jest przyłączony do linii danych D8-D15 i obejmuje wszystkie adresy nieparzyste (ang. odd ). Jest on wybierany sygnałem sterującym BHE’ (ang. bus high enable ) i podobnie jak pierwszy blok, adresowany liniami A1-A19. Na rysunku 2.5 przedstawiono schematycznie opisany sposób adresowania. Jeżeli BHE’ = 1, to jest zrealizowany dostęp do bloku pamięci z adresami nieparzystymi. Tak więc procesor może mieć dostęp do
- mniej i bardziej znaczącego bajtu 16-bitowego słowa z parzystym adresem pierwszego bajtu (A0 = 0, BHE’ = 0),
- mniej znaczącego bajtu 16-bitowego słowa z nieparzystym adresem lub pojedynczego bajtu z adresem nieparzystym (A0 = 1, BHE' = 0),
- bardziej znaczącego bajtu 16-bitowego słowa z nieparzystym adresem lub pojedynczego bajtu z adresem nieparzystym (A0 = 0, BNE’ = 1).
Adresy
2.5. Organizacja pamięci operacyjnej
Z powyższego wynika, żc dostęp do 16-bitowego słowa w je< możliwy tylko wtedy, kiedy mniej znaczący bajt jest pod parzystym adresem, a bardziej znaczący pod adresem następnym (nieparzystym). Jeżeli słowo rozpoczyna się od adresu nieparzystego, to procesor 8086 mimo swojej 16-bitowej magistrali danych potrzebuje dwóch cykli dostępu do pamięci. Jeżeli zatem przetwarzanie słów dwubajtowych w programie ma odbywać się z maksymalną szybkością, to należy pamiętać o tym, aby pierwszy bajt słowa był umieszczony pod parzystym adresem.
Rozkazy procesorów 8086/8088 umożliwiają przetwarzanie danych o długości 8 bitów (bajt), 16 bitów (słowo) oraz 32 bitów (podwójne słowo). Na rysunku 2.6 przedstawiono sposób zapamiętania danych w pamięci operacyjnej. Podobnie jak w in-
SÅ‚owo
Bardziej znaczÄ…cy bajt Mniej znaczÄ…cy bajt
â–¡
SÅ‚owo
Mniej znaczÄ…cy bajt
Bardziej znaczÄ…cy bajt
Większe adresy
Podwójne słowo
Najbardziej znaczÄ…cy bajt |
Najmniej znaczÄ…cy bajt |
Podwójne słowo
Rys. 2.6. Dane w pamięci operacyjnej
Najmniej znaczÄ…cy bajt
Najbardziej znaczÄ…cy bajt
Większe adresy
nych mikroprocesorach firmy Intel obowiązuje reguła, żc najmniej znaczący bajt danej znajduje się pod adresem wskazanym jako adres całej danej, natomiast kolejne, bardziej znaczące bajty pod następnymi starszymi adresami.
Segmenty pamięci operacyjnej
Pamięć operacyjna mikroprocesorów 8086/8088 jest podzielona na pewną liczbę logicznych segmentów definiowanych przez użytkownika. Segment jest to ciągły obszar (blok logiczny) pamięci operacyjnej o wielkości nic większej niż. 64 KB. Każdy segment