Witam
Pytanie dotyczy poprawności mojego rozumowania.
Mam podany adres fizyczny w postaci dziesiętnej np \(\displaystyle{ 20}\). Adres fizyczny obliczamy mnożąc wartość rejestru segmentowego przez \(\displaystyle{ 16}\) i następnie dodając offset. Zatem parę segment:offset charakteryzującą adres fizyczny \(\displaystyle{ 20}\) możemy przedstawić w postaci:
\(\displaystyle{ 1:4 \left( 1 \cdot 16 +4\right)}\)
Segmenty nie są rozłączne więc prawidłowa wydaje się też para:
\(\displaystyle{ 0:20 \left( 0 \cdot 16 +20\right)}\)
Czy otrzymane pary są poprawne ? Czy można zapisać ten adres fizyczny jeszcze za pomocą innych par segment:offset?
[8086] Adres fizyczny, para segment:offset
-
- Użytkownik
- Posty: 64
- Rejestracja: 16 wrz 2014, o 14:15
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 20 razy
[8086] Adres fizyczny, para segment:offset
Hmm przeczytałem teraz o przesunięciu wewnątrz danego segmentu więc pewnie nie więcej niż 16, tak ?
-
- Użytkownik
- Posty: 64
- Rejestracja: 16 wrz 2014, o 14:15
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 20 razy
[8086] Adres fizyczny, para segment:offset
Intel 8086
Czyli jedynym poprawnym rozwiązaniem jest :
\(\displaystyle{ 1:4 \left( 1 \cdot 16 +4\right)}\)
Czy dla większych adresów działa to tak samo czy wtedy jest większa ilość takich par?
Czyli jedynym poprawnym rozwiązaniem jest :
\(\displaystyle{ 1:4 \left( 1 \cdot 16 +4\right)}\)
Czy dla większych adresów działa to tak samo czy wtedy jest większa ilość takich par?
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[8086] Adres fizyczny, para segment:offset
Teraz jest konkret. Zatem zaglądamy do wiki:
Because of the way the segment address and offset are added, a single linear address can be mapped to up to 4096 distinct segment:offset pairs. For example, the linear address 08124h can have the segmented addresses 06EFh:1234h, 0812h:0004h, 0000h:8124h, etc. This could be confusing to programmers accustomed to unique
-
- Użytkownik
- Posty: 64
- Rejestracja: 16 wrz 2014, o 14:15
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 20 razy
[8086] Adres fizyczny, para segment:offset
Ok, ale dlaczego offset może tutaj być tak duży skoro kilka linijek wyżej ograniczyliśmy się tylko do offsetu o maksymalnej długości 16 ?
-
- Moderator
- Posty: 2828
- Rejestracja: 15 cze 2008, o 15:45
- Płeć: Mężczyzna
- Lokalizacja: Seattle, WA
- Podziękował: 3 razy
- Pomógł: 356 razy
[8086] Adres fizyczny, para segment:offset
Właśnie mnie zapytałeś, dlaczego to Ty przyjąłeś ograniczenie do szesnastu. Nie podałeś na początku architektury, więc zapytałem o długość przesunięcia, a Ty w odpowiedzi podałeś \(\displaystyle{ 16}\).
Jeżeli zaś chodzi o adresowanie w 8086: adres wyznaczają dwie liczby szesnastobitowe, pierwszą (segment) mnoży się przez \(\displaystyle{ 16}\), następnie do wyniku dodaje się drugą (przesunięcie wewnątrz segmentu). W tej architekturze jak najbardziej dwie różne pary adresów mogą wskazywać (i bardzo często tak jest) na tę samą komórkę w pamięci.
Jeżeli zaś chodzi o adresowanie w 8086: adres wyznaczają dwie liczby szesnastobitowe, pierwszą (segment) mnoży się przez \(\displaystyle{ 16}\), następnie do wyniku dodaje się drugą (przesunięcie wewnątrz segmentu). W tej architekturze jak najbardziej dwie różne pary adresów mogą wskazywać (i bardzo często tak jest) na tę samą komórkę w pamięci.