Jeśli coś jest przechowywane pod adresem 0x1001 0000, następna rzecz jest przechowywana pod adresem 0x1001 0004. I jeśli mam rację, elementy pamięci w 32-bitowej architekturze mają po 32 bity. Czyli 0x1001 0002 wskazywałoby na drugą połowę 32 bitów?Dlaczego adresy pamięci są zwiększane o 4 w MIPS?
Odpowiedz
Przede wszystkim, adresy pamięci w architekturze MIPS nie są zwiększane przez 4. MIPS używa bajt zajęcie, więc można zająć dowolny bajt z pamięci (patrz np lb
i lbu
odczytać jeden bajt, lh
i lhu
czytać pół słowa).
Faktem jest, że jeśli czytasz słowa o długości 32 bitów (4 bajty, lw
), dwa kolejne słowa będą od siebie oddalone o 4 bajty. W takim przypadku należy dodać 4 do adresu pierwszego słowa, aby uzyskać adres następnego słowa.
Oprócz tego, jeśli czytasz słowa, musisz wyrównać je w wielokrotnościach 4, w przeciwnym razie otrzymasz wyjątek wyrównania.
W twoim przykładzie, jeśli pierwsze słowo jest przechowywane w 0x10010000, następne słowo będzie w 0x10010004 i oczywiście pierwsze pół/druga połowa będzie w 0x1001000 i 0x1001002 (kolejność będzie zależeć od architektury endianness architektury).
Wygląda na to, że sam odpowiedziałeś! 32 bity tworzą 4 bajty, więc jeśli jesteś np. pchanie do stosu, gdzie wszystkie elementy są wypychane w tym samym rozmiarze, każdy następny element będzie 4 bajty przed (lub wcześniej) następny.
Adresy pamięci są zwiększane o * 4 *, a nie * 4 bity *. – Gabe