инструкция «выровнять» на MIPS

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


person Eliseo Ocampos    schedule 20.06.2009    source источник


Ответы (3)


Обычно вы выравниваете данные, чтобы повысить производительность. Для большинства процессоров доступ к памяти имеет некоторые ограничения, если доступ не осуществляется к определенным границам байтов. Для других ассемблеров часто существует своего рода псевдооператор .align для это. Большинство компиляторов также выравнивают свои структуры данных (хотя вы можете отключить это для целей отладки).

См. также эту запись в Википедии.

Обратите внимание, что неэмулированные системы MIPS могут даже дать сбой, если вы попытаетесь получить доступ к невыровненным ячейкам памяти (см. здесь и здесь).

person schnaader    schedule 20.06.2009
comment
Спасибо за дополнительные разъяснения во внешних ссылках! - person Eliseo Ocampos; 21.06.2009

Есть ли аналогичная инструкция в других ассемблере?

MASM имеет директиву Align: http://msdn.microsoft.com/en-us/library/dwa9fwef(VS.80).aspx

person ChrisW    schedule 20.06.2009

Он выравнивает все в энной степени двойки. Это не инструкция, это директива, которая будет переведена в инструкции

Что касается его использования, например:

Инструкции mips32 всегда имеют длину 32 бита. Таким образом, каждая инструкция должна начинаться на границе слова. Добавление директивы .align перед запуском кода приводит к выравниванию до 32 бит. Это имеет много преимуществ, в том числе то, что для выборки инструкции требуется только 1 доступ к памяти, и что это, вероятно, будет полезно для кэша инструкций.

person Tom    schedule 20.06.2009
comment
Как насчет хранения двойного числа с плавающей запятой в стеке? Ему нужно выравнивание по 8 байтам, верно? - person Vikram Dattu; 03.02.2017
comment
Да, двойники выравниваются по 64 битам - person Tom; 14.02.2017