2009-06-20 6 views
7

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

ответ

9

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

См. Также Wikipedia entry.

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

+0

Спасибо за дополнительные разъяснения по внешним ссылкам! –

0

Это выравнивает все на п-й степени двойки. Ее не является инструкцией, его директива, которая будет переведена в инструкции

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

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

+0

Как насчет сохранения двойного поплавка в стеке? Нужно ли выравнивание по 8 байт вправо? –

+0

Да, удваивает выравнивание до 64 бит – Tom