Assembly - początki, kilka pytań

0

Witam, uczę się c++ od ok. roku, lecz teraz chciałbym przejść na assembly.
Nie pytam się czy jest sens, bo już przerabiałem to przez cały dzień i wywnioskowałem że jest sens.

Tylko że kiedy przeczytałem pierwszą część jakiegoś lepszego kursu z neta, strasznie wydaje mi się to zagmatwane.
Tak jak w kursach c++ wszystko rozumiałem, dosłownie nic mi nie stawało na przeszkodzie aby pogłębiać wiedzę, tak tutaj nie potrafię zrozumieć prawie nic.
Chciałbym się dowiedzieć co muszę się jeszcze nauczyć żeby po prostu ogarnąć to o czym się mówi w assemblerze.
Nie wiem, o co chodzi z tymi rejestrami, po co to komu i co to wgl. znaczy.

RAX (64 bity) = EAX (młodsze 32 bity) + starsze 32 bity,
EAX (32 bity) = AX (młodsze 16 bitów) + starsze 16 bitów,
AX = AH (starsze 8 bitów) + AL (młodsze 8 bitów)

Autor nie wytłumaczył o co chodzi z tymi znaczkami, jakby można było coś z tego wywnioskować.
Jak dla mnie jest to, jak to mój dziadek mówi - Ruskie szyfry.

Mam wrażenie że czegoś brakuję w mojej wiedzy, byłbym wdzięczny jakbyście mi wytłumaczyli "Od której strony to ugryźć"
Z góry dziękuje za pomoc.

0

W asemblerze operacje mozesz wykonywać tylko na rejestrach procesora. To znaczy ze żeby zrobić np. coś co przypominałoby C++

//mamy zmienne int a,b;
int wynik = a+b;

Musiałbyś:

  • wczytać wartość zmiennej a do rejestru
  • wczytać wartość zmiennej b do rejestru
  • wykonać add na tych rejestrach
  • wpisać wynik z rejestru w którym jest wynik do pamięci
    Wyglądałoby to na przykład tak (w 8086, schematycznie, mogą byc błędy):
mov ds, seg zmiennaA ;segment danych ustawiamy na segment gdzie jest zmiennaA

mov ax, ds:[zmiennaA] ;pobieramy wartość zmiennej do rejestru AX
mov cx, ds:[zmiennaB] ;pobieramy wartość zmiennej do rejestru CX

add ax,ac ;dodajemy wartości z rejestrów AX i CX i wynik zapisujemy w AX
mov ds:[wynik],ax ;zapisujemy wynik w pamięci

Te dziwne znaczki to są właśnie rejestry procesora. Każdy rejestr dzieli się na pewne fragmenty, bo niekoniecznie potrzebujesz używać całego rejestru.

0

Nie pękaj, posiedź na tym dłużej. W przypadku asemblera nie gramatyka jest najważniejsza, a kontekst. Dlatego warto uczyć się z książki, a nie sieciowych wypierdów.

0

Przyznaję się że c++ też się uczyłem z książki,
mógłbyś podać jakiś dobry tytuł, który by ogarną totalny lajk z tego języka?

0

Myślę ze to na pewno Ci pomoże :)

http://rudy.mif.pg.gda.pl/~bogdro/dos/

i książka The art of assembly by Randall Hyde

0

http://helion.pl/ksiazki/asembler-sztuka-programowania-wydanie-ii-randall-hyde,asesz2.htm

Ta książka opiera swe wywody o HLA. Sprzyja osobom, które ogarniają Pascala czy C, bo na wstępie otrzymasz bardziej przyjazne API oraz kilka konstrukcji wyższego poziomu. Książka nie jest trudna, lecz cena trochę poraża :/

0

Cholinek
Z tego kursu co podałeś próbowałem się uczyć, ale jest strasznie źle napisany, ponieważ z jednej strony autor zakłada że jest on dla tych co nie mieli z tym językiem nigdy styczności, a drugiej strony mówi o tym, czego wcześniej nie wytłumaczył.

Ta książka którą podał just_like_that, wydaje się obiecująca, myślę że niedługo ją kupię, ale do tego czasu muszę się poduczyć z internetu.

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