понимание адреса памяти - PullRequest
1 голос
/ 05 марта 2010

У меня проблемы с адресацией памяти в MIPS. Это говорит о том, что адресация выровнена по словам ... в тексте ниже я не понимаю, почему он смотрит на 2 младших бита адреса? Зачем? Может ли кто-нибудь дать мне пример, чтобы прояснить / проиллюстрировать высказанный здесь смысл ... поэтому он говорит, что все действительные адреса полуслов имеют те, чьи 2 младших разряда являются 00 или 10?

так что, если я хочу загрузить байт из памяти, выровненной по словам ?? как я могу это сделать? говорят, что мне нужно сдвинуть влево на 2, то есть сделать 2 младших значащих бита 0 ... затем извлечь биты ...

альтернативный текст http://img69.imageshack.us/img69/1603/jpgdw.jpg

Ответы [ 4 ]

1 голос
/ 05 марта 2010

«Слово выровнено» означает, что процессор всегда будет читать 4 байта.

Однако, если на самом деле операция выполняется на 2-байтовом коротком адресе, допустимо иметь адрес, заканчивающийся 0b00 или 0b10 (таким образом, адрес четный), и ЦП вставит правильные 2 байта в регистр при загрузке зарегистрируйтесь или напишите правильную информацию.

Аналогично, при чтении символа два младших значащих бита могут принимать любое значение, и правильный байт загружается в соответствующий регистр, или соответствующая часть (обычно младший бит) регистра записывается в правильную часть память.

Однако, если вы попытаетесь прочитать (4-байтовый) int с адресом, который не заканчивается 0b00, то вы получите SEGV или около того.

0 голосов
/ 07 марта 2010

Если вы хотите прочитать один байт, вы можете читать из любого места в памяти. Не о чем беспокоиться. Выравнивание слова играет роль только тогда, когда вы хотите прочитать более одного байта одновременно.

Если вы хотите прочитать 4-байтовое значение, которое пересекает границу слова, вы можете сделать это с помощью 4 однобайтовых операций чтения, сдвига и ORing. Это намного медленнее, чем простое чтение.

0 голосов
/ 05 марта 2010

Я помню, как сталкивался с этой проблемой при работе с MIPS.Я предлагаю сначала загрузить целое слово, а затем посмотреть на два младших бита и использовать их, чтобы определить, какие 8 бит из 32 вы действительно хотите загрузить.сделать?Вы пишете код сборки MIPS?Или вы пытаетесь реализовать процессор MIPS в аппаратном обеспечении?

Если вы просто пишете ассемблерный код для MIPS, я понимаю, что вы можете использовать lb с любым адресом памяти, и он будет обрабатывать его правильно.Единственное время, когда вам нужно беспокоиться о правильном выравнивании, это когда вы используете инструкцию lw.

0 голосов
/ 05 марта 2010

Выровненный по полуслову адрес оканчивается двоичным 0 (делится на десятичное 2, количество байтов в полуслоте). Выровненный по словам адрес оканчивается двоичным 00 (делится на десятичную 4, количество байтов в слове).

Да, формулировка и таблица немного тупые.

...