Что именно эта инструкция делает? Я знаю, что он пытается выровнять данные с кратным определенным числом, но зачем вам это нужно? Есть ли эквивалентная инструкция для других сборщиков?инструкция «выровнять» по MIPS
ответ
Вы обычно выравниваете данные, чтобы получить лучшую производительность. Для большинства процессоров доступ к памяти имеет некоторое ограничение при отсутствии доступа к конкретным границам байтов. Для других сборщиков часто есть какой-то pseudo-op.align
. Большинство компиляторов также выравнивают свои структуры данных (хотя вы можете отключить его для целей отладки).
См. Также Wikipedia entry.
Обратите внимание, что неэмулируемые системы MIPS могут даже сбой, если вы попытаетесь получить доступ к неаудированным ячейкам памяти (см. here и here).
Есть ли эквивалентная инструкция в других сборщиках?
MASM имеет Align директиву: http://msdn.microsoft.com/en-us/library/dwa9fwef(VS.80).aspx
Это выравнивает все на п-й степени двойки. Ее не является инструкцией, его директива, которая будет переведена в инструкции
Что касается его использования, для exampe:
инструкции MIPS32 всегда 32 бит. Поэтому каждая инструкция должна начинаться с границы слова. Добавляя директиву .align перед запуском кода, выравнивает вещи до 32 бит. Это имеет много преимуществ, в том числе, что для получения команды требуется только 1 доступ к памяти, и, вероятно, это будет полезно для кэша команд.
Как насчет сохранения двойного поплавка в стеке? Нужно ли выравнивание по 8 байт вправо? –
Да, удваивает выравнивание до 64 бит – Tom
Спасибо за дополнительные разъяснения по внешним ссылкам! –