Spisu treści:

Zakoduj i przetestuj komputer w języku maszynowym: 6 kroków
Zakoduj i przetestuj komputer w języku maszynowym: 6 kroków

Wideo: Zakoduj i przetestuj komputer w języku maszynowym: 6 kroków

Wideo: Zakoduj i przetestuj komputer w języku maszynowym: 6 kroków
Wideo: Sposoby zarabiania w internecie. Na jakie sposoby można zarabiać? 2024, Lipiec
Anonim
Image
Image

W tej instrukcji pokażę, jak kodować i testować program komputerowy w języku maszynowym. Język maszynowy jest językiem ojczystym komputerów. Ponieważ składa się z ciągów jedynek i zer, nie jest łatwo zrozumiały dla ludzi. Aby obejść ten problem, najpierw kodujemy programy w języku wysokiego poziomu, takim jak C++ lub Java, a następnie używamy specjalnych programów komputerowych do tłumaczenia ich na jedynki i zera, które rozumieją komputery. Nauka programowania w języku wysokiego poziomu jest z pewnością oczywista, ale krótkie wprowadzenie do języka maszynowego może zapewnić cenny wgląd w sposób działania komputerów i zwiększyć docenienie tej bardzo ważnej technologii.

Aby zakodować i przetestować program w języku maszynowym, potrzebujemy dostępu do prostego komputera, którego język maszynowy jest łatwo zrozumiały. Komputery osobiste są zbyt skomplikowane, aby je nawet rozważać. Rozwiązaniem jest wykorzystanie Logisim, symulatora logicznego, który działa na komputerze osobistym. Dzięki Logisim możemy zasymulować komputer spełniający nasze potrzeby. Powyższy film pokazuje, co możemy osiągnąć dzięki Logisim.

Do projektu komputera zaadaptowałem jeden z mojego e-booka Kindle Build Your Own Computer – From Scratch. Zacząłem od opisanego tam komputera BYOC i przyciąłem go do różnych podstawowych BYOC-I (ja dla Instructable), których użyjemy w tym Instructable.

Język maszynowy BYOC-I jest prosty i łatwy do zrozumienia. Nie będziesz potrzebować specjalnej wiedzy z zakresu komputerów czy programowania. Wszystko czego potrzeba to dociekliwy umysł i chęć do nauki

Dalsza lektura

Możesz się zastanawiać, dlaczego używamy słowa „maszyna” do opisania komputera, skoro nie jest to urządzenie mechaniczne. Powód jest historyczny; pierwsze urządzenia komputerowe były mechaniczne składające się z kół zębatych i kół. Tekst Allana Shermana „Wszystko koła zębate trzaskało…” miał zaledwie sto lub dwa lata. Przeczytaj więcej o wczesnych obliczeniach tutaj.

Krok 1: Lista części

Hierarchia i kody języka maszynowego
Hierarchia i kody języka maszynowego

Lista części jest krótka. Wymagane są tylko te dwa elementy, oba do pobrania za darmo:

  1. "Logisim-win-2.7.1.exe" - Logisim to popularny i łatwy w obsłudze symulator logiczny. Pobierz stąd plik wykonywalny Logisim, a następnie utwórz skrót w wygodnym miejscu, takim jak pulpit. Kliknij dwukrotnie ikonę Logisim, aby go uruchomić. Uwaga: Logisim korzysta z pakietu Java Runtime Package znajdującego się tutaj. Możesz zostać poproszony o pobranie go.
  2. BYOC-I-Full.cir” - pobierz plik obwodu Logisim poniżej.

Uruchom Logisim, a następnie kliknij „File-Open” i załaduj plik BYOC-I-Full.cir. Powyższy obrazek przedstawia środowisko pracy Logisim. BYOC-I jest reprezentowany przez blok podobwodowy. Zewnętrznie podłączone są dwa wejścia, Reset i Run oraz wyświetlacze szesnastkowe dla rejestrów BYOC-I i pamięci programu.

Pamięć programu BYOC-I jest wstępnie załadowana prostym programem, który liczy od 1 do 5 w rejestrze A. Aby uruchomić (uruchomić) program, wykonaj następujące kroki.

