Lekcja Assemblera 1
Lekcja 1.
Temat: Ogólnie z czego składa się komputer.
Do szczegółów jak komponenty naszego komputera ze sobą oddziałują jeszcze wrócimy. Najprostszy komputer to maszyna Turinga. Bardzo długa taśma i głowica, która na podstawie danych na tej taśmie zmienia zawartość owej taśmy. Brzmi bardzo nie realnie?
I tu się mylicie. Komputer na którym właśnie czytacie ten wpis też ma bardzo długą taśmę i głowice co się nie po niej porusza i ją ciągle zmienia. Taśmą jest pamięć RAM a głowicą procesor. I tak oto mamy najprostszy komputer. Dodajmy mu jednak jeszcze jedną rzecz, jakiś układ wejścia wyjścia by mógł się z nami komunikować:
- pobierać dane
- wypisywać wyniki i pozwalać na wprowadzenie programu.
Jeszcze przed zbudowaniem pierwszego komputera niejaki Von Neumann zaproponował, że dobrze by było jak by pamięć kodu i danych była w jednym miejscu. To rozwiązanie które króluje w komputerach ogólnego przeznaczenia, PC-tach laptopach smartfonach, smart TV itd...
Daje nam to bardzo dużą elastyczność, możemy napisać prosty kod mielący duże dane albo duży kod który operuje jednak na małych ilościach danych. To rozwiązanie nie jest jednak pozbawione wad. Procesor jest bardzo głupi i o tym czy właśnie wczytał dane czy program decyduje kontekst. Aby Ci to uzmysłowić pokażę Ci jeden bajt z pamięci, dla uproszczenia przyjmijmy że jest to intel x86:
0x61H
Co on oznacza?
Jak spodziewamy się danych to może być np litera a albo polecenie POPA które wrzuca na stos wszystkie rejestry, spokojnie o tym za chwilę.
Jak pewnie widzicie zbudowanie procesora, który jeszcze miał by "myśleć" czy akurat mówimy o danych czy o kodzie może trudne.
Inne podejście prezentuje architektura harwardzka. Tam to na cześć oddajemy bardzo wczesnej konstrukcji zbudowanej właśnie na Uniwersytecie Harvarda. Komputer ten miał zupełnie różną pamięć danych, która była na lampach a pamięcią kodu zbudowanej na przekaźnikach.
Szerokość danych w obu pamięciach również była inna. Ta organizacja ma sporo zalet:
- Można równolegle pobierać dane i kod z 2 odrębnych pamięci.
- Większe bezpieczeństwo niż w Architekturze Von Neumanna
całe 2 :D
Pewno jesteś ciekaw czemu Harvardzka jest bezpieczniejsza. Chodzi o to że w trakcie wykonywania programu pamięć w której jest przechowywany jest tylko do odczytu co skutecznie uniemożliwia ataki na przepełnianie buforów oraz inne wykorzystujące że dane wprowadzone przez użytkownika mogą być potraktowane jako kod do wykoanania.
Architektura harwardzka jest stosowana wszędzie tam gdzie elastyczność pamięci nie jest konieczna. Zazwyczaj z takim podejściem spotkamy się w mikrokontrolerach.
Na tym chciał bym skończyć pierwszą lekcję. To co powinieneś pamiętać, to że komputer składa się z 3 rzeczy:
- Procesora
- Pamięci (osobnej dla kodu i danych lub wspólnej)
- Wejścia/wyjścia
Proszę o wasze oceny mam nadzieję wrzucać dość regularnie. Nie będę tworzyć osobnego tagu, no chyba że poprosicie.
W następnej lekcji popatrzymy na podstawowe bloki procesora.
a i dzięki @noisy za formatowanie

Bardzo fajne wprowadzenie, dzięki.
A kiedy inne języki? Może Ruby? :P
Hej. Zauważyłem, że nie ma Cię na naszym polskim kanale na: https://steemit.chat/channel/polish
Wpadnij koniecznie, będzie Ci łatwiej promować swoje wpisy :)
No jak opanujemy Assemblera to pewno C by zbyt szybko nie iść do góry.
a ta serio, nie wiem. może spotkamy języki narzędziowe jak python czy coś no i C jako ładną wersję assemblera
Dzieki za lekcje techniczne ;)
hej :) Jakoś nie zauważyłem Cię wcześniej tutaj :) Witam w imieniu Polskiej społeczności na steemit :)
Wpadnij koniecznie na nasz polski kanał na oficjalnym czacie: https://steemit.chat/channel/polish
(trzeba założyć osobne konto, ale warto o tej samej nazwie)
Hej! Dzieki za info! Jestem dopiero na Steemit od tygodnia (prawie dwoch) i nie wiedzialam ze mozna szukac hashtagami polskiego kanalu! :)
https://steemit.com/polish/@wytrzeszcz/lekcja-assemblera-2
A może jakiś polski tag, np. #programowanie?
dobry pomysł
https://steemit.com/polish/@wytrzeszcz/lekcja-assemblera-2
@fervi dobrze Ci radzi, tutaj masz formatowanie markdown:
https://guides.github.com/features/mastering-markdown/
Upvote, ale powinieneś formatować tekst :P
upvoted
Git post, upvote :D