Rejestry a pamięć
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 3 z 45.
Dowiedziałeś się już o dwóch miejscach, w których dane mogą być przechowywane w komputerze:
- Rejestry: małe schowki wewnątrz procesora
- Pamięć (RAM): ogromna siatka ponumerowanych komórek poza procesorem
Ale dlaczego są dwa miejsca? Dlaczego procesor nie przechowuje wszystkiego w pamięci?
Odpowiedzią jest szybkość. Rejestry są niezwykle szybkie, ponieważ znajdują się wewnątrz procesora. Pamięć jest wolniejsza, ponieważ znajduje się na zewnątrz. Procesor może uzyskać dostęp do rejestru w jednym cyklu, ale dostęp do pamięci trwa znacznie dłużej.
Porównanie obok siebie:
| Cecha | Rejestry | Pamięć (RAM) |
|---|---|---|
| Lokalizacja | Wewnątrz CPU | Poza CPU |
| Szybkość | Niezwykle szybkie (1 cykl) | Wolniejsza (wiele cykli) |
| Liczba miejsc do przechowywania | Bardzo niewiele (16-32 w x86-64) | Miliony lub miliardy |
| Rozmiar każdego miejsca | 8 bajtów (64 bity) | 1 bajt |
| Jak uzyskujesz do nich dostęp | Po nazwie (rax, rbx, rcx...) | Po adresie (1000, msg, buffer) |
| Ulotna? | Tak (dane znikają po wyłączeniu zasilania) | Tak (dane znikają po wyłączeniu zasilania) |
Najważniejsza zasada w asemblerze:
Instrukcja może używać najwyżej jednego argumentu z pamięci. Aby połączyć dwie wartości, które znajdują się w pamięci, najpierw załaduj jedną z nich do rejestru.
Rejestry to także miejsce, w którym przechowujesz wartości, z którymi pracujesz, ponieważ każdy dostęp do pamięci jest powolny.
Trzyetapowy schemat, którego będziesz stale używać:
| Krok | Co się dzieje | Przykład |
|---|---|---|
| 1. LOAD | Skopiuj dane z pamięci do rejestru | mov rax, [count] |
| 2. WORK | Wykonaj działanie na rejestrze | add rax, 5 |
| 3. STORE | Skopiuj wynik z powrotem do pamięci (jeśli to konieczne) | mov [result], rax |
Co się stanie, jeśli zapomnisz o tej regule?
Jeśli spróbujesz dodać dwie liczby, które znajdują się w pamięci, asembler zgłosi błąd. Procesor nie może tego zrobić. Najpierw musisz załadować jedną z nich do rejestru.
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