Krok 1 - Kliknij narzędzie Poke. Kursor powinien zmienić się w szturchający „palec”. Krok 2 - Naciśnij dwukrotnie wejście Reset, zmieniając je na „1” i ponownie, aby zmienić je z powrotem na „0”. Spowoduje to zresetowanie BYOC-I, aby uruchomić program pod adresem 0. Krok 3 - Naciśnij raz wejście Run, aby zmienić je na „1”. Rejestr A powinien pokazywać liczbę zmieniającą się od 1 do 5, a następnie powtarzającą się. Krok 4 - Jeśli program nie wykonuje się, naciśnij Ctrl-K i powinien się uruchomić.

Jeśli chcesz poznać możliwości Logisim, kliknij łącze Pomoc na pasku menu. Stamtąd możesz zapoznać się z „Samouczkiem”, „Podręcznikiem użytkownika” i „Odniesieniem do biblioteki” Logisim. Doskonałe wprowadzenie wideo znajduje się tutaj.

Krok 2: Hierarchia i kody języka maszynowego

Hierarchia i kody języka maszynowego
Hierarchia i kody języka maszynowego

Komputer BYOC-I wykonuje zadania na podstawie programów napisanych w języku maszynowym. Z kolei programy BYOC-I składają się z instrukcji wykonywanych w ściśle określonej kolejności. Każda instrukcja składa się z kodów o stałej długości, które reprezentują różne elementy operacyjne BYOC-I. Wreszcie kody te składają się z ciągów jedynek i zer, które tworzą język maszynowy faktycznie wykonywany przez BYOC-I.

Tytułem wyjaśnienia zaczniemy od kodów i przejdziemy do poziomu programu. Następnie zakodujemy prosty program, załadujemy go do pamięci BYOC-I i wykonamy.

Kody składają się ze stałej liczby binarnych (1 i 0) cyfr lub bitów, w skrócie. Na przykład poniższa tabela pokazuje wszystkie możliwe kody (w sumie 16) dla kodu o szerokości 4 bitów. Obok pokazano kod w postaci szesnastkowej (podstawa 16) i dziesiętnej. Szesnastkowy jest używany w odniesieniu do wartości binarnych, ponieważ jest bardziej zwarty niż binarny i łatwiejszy do konwersji z binarnego niż dziesiętnego. Prefiks „0x” informuje, że następująca liczba jest szesnastkowa lub w skrócie „szesnastkowa”.

Binarne - Heksadecymalne - Dziesiętne0000 0x0000 00001 0x0001 10010 0x0002 20011 0x0003 30100 0x0004 40101 0x0005 50111 0x0007 71000 0x0008 81001 0x0009 91010 0x000A 101011 0x000B 111100 0x000C 121101 0x000D 1311111 0x

Szerokość kodu określa, ile elementów może być reprezentowanych. Jak zauważono, powyższy 4-bitowy kod może reprezentować do 16 pozycji (od 0 do 15); czyli 2 razy 2 wzięte cztery razy lub od 2 do 4 potęgi równa się 16. Ogólnie liczba reprezentowalnych elementów wynosi 2 podniesione do n-tej potęgi. Oto krótka lista możliwości kodu n-bitowego.

n - Liczba sztuk1 22 43 84 165 326 647 1288 256

Szerokości kodów komputerowych BYOC-I są dobierane tak, aby pomieścić liczbę elementów, które mają być reprezentowane przez kod. Na przykład istnieją cztery typy instrukcji, więc odpowiedni jest kod o szerokości 2 bitów. Oto kody BYOC-I z krótkim objaśnieniem każdego z nich.

Kod typu instrukcji (tt) Istnieją cztery typy instrukcji: (1) MVI - Przenosi natychmiastową 8-bitową stałą wartość do rejestru pamięci. Rejestr pamięci to urządzenie, które przechowuje dane, które mają być użyte do obliczeń, (2) MOV - Przenoszenie danych z jednego rejestru do drugiego, (3) RRC - Wykonuje obliczenia rejestr-rejestr, oraz (4) JMP - Skok do innej instrukcji zamiast kontynuować przy następnej instrukcji. Przyjęte kody typów instrukcji BYOC-I są następujące:

00 MVI01 MOV10 RRC11 JMP

Kod rejestru (dd i ss) BYOC-I ma cztery 8-bitowe rejestry zdolne do przechowywania wartości od 0 do 255. 2-bitowy kod jest wystarczający do wyznaczenia czterech rejestrów:

00 F rejestr01 E rejestr10 D rejestr11 rejestr A

