adresowanie asm

0

Witam.

Nie wiem czy dobrze rozumiem poniższe zapisy.

mov byte ptr DGROUP:_Tab1,1 potraktuj zmienną Tab1 jako bajt i skopiuj do niej wartość 1
mov byte ptr [bx],2 - potraktuj miejsce w pamięci o adresie zapisanym w rejestrze bx) jako bajt i skopiuj tam 2
al, byte ptr [bx-1] potraktuj miejsce w pamięci (o adresie zapisanym w rejestrze bx i pomniejszonym o wielkosc bx) jako bajt i skopiuj zawartosc do al - tego nie jestem pewny

Niech mnie ktoś poprawi bo chciałem zapoznać się z podstawami adresowania w assemblerze i ciężko mi to idzie.

0

Przepraszam że tak "chamsko" wrzucę jedynie linka, ale tu jest to ładnie wytłumaczone:
http://assembler.ryszki.prv.pl/mov.htm

0

Dziękuje.Jeszcze mam takie jedno nurtujące mnie pytanie.

mov byte ptr es:[bx],1 w es jest segment w bx jest offset - mam taki zapis rozmieć tak ,że w miejscu w pamięci zawartym pod adresem segment es i offset [bx] (nie to co jest w bx tylko to co jest pod adresem który znajduje się w bx) przekopiuje 1.

0

Mógłby mi ktoś jeszcze odpowiedzieć. Byłbym wdzięczny.

0

traktuje komórkę pamięci o adresie es:[bx] jako JEDEN bajt i zapisuje do niej wartość 1 (binarnie: 00000001)

0

Dlaczego bx jest w nawiasach kwadratowych jak żeby dostać się do komórki pamięci wystarczy podać segment:offset a nie segment:[offset]

0

Podaje jeszcze z jakiego dialektu korzystasz. Nasm, masm... inny ?

Zresztą odpowiedz na swoje pytanie masz w linku podanym powyżej "Adresowanie bezpośrednie".

PS. Co ma wspólnego assembler z c++?

0

Przeglądam sobie jak z języka C kompilator tłumaczy sobie pewne rzeczy na assembler. TASM ponieważ korzystam z Borlanda

0

jesli jest dana wartosc powiedzmy rejestr bx bez nawiasow wtedy odwolujemy sie do samej wartosci ktora jest przechowywana w rejestrze bx, natomiast jesli odwolujemy sie korzystajac z nawiasow [bx] to wtedy odwolujemy sie do slowa o ADRESIE zawartym w bx(slowa bo akurat bx ma wielkosc 16 bitow).

wiec wybierajac es:[bx] odwolujemy sie do segmentu es + przesuniecie o wartosc "wyłuskana" z pod adresu bx.

Tu masz to dosyc dobrze pokazane. Ja nie potrafie tlumaczyc ;)

http://pl.wikibooks.org/wiki/Asembler_x86/Zmienne/NASM

0

Dziękuje :)

0

To ja tylko tak w ramach przypomnienia - przecież wszystkie możliwe sposoby adresowania są pokazane w manualu intela :) Jak czegoś tam nie będzie to znaczy że tak się nie da i koniec.

0

Dziękuje o przypomnienie.Ale w manualu ciężko znaleźć np takie rzeczy co zrobi np

or al,al 
jne short @2@86
 

jne przeskoczy do etykiety gdy flaga ZF=0. Ale nie mogę nigdzie znaleźć czy w każdym wypadku przy operacji or ta flaga zostanie wyzerowana.

0

flagi ZF SF i chyba PF sa zalezne od wyniku operacji or.

Wynik jest przechowywany w lewym operandzie. Jesli wynikiem operacji bedzie zero ZF zostanie zmieniona na 1 jesli rozne od 0 to bedzie 0.

0
usm_auriga napisał(a)

Ale w manualu ciężko znaleźć np takie rzeczy co zrobi np
Bardzo ciężko...

Volume 2B napisał(a)

The OF and CF flags are cleared; the SF, ZF, and PF flags are set according to the result. The state of the AF flag is undefined.

0

Mam jeszcze jedno pytanie. Przypuśćmy ,że na stosie po wywołaniu funkcji znajdują się wsk2,wsk1,ip,bp funkcja konczy swoje działanie zostaje ściągnięte bp i ip. Zostaje wykonana operacja add sp,4 i wskaźnik będzie pokazywał na początek stosu. Co stanie się z wartościami wsk2 i wsk1 ?? One dalej tam będą a podczas kolejnych popów zostaną nadpisane??

0

Tak

1 użytkowników online, w tym zalogowanych: 0, gości: 1