Wpis z mikrobloga

#naukaprogramowania #assembler #wytrzeszczoweasemblery
Lekcja 2.
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.
AL- 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
BL- 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
CL- 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)
DL- młodsze 8 bitów (więc 1 bajt) 16 bitowego rejestru DX, ten rejestr jest stosowany rejestr na dane
Wszystkie 16 bitowe rejestry AX,BX,CX,DX składają się z części młodszej *L i starszej *H
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
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
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.
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 ʕʔ
wytrzzeszcz - #naukaprogramowania #assembler #wytrzeszczoweasemblery
Lekcja 2.
Tema...

źródło: comment_3BTPf2o8DBQW67vhCnUbyuQ1uf5XevUR.jpg

Pobierz
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach