W jaki sposób procesor „wie”, co właściwie oznaczają polecenia i instrukcje?

73

W jaki sposób procesor „wie”, co oznaczają różne polecenia?

Myślę o poleceniach na poziomie zestawu, takich jak MOV, PUSH, CALL itp.

Simon Verbeke
źródło
Jest to bardzo pouczające, ale szukam tego, co pozwala procesorowi na odbieranie i wysyłanie poleceń?
Nie rozumiem tego komentarza. Procesor „odbiera” instrukcje z pamięci, prosząc je o adres. Jedynymi poleceniami, które CPU „wysyła” (przynajmniej w uproszczeniu) są polecenia do pamięci w celu dostarczenia danych oraz polecenia na szynach we / wy do obsługi urządzeń we / wy.
Daniel R Hicks,
W sercu każdego procesora znajduje się pewna logika (dosłownie) podłączona do uruchomienia prostej procedury: weź wartość z rejestru adresów instrukcji, wyślij ją do pamięci, pobierz instrukcję zwracaną przez pamięć, a następnie zablokuj w bardziej złożone gniazdo logiki przewodowej, która „rozumie”, co oznacza instrukcja i jak ją wykonać. Aha, i gdzieś tam rośnie rejestr adresu instrukcji.
Daniel R Hicks,
Czytelnicy mogą być zainteresowani pytaniem Jak działa komputer? na temat informatyki .
Raphael

Odpowiedzi:

88

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.

Przełom
źródło
2
Ok, rozumiem, myślę :) Więc bity polecenia przełączają „przełączniki”, które sprawią, że procesor zrobi pewne rzeczy z otrzymywanymi danymi?
Simon Verbeke,
4
@ Simon Verbeke, dokładnie poprawne. Po prostu przełączają przełączniki, aby kierować przepływ sygnałów elektrycznych w procesorze (co może również skierować go do ponownego ładowania większej liczby poleceń!). Analogia przełączania jest dobra, ponieważ wszystko jest cyfrowe (albo logiczne 1/0, albo prawda / fałsz). Właśnie dlatego wiesz, że poziom logiczny jest rzeczywistym napięciem. Inżynier musi określić, co to jest 0 lub 1 (na przykład logika 1 może być określona jako większa niż 2 wolty).
Przełom
1
„Instrukcje binarne równoważne”, do których kompilator lub asembler sprowadza wszystko, nazywane są opcodes. Jeśli przyjrzysz się strukturze opcode architektury RISC, takiej jak MIPS lub ARM, możesz zobaczyć, jak różne bity w opcode odwzorowują określone operacje. Intel ze względu na swoją długowieczność i tendencję do wydłużania się od czasu do czasu nie ma już prostej struktury mapowania.
LawrenceC,
3
Nie, mówiłem ze względu na długowieczność i ciągłe rozszerzanie architektury x86, mapowanie pojedynczych bitów w kodach operacyjnych do mikroprocesorów nie jest tak proste, jak w MIPS lub ARM do pewnego stopnia (patrz d.umn.edu/~gshute/spimsal/talref.html , na przykład, kody Intel nie są takie). Nie sądzę, by było dużo pojęcia „RISC”, kiedy Intel wprowadził procesory x86 w 1978 r.
LawrenceC
5
Nie należy zauważyć, że tylko niektóre procesory są mikrokodowane. Niektóre (głównie mniejsze urządzenia) działają bezpośrednio poza kodami asemblera. To zależy od architektury.
Fałszywe imię
37

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ół.

Craig Gidney
źródło
5
Ładna analogia do pedału łamania samochodów.
rjmunro,
10

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.

Nate
źródło
2
Warto również zauważyć, że przypisanie mnemonicznego symbolu „mov” do tego konkretnego wzorca bitowego było całkowicie arbitralne. Mógłbym w zasadzie napisać asemblera, który nazwałby tę instrukcję „oof” i działałaby równie dobrze, poza tym, że trudniej ją zapamiętać.
dmckee,
6

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.

nibot
źródło
4

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.

n0pe
źródło
7
Operacje logiczne, takie jak AND, OR i NOT, a także przesunięcie bitów są bardziej fundamentalne niż dodawanie. Dodawanie można faktycznie wyrazić w kategoriach tych operacji. W rzeczywistości istnieją dyskretne układy scalone (seria Texas Instruments LS), które wykonują tylko te operacje i można z nich zbudować procesor. Google „Schemat Ponga”, aby zobaczyć, na przykład, jak powstaje gra bez procesora.
LawrenceC,
Miałem na myśli bardziej z punktu widzenia oprogramowania :) Tak, jeśli chodzi o sprzęt / logikę, masz szaloną liczbę bramek NAND i NOR. Słuszna uwaga.
n0pe
2

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.

Lie Ryan
źródło