MENU  
  Strona startowa
  Newsletter
  Rejestracja
  LOGOWANIE
  Forum
  Systemy
  WAREZ
  Chomikuj.pl
  Darmowy Hosting
  GRAFIKA
  Baner Flash
  Alfabet HTML
  Asembler Kurs
  => Czas i data
  => ADRESOWANIE PAMIĘCI
  => CZAS I RUCH NA EKRANIE
  => DYREKTYWY ASSEMBLERA
  => OBSŁUGA GŁOŚNIKA
  => GENERATOR LICZB LOSOWYCH
  => REJESTRY PROCESORA
  => PĘTLE
  => SZABLON PROGRAMU
  PIERWSZY RAZ HTML
  Hakerstwo
  Świat WWW
  Serwery Proxy
  Galeria
  GRY
  SKÓRKA DO GG
  Lockerz.com
  SKLEP
...
ADRESOWANIE PAMIĘCI

ADRESOWANIE PAMIĘCI


Większość operacji w komputerze są to operacje przesyłania z komórek pamięci oraz przesyłania danych do komórek pamięci i rejestrów Pamięć komputera IBM PC została podzielona na segmenty zaczynające się co 16B i zajmują FFFFh bajtów pamięci. Jak łatwo zauważyć segmenty te zachodzą na siebie.Aby dostać się do odpowiedniego bajtu należy najpierw podać nr segmentu a potem przesunięcie względem początku tego adresu. Adres taki nazywa się adresem logicznym,który ma postać segment:offset.
Numer segmentu(baza,początek segmentu) powinien znajdować się zawsze w rejestrze segmentowym.Wartość przesunięcia(offsetu , przemieszczenia) nazywamy adresem efektywnym , bazuje on na położeniu komórki pamięci w segmencie licząc od początku segmentu.
W komputerze rozróżniamy jeszcze adres fizyczny który określa stan 20-bitowego wektora zewnętrznego lokalizującego 1MB komórek pamięci czyli komórki o adresach od 00000H do FFFFFh.Inaczej mówiąc adrs fizyczny to numer komórki wysyłany na magistralę adresową komputera.Jedna komórka pamięci może mieć tylko 1 adres fizyczny.
Przeliczanie adresu logicznego na fizyczny pokażę na przykładzie:

Przykładowy adres logiczny 27BC:A503H
27BC0
0A503
-----
320C3
Adres fizyczny tej komórki pamięci to 320C3H

Analogicznie pokaże jak z adresu fizycznego zrobić logiczne:

Przykładowy adres fizyczny BC5C2H
Adres ten można przedstawić w międzyinnymi takich adresach logicznych:
6B5C:0002H
6000:B5C2H
6424:7382H
5C5C:F002H

Powodami wprowadzenia adresów segmentowych są:

    • pierwsze procesory były 16 bitowe i wygodnie było przetwarzać adres w postaci 2 liczb 16 bitowych
    • Adresy segmentowe pozwalają na łatwą relokację(przemieszczenie) programu w pamięci



Pamiętaj!!!
Do rejestru segmentowego przenosic mozesz jedynie zawartosc rejestrow ogolnego przeznaczenia!

Do pamieci mozesz przenosic tylko wartosci z polowek rejestrow ogolnego przeznaczenia(lub ze zmiennych typu byte)!




SPOSOBY PRZESYŁANIA DANYCH

Do kopiowania danych z jednego miejsca, do drugiego służy instrukcja MOV. W tej instrukcji zawartość drugiego operanda jest kopiowana do pierwszego, dlatego nie można w miejsce pierwszego wstawić stałej. Nie można również kopiować stałej do rejestru segmentowego, ani zmiennej do zmienne. W tych wypadkach trzeba użyć dodatkowych rejestrów, np.:

   TAK WOLNO

MOV AH,10 ; stała (dziesiętnie) do rejestru 8-bitowego
MOV AX,123H ; stała (szesnastkowo) do rejestru 16-bitowego
MOV AX,BX ; załadowanie wartości rejestru BX do rejestru AX
MOV CX,[BX] ; załadowanie do rejestru CX słowa o adresie zawartym w BX
MOV AX,ES:10H ; Załadowanie do rejestru AX słowa o adresie , którego segment jest w ES a offset jest równy 10H.
MOV AX,SEG ETYK ; adres segmentu do rejestru
MOV AX,OFFSET ETYK ; offset do rejestru
MOV AH,zmienna[SI+8]; załadowanie do rejestru AH bajtu z pod adresu zmienna + zawartość rejestru SI + 8.
MOV DS,BX;


TAK NIE WOLNO
MOV AH,DX ; niezgodność typów
MOV DS,4 ; stała do rejestru segmentowego
MOV Liczba1,Liczba2; zmienna do zmiennej
MOV IP,BX; zmiana rejestru IP



MOVSB, MOVSW, MOVSD


Wszystkie te instrukcje służą do kopiowania łańcuchów pomiędzy dwoma miejscami pamięci. Pierwsza z nich (MOVSB) operuje na bajtach (przesyła bajt po bajcie), druga (MOVSW) na słowach (kopiuje po dwa bajty jednocześnie) i trzecia na słowach podwójnych, czyli przesyła po cztery bajty. Wszystkie te instrukcje potrzebują tyle samo taktów procesora, dlatego jeśli kopiujemy dużo danych, używajmy MOVSD.

W parze DS:SI podajemy adres źródłowy, czyli skąd będziemy kopiować dane, natomiast do ES:DI podajemy adres docelowy. Sama instrukcja (MOVSB...) kopiuje tylko jeden "pakiet" (bajt, słowo lub słowo podwójne). Kiedy chcemy skopiować więcej informacji poprzedzamy instrukcję przedrostkiem REP. W rejestrze CX wówczas podajemy ile danych chcemy skopiować (ile bajtów, słów lub słów podwójnych).

