У меня есть эта директива сборки, называемая .p2align
, которая генерируется gcc
из источника программы C.
Как я понимаю, выравниваемый доступ быстрее, чем неглавный, а также программа asm
не автоматически выравнивает места памяти или оптимизирует доступ к памяти, поэтому вам нужно это сделать.
Я не могу прочитать этот .p2align 4,,15
, особенно последнюю часть, 15
.
Пропуская тот факт, что, по-видимому, gcc
генерирует 2 ,
вместо 1, как сообщается многими документами; я получаю, что этот фрагмент asm
выравнивает память таким образом, что каждое место занимает 2 ^ 4 бит, что означает 16 бит, поэтому я считаю, что справедливо сказать, что WORD
имеет длину 16 бит в этом случай.
Теперь, что означает 15
? Это несколько бит для чего? Начинается ли подсчет с 0
, поэтому "реальная" величина равна 16 вместо 15?
EDIT:
Я просто перевел один и тот же источник C как на 32-битный, так и на 64-разрядный код, память всегда выравнивается точно так же с той же директивой .p2align 4,,15
. Почему это?