Kod obliczeniowy (ccc) BYOC-I obsługuje cztery operacje arytmetyczno-logiczne. Aby umożliwić w przyszłości rozszerzenie do ośmiu obliczeń, używany jest kod 3-bitowy:

000 ADD, dodaj dwie 8-bitowe wartości w wyznaczonych rejestrach i zapisz wynik w jednym z rejestrów 001 SUB, odejmij dwie 8-bitowe wartości w wyznaczonych rejestrach i zapisz wynik w jednym z rejestrów 010 - 011 Zarezerwowane do wykorzystania w przyszłości100 AND, logicznie AND dwie wartości 8-bitowe w wyznaczonych rejestrach i zapisz wynik w jednym z rejestrów101 OR, logicznie OR dwie wartości 8-bitowe w wyznaczonych rejestrach i zapisz wynik w jednym z rejestrów 110 do 111, Zarezerwowane do wykorzystania w przyszłości

Kod skoku (j) 1-bitowy kod, który wskazuje, czy skok jest bezwarunkowy (j = 1), czy uzależniony od wyniku obliczenia niezerowego (j = 0).

Dane/kod adresu (v…v)/(a…a) 8-bitowe dane mogą być zawarte w niektórych instrukcjach reprezentujących wartości od 00000000 do 11111111 lub od 0 do 255 dziesiętnie. Te dane mają szerokość 8 bitów i są przechowywane w 8-bitowych rejestrach BYOC-I. W przypadku arytmetyki dziesiętnej nie pokazujemy wiodących zer. W arytmetyce komputerowej pokazujemy wiodące zera, ale nie wpływają one na wartość. 00000101 jest numerycznie taki sam, jak 101 lub 5 po przecinku.

Sugerowane referencje

Zapis binarny - https://learn.sparkfun.com/tutorials/binary Zapis szesnastkowy -

Dalsza lektura

Pomysł wykorzystania kodów do kierowania procesem ma długą historię. Jednym z fascynujących przykładów jest krosno żakardowe. Zautomatyzowane krosno było kontrolowane przez łańcuch drewnianych kart, w których wywiercono otwory reprezentujące kody dla różnych kolorów przędzy do tkania. Swój pierwszy zobaczyłem w Szkocji, gdzie robiono z niego kolorowe tartany. Przeczytaj więcej o krosnach żakardowych tutaj.

Krok 3: Anatomia instrukcji BYOC-I

Anatomia instrukcji BYOC-I
Anatomia instrukcji BYOC-I

Biorąc pod uwagę kody BYOC-I, przechodzimy na wyższy poziom, instrukcje. Aby stworzyć dyspozycję dla BYOC-I, umieszczamy kody razem w określonej kolejności iw określonych miejscach w instrukcji. Nie wszystkie kody pojawiają się we wszystkich instrukcjach, ale kiedy już się pojawią, zajmują określoną lokalizację.

Typ instrukcji MVI wymaga najwięcej bitów, łącznie 12 bitów. Tworząc słowo instrukcji o długości 12 bitów, uwzględniamy wszystkie instrukcje. Nieużywane (tak zwane "nie obchodzi mnie") bity otrzymują wartość 0. Oto zestaw instrukcji BYOC-I.

  1. Move Immediate (MVI) - 00 dd vvvvvvvvFunkcja: Przenieś 8-bitową wartość danych V = vvvvvvv do rejestru docelowego dd. Po wykonaniu rejestr dd będzie miał wartość vvvvvvvv. Skrót: MVI R, V gdzie R to A, D, E lub F. Przykład: 00 10 00000101 - MVI D, 5 - Przenieś wartość 5 do rejestru D.
  2. Przenieś rejestr do rejestru (MOV) - 01 dd ss 000000Funkcja: Przenieś dane z rejestru źródłowego ss do rejestru docelowego dd. Po wykonaniu oba rejestry mają taką samą wartość jak rejestr źródłowy. Skrót: MOV Rd, Rs, gdzie Rd jest rejestrem docelowym A, D, E lub F, a Rs jest rejestrem źródłowym A, D, E lub F. Przykład: 01 11 01 000000 - MOV A, E - Przenieś wartość w rejestrze E do rejestru A.
  3. Obliczanie rejestru do rejestru (RRC) - 10 dd ss ccc 000Funkcja: Wykonaj wyznaczone obliczenie ccc za pomocą rejestru źródłowego ss i rejestru docelowego dd, a następnie zapisz wynik w rejestrze docelowym. Skróty: ADD Rd, Rs (ccc=000 Rd + Rs zapisane w R & D); SUB Rd, Rs (ccc=001 Rd - Rs przechowywane w Rd); AND Rd, Rs (ccc=100 Rd AND Rs przechowywane w Rd); OR Rd, Rs (ccc=101 Rd OR Rs zapisane w Rd). Przykład: 10 00 11 001 000 - SUB F, A - Odejmij wartość w rejestrze A od rejestru F z wynikiem w rejestrze F.
  4. Skok do innej instrukcji (JMP) - 11 j 0 aaaaaaaaFunkcja: Zmiana wykonania na inną instrukcję zlokalizowaną pod adresem aaaa aaaa(a) Bezwarunkowo (j=1) -11 1 0 aaaaaaaa Skrót: JMP L gdzie L to adres aaaa aaaPrzykład: 11 1 0 00001000 - JMP 8 - Zmiana wykonania na adres 8.(b) Warunkowo (j=0) gdy poprzednie obliczenia dały wynik niezerowy - 11 0 0 aaaaaaaa Skrót: JNZ L gdzie L to adres aaaa aaaa. Przykład: 11 0 0 00000100 JNZ 4 Jeśli ostatnie obliczenie dało wartość niezerową, zmień wykonanie na adres 4.