Jeśli znacznik D jest ustawiony, rejestry SI i DI są zmniejszane, a kiedy jest wyzerowany, są zwiększane. Zwiększenie / zmniejszenie jest o tyle, ile kopiujemy danych, czyli albo 1, 2 lub 4.

Oto przykładowy fragment programu kopiujący tekst:


....

NAPIS1 DB "To jest zmienna lancuchowa"

NAPIS2 DB "Zmienna lancuchowa w assemblerze"

....

MOV AX,SEG NAPIS1;przepisywanie adresu segmentu w którym znajduje się zmienna do AX

MOV DS,AX

MOV ES,AX

MOV SI,OFFSET NAPIS1

MOV DI,OFFSET NAPIS2

MOV CX,29

REP MOVSB

..

 

 

LODSB, LODSW, LODSD



Ładują do rejestru (LODSB - AL, LODSW - AX, LODSD - EAX) dane znajdujące się pod adresem wskazanym przez DS:(E)SI. Tak samo, jak w MOVS x jeśli znacznik D jest ustawiony nastąpi zmniejszenie (E)SI, a kiedy wyzerowany, zwiększenie. Zmiana wartości (E)SI jest o 1, 2 lub 4. Kiedy zamierzamy pobierać więcej danych poprzedzamy instrukcję przedrostkiem REP i w CX wpisujemy ilość danych do pobrania (bajtów, słów lub słów podwójnych).

Poniżej znajduje się fragment przykładowego programu, który wyświetla napisy zakończone kodem 0:



 

....

 

NAPIS1 DB "Zmienna lancuchowa",0

 

....

 

MOV AX,SEG NAPIS1

 

MOV DS,AX

 

MOV SI,OFFSET NAPIS1

 

ETYK1:

 

LODSB

 

CMP AL,0

 

JE KONIEC

 

MOV AH,2

 

MOV DL,AL

 

INT 21H

 

JMP ETYK1

 

KONIEC:

...



STOSB, STOSW, STOSD


Wykonują operacje przeciwną do LODS x. Wysyłają pod adres DS:(E)DI wartość rejestru AL (STOSB), AX (STOSW) lub EAX (STOSD). Przy każdej operacji, jeśli znacznik D jest wyzerowany następuje zwiększenie DI, a kiedy ustawiony zmniejszenie. Jeśli chcemy przesłać więcej danych poprzedzamy instrukcje przedrostkiem REP i w CX wpisujemy liczbę wysyłanych danych. Stosowane jest często w połączeniu właśnie ze LODS x np. do szyfrowania danych. Bajt jest pobierany (LODS x), kodowany (np. XOR) i wysyłany w to samo miejsce (STOS x).



LAHF i SAHF

Instrukcja LAHF pobiera do rejestru AH młodszy bajt rejestru znaczników. SAHF jest natomiast czymś odwrotnym, tzn. modyfikuje młodszy bajt tego rejestru zgodnie z zawartością rejestru AH. Możemy więc dzięki niemu ustawić odpowiednie znaczniki.



SPOSOBY ADRESOWANIA PAMIĘCI


Adresowanie bezpośrednie

Tryb adresowania bezpośredniego to adresowanie natychmiastowe, argumentem rozkazu jest adres komórki pamięci.
np.MOV DS:[xxxx],AX;xxxx - offset adresu segmentowego

Przesyłanie bezadresowe

Przesyłanie bezadresowe polega na przesyłaniu danych między dwoma rejestrami.
np.MOV DS,AX;
MOV AH,CL

Adresowanie indeksowe

W tym trybie adresowania , offset adresu jest złożony jako suma adresu w rejestrze indeksowym (SI,DI,BP) i argumentu bezpośredniego.
np.MOV DS:Tablica[SI+0],AX;dostęp do 0 elementu tablicy
MOV DS:Tablica[DI+1],AX;Służy do wybierania elementów tablic jednoelementowych(wektory), w tym przypadku do elementu o numerze 1;

Adresowanie bezpośrednie rejestrowe

W adresowaniu bezpośrednim rejestrowym,jeden rejestr(zwykle BX) jest wskaźnikiem adresu komórki pamięci.
np.MOV DS:[BX],AX;przesyłanie zawartości rejestru AX pod adres DS:[BX] MOV CX,DS:[BX];
Pobranie do rejestru CX zawartości adresu DS:[BX]

Adresowanie pośrednie rejestrowe

Adresowanie pośredniego rejestrowe polega na odczycie offsetu adresu komórki pamięci z tablicy. Jako numer pola w tablicy wykorzystujemy rejestry SI,DI,BX,BP.
np.MOV DS:Tablica[Si],AX;

Adresowanie pośrednie indeksowe bazowe

Adresowanie pośrednie bazowo-indeksowe to adresowanie łączące adresowanie indeksowe i rejestrowe.
np.MOV DS:Tablica[SI][BX],AL;BX - rejestr bazowy SI- rejestr indeksowy
MOV DS:Tablica[SI+12][BX],AX;
MOV DS:tablica[DI][BX+5],AX;




 
Teraz 9986 odwiedzający (24465 wejścia)
Logowanie  
 
Nazwa użytkownika:
Hasło:
 
 
 
 
 
   
Ta strona internetowa została utworzona bezpłatnie pod adresem Stronygratis.pl. Czy chcesz też mieć własną stronę internetową?
Darmowa rejestracja