Высокие и низкие адреса памяти и ветвление

Может ли кто-нибудь объяснить мне, что означают высокие и низкие адреса в контексте следующего вопроса?:

По определению, «старшие» адреса — это большие числа без знака, а «младшие» адреса — это маленькие числа без знака.

Каков самый старший адрес, на который может быть передано управление с помощью инструкции beq (переход на равные), которая находится по адресу физической памяти 0x320ACB48?


person KJP    schedule 06.03.2013    source источник
comment
Вы можете проверить это: stackoverflow.com/questions/6950230/   -  person nrz    schedule 06.03.2013


Ответы (1)


Ответ зависит от конкретного чипа MIPS и его MMU (если он есть).

Допустимые адреса для 32-битных инструкций — от 0 до 4GB-4. Однако, если память присутствует не во всем диапазоне, или если есть устройства с отображением памяти, или если у вас включено преобразование виртуальных адресов в физические, вы вообще не сможете выполнять код в произвольном месте или в осмысленном месте. способ.

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

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

Теперь у beq также есть ограничение на то, как далеко он может передавать управление от того места, где он (beq) находится сам. beq может передать управление только своему расположению +/- примерно 217 байт (=128 КБ).

Итак, теоретически beq, расположенный по адресу 0x320ACB48, может передать управление в любое место (кратное 4) от 0x320ACB48 + 4 - 32768*4 до 0x320ACB48 + 4 + 32767*4.

Если beq расположен рядом с адресом 0, он может передать управление почти 4 ГБ, если ЦП не запрещает перенос адресов. Точно так же, если beq находится рядом с точкой 4 ГБ, он может передать управление на адрес, близкий к 0, если, опять же, процессор не запрещает перенос адресов.

person Alexey Frunze    schedule 06.03.2013
comment
не могли бы вы объяснить это предложение еще раз: теоретически beq, расположенный по адресу 0x320acb48, может передать управление в любую ячейку, кратную 4. 0x7fff или 32 767? Мне трудно понять вашу логику. - person curiousX; 24.02.2019
comment
Инструкции @curiousX MIPS (если мы не говорим о таких расширениях, как microMIPS и MIPS16e) имеют длину 4 байта и всегда находятся по адресам, кратным 4. Нет смысла использовать 16-битное смещение в качестве байтового смещения, это было бы быть отходами. Итак, 16-битное смещение в инструкции перехода умножается на 4. - person Alexey Frunze; 25.02.2019