Bity słowa rozkazowego są ponumerowane od lewej (najbardziej znaczący bit MSB) do prawej (najmniej znaczący bit LSB) od 11 do 0. Stała kolejność i lokalizacje kodów są następujące:

Bity - Kod11-10 Typ instrukcji 9-8 Rejestr docelowy 7-6 Rejestr źródłowy5-3 Obliczanie: 000 - dodaj; 001 - odejmij; 100 - logiczne AND; 101 - logiczne OR7-0 Stała wartość v…v i a…a (0 do 255)

Zestaw instrukcji podsumowano na powyższym rysunku. Zwróć uwagę na uporządkowany i uporządkowany wygląd kodów w każdej instrukcji. Rezultatem jest prostszy projekt BYOC-I i sprawia, że instrukcje są łatwiejsze do zrozumienia dla człowieka.

Krok 4: Kodowanie instrukcji komputera

Kodowanie instrukcji komputera
Kodowanie instrukcji komputera

Zanim przejdziemy do poziomu programu, skonstruujmy kilka przykładowych instrukcji, korzystając z powyższego zestawu instrukcji BYOC-I.

1. Przenieś wartość 1 do rejestru A. Rejestry BYOC-I mogą przechowywać wartości od 0 do 255. W tym przypadku rejestr A będzie miał wartość 1 (00000001 binarnie) po wykonaniu instrukcji.

Skrót: MVI A, 1Wymagane kody: Typ MVI - 00; Rejestr przeznaczenia A - 11; Wartość - 00000001Słowo instrukcji: 00 11 00000001

2. Przenieś zawartość rejestru A do rejestru D. Po wykonaniu oba rejestry będą miały wartość oryginalnie w rejestrze A.

Skrót: MOV D, A (Pamiętaj, że miejsce docelowe jest pierwsze, a źródło drugie na liście) Wymagane kody: Typ MOV - 01; Rejestr przeznaczenia D - 10; Rejestr źródłowy A-11Słowo instrukcji: 01 10 11 000000

3. Dodaj zawartość rejestru D do rejestru A i zapisz w rejestrze A. Po wykonaniu wartość rejestru A będzie sumą pierwotnej wartości rejestru A i rejestru D.

Skrót: ADD A, D (Wynik jest przechowywany w rejestrze docelowym) Wymagane kody: Typ RRC - 10; Rejestr przeznaczenia A - 11; Rejestr źródłowy D - 10; Obliczanie Dodaj - 000Słowo instrukcji: 10 11 10 000 000 (ccc to pierwsze 000 - dodaj)

4. Skocz na nie zero do adresu 3. Jeżeli wynik ostatniego obliczenia nie był zerem, wykonanie przełączy się na instrukcję pod podanym adresem. Jeśli zero, wykonanie jest wznawiane od następującej instrukcji.

Skrót: JNZ 3Wymagane kody: Typ JMP - 11; Typ skoku - 0; Adres - 00000003Słowo instrukcji: 11 0 0 00000003 (Typ skoku to pierwsze 0)

