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 miejsc poza procesorem
Ale dlaczego są dwa miejsca? Dlaczego CPU nie może po prostu pracować bezpośrednio z 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) | Wolniejsze (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 uzyskać do nich dostęp | Za pomocą nazwy (rax, rbx, rcx...) | Za pomocą adresu (1000, msg, buffer) |
| Ulotne? | Tak (znikają po wyłączeniu zasilania) | Tak (znikają po wyłączeniu zasilania) |
Najważniejsza zasada dotycząca asemblera:
Procesor nie może pracować bezpośrednio na danych w pamięci. Najpierw trzeba załadować dane do rejestrów.
To nie jest opcjonalne. Tak zaprojektowano procesor. Każde dodawanie, każde porównanie i każdy transfer danych musi odbywać się przez rejestr.
Trzystopniowy schemat, którego będziesz używać bez przerwy:
| Krok | Co się dzieje | Przykład |
|---|---|---|
| 1. LOAD | Kopiowanie danych z pamięci do rejestru | mov rax, [count] |
| 2. WORK | Wykonanie operacji na rejestrze | add rax, 5 |
| 3. STORE | Skopiowanie wyniku z powrotem do pamięci (jeśli to konieczne) | mov [result], rax |
Co się stanie, jeśli zapomnisz o tej zasadzie?
Jeśli spróbujesz dodać dwie liczby, które znajdują się w pamięci, asembler zgłosi błąd. Procesor po prostu nie potrafi tego zrobić. Najpierw musisz załadować je do rejestrów.
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