Jak działają instrukcje
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 4 z 45.
Wiesz, że procesor wykonuje instrukcje jedna po drugiej. Ale skąd procesor wie, którą instrukcję uruchomić jako następną? Gdzie przechowywane są instrukcje? I jak właściwie wygląda instrukcja?
Instrukcje są liczbami.
To fundamentalna prawda o komputerach. Wszystko jest liczbą. Dane, z którymi pracujesz (takie jak liczba 42), są liczbą. Adres, pod którym znajdują się dane (taki jak 1000), jest liczbą. A same instrukcje (takie jak mov, add, cmp) również są liczbami.
Gdy piszesz kod asemblera, na przykład mov rax, 5, asembler przekształca ten tekst czytelny dla człowieka w liczbę zrozumiałą dla procesora. Ta liczba nazywa się kodem instrukcji.
Gdzie są przechowywane instrukcje?
Instrukcje są przechowywane w pamięci, tak samo jak dane. Nie ma osobnej pamięci na instrukcje. Ta sama pamięć przechowuje zarówno:
- Dane (liczby, znaki, tablice)
- Instrukcje (sam program)
Same bajty nie wskazują, czy są instrukcją, czy danymi. Procesor traktuje to, co znajduje się pod adresem pamięci wskazywanym przez licznik programu, jako następną instrukcję. We współczesnym systemie operacyjnym system oznacza pamięć zawierającą instrukcje programu jako wykonywalną, a procesor odmawia wykonywania bajtów z pamięci, która nie jest oznaczona w ten sposób, na przykład danych programu. Krótko poznano licznik programu w lekcji 0.1. Teraz czas dokładnie zrozumieć, jak działa.
Licznik programu (nazywany również wskaźnikiem instrukcji) to specjalny rejestr wewnątrz procesora. Jego jedynym zadaniem jest przechowywanie adresu pamięci następnej instrukcji do wykonania.
Cykl pobierania i wykonywania:
Procesor powtarza te trzy kroki bez końca:
| Krok | Co się dzieje |
|---|---|
| 1. FETCH | Odczytaj instrukcję spod adresu w PC |
| 2. EXECUTE | Wykonaj tę instrukcję |
| 3. ADVANCE | Przesuń PC do następnej instrukcji |
Prosty przykład:
Jeśli PC = 1000, procesor:
- Pobiera instrukcję spod adresu 1000
- Wykonuje ją
- Przesuwa PC na następny adres (1000 + rozmiar instrukcji)
Następnie powtarza się z nową wartością PC.
Jak wygląda instrukcja:
Każda instrukcja składa się z dwóch części:
| Część | Do czego służy | Przykład |
|---|---|---|
| Opcode | Co zrobić | mov, add, cmp |
| Operandy | Na czym to zrobić | rax, 5, [result] |
Niektóre instrukcje mają jeden operand (jak inc rax, aby dodać 1). Niektóre mają dwa (jak mov rax, 5). Niektóre mają trzy (jak add rax, rbx, rcx w niektórych architekturach).
Spróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Maszyna
Czym jest CPUPamięćRejestry a pamięćJak działają instrukcjeWzorzec dwóch plikówArchitektura x86-642Systemy liczbowe
Dlaczego system binarny?Liczby binarneZamiana z systemu dziesiętnego na binarnyDlaczego system szesnastkowy?Zamiana z systemu szesnastkowego na dziesiętnyZamiana z systemu dziesiętnego na szesnastkowyASCII i system szesnastkowy5Wywołanie systemowe zakończenia
Czym jest syscall?Wywołanie systemowe zakończenia (60)Kody zakończeniaPodsumowanie: prawidłowe zakończeniePoćwicz samodzielnie: Edytor online Assembly