5. Skocz bezwarunkowo do adresu 0. Po wykonaniu następuje zmiana wykonania na instrukcję pod podanym adresem.

Skrót: JMP 0Wymagany kod: Typ JMP - 11; Typ skoku - 1; Adres - 00000000Słowo instrukcji; 11 1 0 00000000

Chociaż kodowanie maszynowe jest nieco żmudne, widać, że nie jest niemożliwie trudne. Gdybyś naprawdę zajmował się kodowaniem maszynowym, użyłbyś programu komputerowego zwanego asemblerem do tłumaczenia ze skrótu (który nazywa się kodem asemblera) na kod maszynowy.

Krok 5: Anatomia programu komputerowego

Anatomia programu komputerowego
Anatomia programu komputerowego

Program komputerowy to lista instrukcji wykonywanych przez komputer, zaczynająca się na początku listy, ciągnąca się w dół listy do końca. Instrukcje takie jak JNZ i JMP mogą zmienić, która instrukcja jest wykonywana jako następna. Każda instrukcja na liście zajmuje jeden adres w pamięci komputera, zaczynając od 0. Pamięć BYOC-I może pomieścić listę 256 instrukcji, co jest więcej niż wystarczające dla naszych celów.

Programy komputerowe są przeznaczone do wykonania określonego zadania. Dla naszego programu wybierzemy proste zadanie, licząc od 1 do 5. Oczywiście nie ma instrukcji „count”, więc pierwszym krokiem jest rozbicie zadania na kroki, które mogą być obsłużone przez BYOC-I bardzo ograniczony zestaw instrukcji.

Krok 1 Przenieś 1 do rejestru AS Krok 2 Przenieś rejestr A do rejestru DS Krok 3 Dodaj rejestr D do rejestru A i zapisz wynik w rejestrze A Krok 4 Przenieś 5 do rejestru ES Krok 5 Odejmij rejestr A od rejestru E i zapisz wynik w rejestrze ES Krok 6 Jeśli wynik odejmowania nie był zerem, wróć do kroku 4 i kontynuuj liczenie. Krok 7 Jeśli wynik odejmowania był równy zero, wróć i zacznij od nowa

Następnym krokiem jest przetłumaczenie tych kroków na instrukcje BYOC-I. Programy BYOC-I rozpoczynają się pod adresem 0 i kolejnym numerze. Adresy docelowe skoku są dodawane jako ostatnie po umieszczeniu wszystkich instrukcji.

Adres:Instrukcja - Skrót;Opis0:00 11 00000001 - MVI A, 1;Przenieś 1 do rejestru A1:01 10 11 000000 - MOV D, A;Przenieś rejestr A do rejestru D2:10 11 10 000 000 - DODAJ A, D;Dodaj rejestr D do rejestru A i zapisz wynik w rejestrze A3:00 01 00 00000101 - MVI E, 5;Przenieś 5 rejestr E4:10 01 11 001 000 - SUB E, A;Odejmij rejestr A od rejestru E i zapisz wynik w rejestrze E5:11 0 0 00000010 - JNZ 2;Jeżeli wynik odejmowania nie był równy zero, wróć do adresu 3 i kontynuuj liczenie6:11 1 0 00000000 - JMP 0;Jeżeli wynik odejmowania był równy zero, wróć i zacznij od nowa

Przed przeniesieniem programu do pamięci należy zmienić binarny kod instrukcji na szesnastkowy, aby można go było używać z Logisim Hex Editor. Najpierw podziel instrukcję na trzy grupy po 4 bity każda. Następnie przetłumacz grupy na szesnastkowe, korzystając z tabeli w kroku 2. Tylko trzy ostatnie cyfry szesnastkowe (pogrubione poniżej) zostaną użyte.

Adres - Rozkaz Binarny - Rozkaz Binarny Split - Rozkaz (Hex)0 001100000001 0011 0000 0001 - 0x03011 011011000000 0110 1100 0000 - 0x06C02 101110000000 1011 1000 0000 - 0x0B803 000100000101 0001 0000 0101 - 0x01054 10011100000 10011009 1100000 - 111000000010 1110 0000 0000 - 0x0E00

Czas przenieść program do pamięci BYOC-I w celu przetestowania.

Krok 6: Przenoszenie programu do pamięci i testowanie

