Forum www.ispwsznysa.fora.pl Strona Główna www.ispwsznysa.fora.pl
Informatyka Stosowania PWSZ NYSA
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

adresacja asembler

 
Napisz nowy temat   Odpowiedz do tematu    Forum www.ispwsznysa.fora.pl Strona Główna -> SW = Systemy wbudowane
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Rafał
Nowicjusz



Dołączył: 02 Gru 2007
Posty: 13
Przeczytał: 0 tematów

Skąd: Goświnowice

PostWysłany: Sob 8:15, 20 Lut 2010    Temat postu: adresacja asembler

Tryby adresowania

Tryb adresowania wyznacza sposób w jaki dostajemy się do adresu, czyli położenia naszego operandu (operandu czyli argumentu danego rozkazu). Na początek może Ciebie przerazić ilość tych trybów jednak zauważ, że wszystkie są dość do siebie podobne. Dodatkowo niektóre tryby są jakby modyfikacją poprzednich, jak na przykład trzy ostatnie. Czasem wystarczy tylko zmienić zapis operandu i mamy zupełnie inny tryb adresowania. Pisząc program nieraz będziesz używał z któregoś z sposobów określenia położenia operandu choć może sam nawet nie będziesz o tym wiedział, ani tym bardziej jak on się nazywa. Co więcej spora część z tych trybów jest całkiem intuicyjna, lecz czasem trzeba uważać na małe "kruczki".

Adresowanie rejestrowe
(wartość operandu zawarta jest w jakimś rejestrze ogólnego przeznaczenia)

mov ax, bx

Adresowanie bezpośrednie (nazywane także natychmiastowym)
(wartość danego operandu jest już podana)

mov ax, 1

lub

mov ax, 010Ch

Adresowanie pośrednie
(wartość dla danego rozkazu znajduje się w komórce o adresie podanym w operandzie)

mov ax, [102h]; Adres końcowy to DS:0 + 102h

Wartość w tych dwóch nawiasach jest odpowiednikiem "to co znajduje się w komórce o adresie 102h"). Jeżeli programujesz lub programowałeś w języku C bądź C++ to ten sposób adresowania jest podobny do operatora wyłuskania. Oto odpowiednik w C(++):

int ax = *0x102;

Adresowanie pośrednie z przemieszczeniem
(używa się operacji arytmetycznych na danym adresie)

byte_tbl db 12,15,16,22,..... ;tablica bajtów
mov al,byte_tbl+2
mov al,byte_tbl[2] ;to samo lecz w innej formie

Co w C/C++ byłoby niemal takie same. Aby dostać się do elementu położonego o dwa bajty od początku należy dodać 2 lub odwołać się do elementu trzeciego (licząc od zera) jak w wspomnianych językach wysokiego poziomu.

Adresowanie rejestrowe, pośrednie
(w danym rejestrze zawarty jest adres komórki z pożądaną wartością)

mov ax,[di]

Nie myl tego z adresowaniem rejestrowym. Zobacz przykład:

mov dx,si ;skopiuj do DX wartość rejestru SI
mov dx,[si] ;skopiuj do rejestru DX coś co jest w komórce pamięci o adresie zapisanym w SI. Jeśli SI
;ma np. wartość 0D7h to do rejestru DX zostanie skopiowane to, co znajduje się właśnie w tej komórce

Rejestry używane do tego typu adresowania to: BX, BP, SI, DI

Adresowanie bazowe z przemieszczeniem

mov ax, arr[bx]; gdzie BX jest przemieszczeniem wewnątrz tablicy ARR

Ten tryb adresowania jest analogiczny do docierania do danego elementu tablicy w C. Porównaj sobie powyższy kod z poniższym:

int AX,BX; //nazwa zmiennej taka aby kod był jak najbardziej podobny do asemblerowego
int arr[4]= {6,5,34,22}; //zakładam oczywiście że BX ma wartość od 0 do 3
AX = arr[BX];

Adresowanie bazowo-indeksowe

mov ax,[bx + di]

Przykładowo, jeśli mówimy o tablicy, BX jest początkiem tablicy (zawiera adres jej pierwszego elementu), zaś DI jest indeksem w danej tablicy.
Adresowanie bazowo-indeksowe z przemieszczeniem

mov ax,[bx + di + 10]
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Siwy
Gaduła



Dołączył: 02 Gru 2007
Posty: 93
Przeczytał: 0 tematów


PostWysłany: Sob 8:34, 20 Lut 2010    Temat postu:

[link widoczny dla zalogowanych]
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Kuba
Początkujący



Dołączył: 21 Sty 2008
Posty: 18
Przeczytał: 0 tematów

Skąd: Nysa

PostWysłany: Sob 8:34, 20 Lut 2010    Temat postu:

Może się przyda:

[link widoczny dla zalogowanych]
[link widoczny dla zalogowanych]
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.ispwsznysa.fora.pl Strona Główna -> SW = Systemy wbudowane Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin