Ja kiedyś czytałem książkę Gyna i tam był taki rozdział o architekturze, dla ułatwienia była dość prosta virtualna maszyna, dodatkowo były różne zadania, ja wtedy napisałem do niej disassemblera, który tłumaczył bajty na instrukcje, normalnie raczej by się nie chciało pisać ze względu na ilość instrukcji, tutaj akurat była skromna ilość to można było pacnąć w notatniku.
Potem było zadanie do zcrackowania i ten napisany disassembler mi pomógł potem szybciej rozwiązać zadanie.
Tę książkę czytałem wiele lat temu, pamiętam tylko z niej dwa działy o tym procesorze i bitmapie.
Książka się nazywała Zrozumieć programowanie.
C język jest obowiązkowy, ale C++ też warto znać, jak poznasz podstawowe funkcje assemblera to zrozumiesz, że tak na prawdę możesz i tak to wszystko robić w C, specjalne instrukcje możesz sobie ze wstawek dodawać, ale to bardzo specyficzne przypadki.
Warto porobić crackme zadania, żeby sprawdzić swoją wiedzę z assemblera.
Ogólnie programowanie w assemblerze to i tak programowanie w wyższym języku, jak się tak zastanowić to chcesz wypisać sobie na ekranie konsoli tekst, w wysokopoziomowym języku robisz print("text")
, a tu musisz trochę pomyśleć, print wysyła dane na stdout, a stdout to plik, w linuxie wszystko jest plikiem, to musimy go jak plik otworzyć, tyle że już jest otwarty automatycznie to tylko robimy syscalla do write(1, *txt, size), tak mniej więcej w C to wygląda, w asm będziemy musieli wrzucić te parametry do rejestrów, trzeba sprawdzić w dokumentacji, do którego wsadzić pointer, wielkość i deskryptor, no i wywołać syscalla lub interrupt.
Większość myślenia i tak jest w językach wysokopoziomowych tylko potem detale trzeba uzupełnić, coś jak od ogółu do szczegółu.
Znając podstawowe instrukcje asemblera i jak działa potem program, możesz pokusić się o stworzenie własnego procesora, robisz go na logice boolowskiej, najpierw jakieś podstawowe operacje add, sub, mul, multiplexer itp.
Możesz je wykonać jako równanie lub mapa karnaugh.
I potem jak chcesz już własny procesor zbudować to możesz skorzystać z fpga i ewentualnie korzystać z open source projektu RISC-V, żeby podglądać jak jest zaimplementowany procesor, wzorować się.