Przenoszenie programu do pamięci i testowanie
Przenoszenie programu do pamięci i testowanie
Przenoszenie programu do pamięci i testowanie
Przenoszenie programu do pamięci i testowanie

Patrząc na „główny” obwód Logisim, pokazany blok BYOC-I jest symbolem rzeczywistego obwodu komputerowego oznaczonego „BYOC-I” w okienku eksploratora. Aby wprowadzić program do pamięci BYOC-I:

  1. Kliknij prawym przyciskiem myszy blok BYOC-I (nazywany „obwodem podrzędnym”) i wybierz (najedź kursorem i kliknij lewym przyciskiem myszy) „View BYOC-I”.
  2. Obwód BYOC-I pojawi się w obszarze roboczym. Kliknij prawym przyciskiem myszy symbol "Pamięć programu" i wybierz "Edytuj zawartość…".
  3. Korzystając z Logisim Hex Editor, wprowadź kod szesnastkowy (tylko pogrubienie), jak pokazano powyżej.

Jesteś teraz gotowy do wykonania programu. Wróć do głównego obwodu, klikając dwukrotnie „BYOC-I” w okienku eksploratora. Aby rozpocząć, wejścia Run i Reset powinny mieć wartość „0”. Używając narzędzia Poke, najpierw zmień Reset na „1”, a następnie z powrotem na „0”. Powoduje to, że adres początkowy wynosi 0x0000 i przygotowuje obwód BYOC-I do wykonania. Teraz ustaw wejście Run na „1”, a program zostanie wykonany. (Uwaga: aby uruchomić zegar Logisim, musisz nacisnąć klawisz Control-K raz. Jest to funkcja, która pozwala zatrzymać zegar Logisim i przejść przez program, naciskając kilkakrotnie Control-T. Spróbuj kiedyś!)

Zegar Logisim można ustawić dla szerokiego zakresu częstotliwości. Po pobraniu jest to 8 Hz (8 cykli na sekundę). Sposób, w jaki zaprojektowano komputer BYOC-I, polega na tym, że wykonanie każdej instrukcji zajmuje cztery cykle zegara. Tak więc, aby obliczyć prędkość BYOC-I, podziel częstotliwość zegara przez 4. Przy 8 Hz jego prędkość wynosi 2 instrukcje na sekundę. Możesz zmienić zegar, klikając „Symuluj” na pasku narzędzi i wybierając „Częstotliwość zaznaczenia”. Możliwy zakres to 0,25 Hz do 4100 Hz. Wybrano małą prędkość przy 8 Hz, aby można było obserwować zliczanie w rejestrze A.

Maksymalna prędkość symulacji BYOC-I (~1000 instrukcji na sekundę) jest bardzo niska w porównaniu z nowoczesnymi komputerami. Sprzętowa wersja komputera BYOC opisana w mojej książce wykonuje ponad 12 milionów instrukcji na sekundę!

Mam nadzieję, że ten Instructable zdemistyfikował programowanie w języku maszynowym i dał ci wgląd w działanie komputerów na najbardziej podstawowym poziomie. Aby zdobyć zrozumienie, spróbuj zakodować dwa poniższe programy.

  1. Napisz program, który zaczyna się od 5 i odlicza do 0. (ANS. Count5to0.txt poniżej)
  2. Zaczynając od 2, licz od 3, aż liczba przekroczy 7. Możesz trochę policzyć mentalną, sprawdź 8, wiedząc, że tam wyląduje, a następnie uruchom ponownie. Napisz swój program w bardziej ogólny sposób, który naprawdę sprawdza, czy liczba „przekracza” określoną liczbę. Wskazówka: Sprawdź, co się dzieje, gdy odejmowanie daje wartość ujemną, powiedzmy na przykład 8 - 9= -1. Następnie poeksperymentuj z logicznym AND, aby sprawdzić, czy MSB w 8-bitowej liczbie to „1”. (ODP. ExceedsCount.txt)

Czy myślisz o innych trudnych problemach dla komputera BYOC-I? Biorąc pod uwagę jego ograniczenia, co więcej może zrobić? Podziel się ze mną swoimi doświadczeniami pod adresem [email protected]. Jeśli jesteś zainteresowany kodowaniem mikroprocesorów, zajrzyj na moją stronę www.whippleway.com. Tam przenoszę kodowanie maszynowe do nowoczesnych procesorów, takich jak seria ATMEL Mega stosowana w Arduinos.

Zalecana: