2012-05-14 10 views
7

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?

+0

Adresy pamięci są zwiększane o * 4 *, a nie * 4 bity *. – Gabe

Odpowiedz

8

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).

0

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.