Lekcja Assemblera 2

in polish •  7 years ago 

Lekcja 2.

comment_3BTPf2o8DBQW67vhCnUbyuQ1uf5XevUR.jpg

Temat: Podstawowe bloki procesora i pętla rozkazowa

Po poprzedniej lekcji powinieneś wiedzieć jak wygląda podstawowy komputer.Dziś popatrzymy na procesor intela 8086. Tego staruszka każdy z nas ma w swoim PC. Z mojej wiedzy wynika że aż do Core-i Intel budził się z opuszczoną 20 linią adresową, a więc mógł zaadresować tylko 1MB pamięci operacyjnej. (Jako ćwiczenie policz na ile kombinacji można zapisać 0 i 1 na 20 pozycjach.) Ma to historycznie uzasadnienie jeszcze w systemie MS-DOS gdzie to programiści, aby program działał szybciej przeskakiwali z adresów wysokich na niskie poprzez przekręcenie liczników. Aby móc zaadresować więcej trzeba było wcisnąć na klawiaturze nieistniejący klawisz i wtedy procesor podnosił 20 linię adresową i dalej pracował z większą pamięcią. Tą ciekawostką rozpoczniemy, więcej szczegółów jak to się dzieje że klikam power i mogę cieszyć gębę do wykopu, a więc jak komputer się uruchamia podam przy innej okazji. A teraz zobaczmy z czego składa się procesor.

Pomyślmy, co by się przydało.

Fajnie jak by nasz procesor umiał liczyć jak kalkulator, jakieś dodawanie, odejmowanie,mnożenie może itd..
Blokiem procesora który się tym zajmuje jest arytmometr lub z angielskiego ALU (arytmtical logical unit)

Fajnie jak by nasz procesor mógł przechować wyniki
Blokiem procesora który się tym zajmuje są rejestry, bardzo mała ale bardzo szybka pamięć. Coś jak żółte karteczki na biurku. Rejestry są oczywiście różne i tu opiszę te podstawowe które będziemy spotykać w każdym nowszym intelu jedynie troszkę poszerzone lub nie używane, ale nadal będące na miejscu.

AH/AL

Starsze/młodsze 8 bitów (więc 1 bajt) 16 bitowego rejestru AX, ten rejestr jest zwyczajowo nazywany akumulatorem i powinien być używany głównie do obliczeń, to do niego zwyczajowo powinno się wpisywać wyniki z ALU

BH/BL

Starsze/młodsze 8 bitów (więc 1 bajt) 16 bitowego rejestru BX, ten rejestr jest nazywany rejestrem bazowym, stosuje się go zwyczajowo przy obliczaniu adresu

CH/CL

starsze/młodsze 8 bitów (więc 1 bajt) 16 bitowego rejestru CX, ten rejestr jest używany głównie jako licznik przy pętlach (counter)

DH/DL

Starsze/młodsze 8 bitów (więc 1 bajt) 16 bitowego rejestru DX, ten rejestr jest stosowany rejestr na dane

BP (Base Pointer )

16 bitowy rejestr używany głownie do przechowywania wartości rejestru SP, co bardzo ułatwia programowanie. Zobaczymy to na przyszłej lekcji.

SI (Source Index )

16 bitowy rejestr używany głownie przez operacje do kopiowania bloków danych

DI (Destination Index)

16 bitowy rejestr używany głownie przez operacje do kopiowania bloków danych

SP (Stack Pointer)

16 bitowy rejestr wskazujący na wierzchołek stosu, czym dokładnie jest stos powiemy sobie potem, teraz starczy że wiesz że stos zachowuje się dokładnie tak samo jak stos kartek
Wszystkie powyższe rejestry mogą być używane jako argumenty rozkazów arytmetycznych, na uwagę zasługuje fakt że rejestr SP powinien być wyrównany do wielkości słowa używanego przez procesor.

Procesory i386 mają jeszcze 32 bitowe wersje 16 bitowych rejestrów ze swoich poprzedników, ich nazwy to nazwy rejestrów 16bitowych poprzedzone literą E. Podobnie 64 bitowe procesory AMD64 mają rejestry 64bitowe poprzedzone literą R (np RAX)
oraz dodano 8 64 bitowych rejestrów od R8 do R16.

Na rysunku mamy jeszcze ES CS SS DS które są rejestrami segmentowymi, były one dawno temu używane do adresowania, dziś jednak nie są używane a próba ich zmiany skończy się wyjątkiem nielegalnej instrukcji i zatrzymaniem programu.spotkamy się z nimi podczas pisania programu pod DOS'a by zrozumieć jak komputer gada ze sprzętem.Na rysunku jest jeszcze rejestr FLAGS tam procesor na poszczególnych bitach trzyma informacje potrzebne mu do działania, np czy wynik ostatniego działania to zero czy nie czy ostatni rozkaz przepełnił wynik, czy można mu aktualnie przeszkadzać czy raczej mamy spadać nawet jak mamy przerwanie. (przerwania to kolejna rzecz jaką zobaczymy pod DOSem bo tam najłatwiej ) No i ostatni ale ekstremalnie ważny rejestr IP to on mówi procesorowi co ma teraz robić i trzyma adres instrukcji do wykonania.

I tutaj dochodzimy do tego jak procesor wykonuje swoje zadanie, a więc jak wykonuje programy.

  1. Załaduj rozkaz spod adresu wskazywanego przez IP
  2. Zwiększ wartość rejestru IP o załadowaną ilość bajtów
  3. Zdekoduj rozkaz
  4. Załaduj parametry z pamięci lub rejestrów
  5. Wykonaj rozkaz
  6. Zapisz wynik we wskazanym miejscu
  7. Przejdź do punktu 1.

Zwiększenie wartości IP przez wykonaniem rozkazu jest konieczne aby można było zrealizować rozkazy skoku.

Po tej lekcji powinieneś pamiętać algorytm wykonywania rozkazów oraz jakie rejestry są dostępne dla programisty. Następna lekcja skupi swoją uwagę na wielkościach danych i tam sobie powiemy czym jest bajt,słowo,podwójne,słowo. Pierwszy program już niedługo nie martwcie się

No i tego, coś nie jasne, mam błąd czy coś? pisz w komentarzu nie krępuj się poprawimy ʕ•ᴥ•ʔ

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Congratulations @wytrzeszcz! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of posts published

Click on any badge to view your own Board of Honnor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!