... że określony program po prostu mówi CPU, aby pobrać informacje z określonego adresu, a program określa, jak je traktować.
Dokładnie. Ale pamięć RAM nie jest odczytywana „sekwencyjnie” i oznacza pamięć o dostępie bezpośrednim, co jest dokładnie odwrotne.
Poza tym wiedząc, co bajt jest , nie wiem nawet, czy jest to bajt lub fragment większej pozycji jak liczbę zmiennoprzecinkową.
Chciałbym dodać do innych odpowiedzi, podając kilka konkretnych przykładów.
Zastanów się 01000001
. Program może kopiować je z jednego miejsca do drugiego jako część dużej paczki danych bez względu na jego znaczenie. Ale skopiowanie go na adres używany przez bufor wideo w trybie tekstowym spowoduje, że litera A
będzie wyświetlana w pewnej pozycji na ekranie. Dokładnie taka sama akcja, gdy karta jest w trybie graficznym CGA, wyświetli czerwony i niebieski piksel.
W rejestrze może to być liczba 65 jako liczba całkowita. Wykonywanie arytmetyki w celu ustawienia bitu 32 może oznaczać wszystko bez kontekstu, ale może w szczególności polegać na zmianie litery na małe litery.
Procesor 8086 (nadal) ma specjalne instrukcje o nazwie DAA ※, które są używane, gdy rejestr zawiera 2 cyfry dziesiętne, więc jeśli właśnie użyłeś tej instrukcji, interpretujesz ją jako dwie cyfry 41
.
Programy ulegają awarii, ponieważ słowo pamięci jest odczytywane, myśląc, że jest wskaźnikiem, gdy zapisano tam coś innego.
Za pomocą debugera, sprawdzającego pamięć, mapa służy do kierowania interpretacją wyświetlacza. Bez tej informacji o symbolu debuger niskiego poziomu pozwala określić: pokaż ten adres jako 16-bitowe słowa, pokaż ten adres jako długi zmiennoprzecinkowy, jako ciągi znaków ... cokolwiek. Zastanawianie się nad zrzutem pakietu sieciowego lub nieznanym formatem pliku stanowi wyzwanie.
Jest to główne źródło mocy i elastyczności we współczesnej architekturze komputerowej: komórka pamięci może oznaczać cokolwiek , dane lub instrukcje, domyślnie tylko w tym, co „znaczy” dla programu przez to, co robi z wartością i jak wpływa na kolejne operacje. znaczenie jest głębsze niż szerokość całkowita: czy te znaki ... znaki w ascii lub ebcdic? Tworzysz słowa w języku angielskim lub w kodach produktów SQU? Adres do wysłania lub adres zwrotny, z którego pochodzi? Interpretacja najniższy poziom (bity logiczne; całkowitą podobny, podpisane lub niepodpisane; pływak; BCD; pointer) jest kontekstowa na poziomie instrukcji ustawiony, ale widać, że to wszystko kontekst w pewnym poziom: doadres jest taki, jaki jest, ponieważ znajduje się na kopercie. Jest kontekstowy z zasadami listonosza, a nie CPU. Kontekst jest jednym wielkim kontinuum, z bitami na jednym końcu.
※ Przypis: Instrukcja DAA jest zakodowana jako bajt 00100111
. Tak więc ten bajt jest wspomnianą wcześniej instrukcją, jeśli jest czytany w strumieniu instrukcji, a cyfry, 27
jeśli są interpretowane jako cyfry bcd, a 0x27 = 39 jako liczba całkowita, która jest liczbą 9 w ASCII, i częścią tablicy przerwań (połowa INT 13 2-bajtowy adres, używany w procedurach serwisowych BIOS).