Забыл где прочел. по асемблеру arm или(и) risc. Цитата, примерно так
"Мы создает таблицу векторов прерываний, всего их 86, каждый по 4 байта" 86*4=356, ближайшая степень 2 512, 9. значит применяем директиву выравнивания
p2align 9 А зачем что-то там вообще выравнивать? Вроде как все и так выровнено)
Вот ни разу не понимаю. Вроде понимаю зачем нужно выравнивание на высоком уровне(с++/с#) при работе с структурами.( при 1-8 байт данных). Но к примеру почему по 512. А я больше видел.
Типа машинной слово 4 байта. Ну или если нужно 8. Но зачем больше? Значит если любые данные выравнивать по 4 байта. То следующая команда, переменная будет всегда выравнена по 4. А зачем по 512?
Почему нужно 512-356 байт нулями заполнять, почему нельзя продолжить дальше. Ведь следующая после 86*4 байт инструкция(или переменная) будет выровнена, и иметь валидный адрес так же как и при align 3,4 и более/
Не много подумал посчитал, может в этом дело. Короче, если начальный адрес данных выровнен по n битов, то эти следующие n бит могут быть индексами элементов внутри. А значит для получения элемента допустим table[index_nBit] можно применять
операцию ИЛИ вместо сложения. Что быстрее. В этом ли дело
.data
.p2align 9
table_interputs:
.word 1
.word 2
#......... .word 86
что бы получить элемент table_interputs[10], если младшие 9 бит==0 то можно начальный адрес младшие биты установить индексом*scale, вместо более долгой операции сложения
Верно ли рассуждаю