W jaki sposób procesor „wie”, co oznaczają różne polecenia?
Myślę o poleceniach na poziomie zestawu, takich jak MOV, PUSH, CALL itp.
W jaki sposób procesor „wie”, co oznaczają różne polecenia?
Myślę o poleceniach na poziomie zestawu, takich jak MOV, PUSH, CALL itp.
Odpowiedzi:
Gdy komputer interpretuje instrukcje na poziomie zespołu , instrukcje te są zamieniane na ich binarne odpowiedniki do odczytania przez CPU. Gdy CPU wykonuje instrukcje, interpretuje część instrukcji kodu operacyjnego na pojedyncze „mikroprogramy”, zawierające ich ekwiwalenty mikrokodu . Tak więc wiadomo, że pełna instrukcja montażu składa się z kodu operacyjnego i wszelkich powiązanych z nim danych, jeśli jest to wymagane (np. Nazwy rejestrów, adresy pamięci).
Instrukcje mikrokodu są niezwykle niskie (a nie bardziej montażowe) i kontrolują rzeczywiste sygnały cyfrowe, które kontrolują przepływ logiki w mikroprocesorze. Na przykład jedna instrukcja mikrokodu może zaktualizować flagę rejestru kodu stanu o nową wartość lub połączyć rejestr procesora z jedną z jednostek ALU . Możliwe są bardziej złożone zadania, ale pokazuje to ogólne pojęcie o tym, do czego służy mikrokod.
Ogólny przepływ od kompilacji do wykonania jest następujący. Instrukcje montażu są złożone (zamienione na ich binarne odpowiedniki 0 i 1 lub odtąd sygnały logiczne). Te sygnały logiczne są z kolei interpretowane przez CPU i zamieniane w więcej sygnałów logicznych niskiego poziomu, które kierują przepływem CPU do wykonania określonej instrukcji. Może to zająć jeden lub więcej cykli zegara, w zależności od architektury i konstrukcji procesora (większość podręczników procesora mówi, ile cykli zajmuje wykonanie określonej instrukcji, na przykład tej ).
Wszystko to odbywa się za pomocą zaprogramowanego na stałe mikrokodu (fizycznie osadzonego w procesorze w jakiejś pamięci ROM , ustawionego podczas produkcji), który kieruje przepływ przez rzeczywiste bramki logiczne niskiego poziomu . Zapewnia to interfejs między abstrakcyjnymi instrukcjami montażu a fizyczną logiką elektryczną w procesorze.
Podsumowując, instrukcje procesora są składane i ładowane przez procesor. Następnie procesor użyje tych instrukcji, aby wyszukać mikroprogram (w postaci mikrokodu) odpowiadający tej konkretnej instrukcji, czyli to, co „faktycznie” wykonuje instrukcję. Po wykonaniu mikrokodów dla konkretnej instrukcji (które mogą zająć jeden lub więcej cykli zegara), procesor wykonuje mikrokod w celu pobrania następnej instrukcji i cykl się powtarza.
Procesor tak naprawdę „nie wie”, jakie są polecenia. Polecenia są po prostu wzorcami binarnymi, które powodują, że procesor robi to, co interpretujemy.
Na przykład operacja ADD-R1-do-R2 spowoduje, że wartości rejestrów 1 i 2 osiągną ALU (jednostkę arytmetyczną i logiczną), sprawi, że ALU użyje wyjścia sumatora zamiast różnych innych rzeczy i spowoduje wyjście ALU w celu zastąpienia wartości w rejestrze 2. Istnieją proste układy logiczne do osiągnięcia wszystkich tych rzeczy ( multiplekser , sumator , licznik , ...), chociaż prawdziwe procesory używają bardzo skomplikowanych optymalizacji.
To trochę tak, jakbyś pytał, skąd samochód wie, żeby zwolnić po naciśnięciu hamulca. Samochód nie wie, pedał hamulca po prostu pośrednio kontroluje siłę docisku twardych klocków do kół.
Weźmy na przykład instrukcję, która mówi procesorowi x86 / IA-32, aby przenieść natychmiastową 8-bitową wartość do rejestru. Kod binarny dla tej instrukcji to 10110, po której następuje 3-bitowy identyfikator, którego rejestru należy użyć. Identyfikator rejestru AL to 000, więc poniższy kod maszynowy ładuje rejestr AL danymi 01100001.
10110000 01100001
Ten binarny kod komputerowy można uczynić bardziej czytelnym dla człowieka, wyrażając go w systemie szesnastkowym w następujący sposób
B0 61
B0 oznacza tutaj „Przenieś kopię poniższej wartości do AL”, a 61 oznacza szesnastkową reprezentację wartości 01100001, która ma wartość 97 w systemie dziesiętnym. Język asemblera Intela zapewnia mnemoniczny MOV (skrót ruchu) dla takich instrukcji, więc powyższy kod maszynowy można napisać w języku asemblera w następujący sposób, wraz z komentarzem wyjaśniającym, jeśli to konieczne, po średniku. Jest to o wiele łatwiejsze do odczytania i zapamiętania.
http://en.wikipedia.org/wiki/Assembler_language
Innymi słowy, kiedy „montujesz” swój program asemblera, instrukcje takie jak
MOV AL, 61h
są konwertowane na liczby, które CPU przypisują specjalne znaczenie, a następnie działają odpowiednio.
Sugerowane czytanie:
Zapoznaj się także z notatkami z CS152: Architektura i inżynieria komputerowa na UC Berkeley, kurs, w którym studenci wdrażają procesor.
Jeśli szukasz w Google „procesora domowego”, znajdziesz wiele gadżetów.
Na skrajnie najniższym poziomie wszystko, co procesor może zrobić, to dodać. Z dodawania może odejmować, pomnażać i dzielić (ponieważ są to tylko dodawanie w inny sposób). CPU wykorzystuje to do przenoszenia danych w pamięci poprzez zastosowanie dodatków do adresów pamięci.
Pamiętaj jednak, że jest to najniższy możliwy poziom. Procesor faktycznie „rozumie” niektóre polecenia w postaci mikrokodu. Zobacz odpowiedź Przełom, jest bardzo dobrze napisana.
Odpowiedziałem na to pod adresem programmers.stackexchange.com, zobacz Jak działają komputery? gdzie krótko omówiłem wszystko, od podstaw, o tym, jak komputery podchodzą do interpretacji instrukcji do poruszających się elektronów.