· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› Кратность адреса

Посл.отвђт Сообщенiе


Дата: Окт 10, 2003 09:57:45

Как сделать так, чтобы адрес массива был кратен 16


Дата: Окт 10, 2003 10:47:13

mov eax,адрес
add eax,00000000Fh
and eax,0FFFFFFF0h


Дата: Окт 10, 2003 11:35:48


Дата: Окт 10, 2003 12:01:11

Four-F
Johnikum
Дело в том что в теоии я представляю как это делается!!! А как на практике это представить?


Дата: Окт 10, 2003 13:00:45

emergenter
На бумажке распиши по битам как все происходит - намного понятней станет


Дата: Окт 10, 2003 15:33:05

Хм... emergenter, какая же это теория... По-моему это голая практика.


Дата: Окт 10, 2003 18:26:40

Если объявить статический массив в сегменте с типом выравнивания PARA, то он автоматически будет выровнен, если стоит первым:
Data Segment Use32 Para Public 'DATA'
  array dd  64 dup (0)
Data EndS


Если нужен динамический массив тогда надо аллоцировать на 15 байт больше и после аллокации надо самому выровнять адрес (см. 3 инструкции выше...). Единственное, перед де-аллокацией придётся передавать оригинальное значение аллоцированного адреса. Можно сделать небольшую структуру:
AlignedPtr Struc
  alp_Allocated DD ?
  alp_Aligned DD ?
AlignedPtr EndS

и написать пару методов:
AlignedPtr_GetMem
AlignedPtr_FreeMem
AlignedPtr_ResizeMem


Дата: Окт 10, 2003 18:28:46

Я имею ввиду как нужно применять команду ALIGN и в каких случаях на сколько выравнивать!!! Может перед циклами на одно значение саму функцию на другую, может вообще каку нибудь метку... Вот я и пытаю разобраться где на что лучше выравнивать чтобы максимально увеличить производительность!!!


Дата: Окт 10, 2003 19:11:58

ALIGN можно ставить где угодно, насколько я помню. Единственное, это значение ALIGN не должно превышать параметр заданный для сегмента где используется ALIGN. Пример:
.CODE

...
ALIGN 16
...

TASM выдаёт ошибку: "Segment alignment not strict enough". Из листинга видно, что .CODE имеет ALIGN=4.


Дата: Окт 11, 2003 12:52:07

[ emergenter: Вот я и пытаю разобраться где на что лучше выравнивать чтобы максимально увеличить производительность!!! ]

Тогда выравнивать по границе кеша процессора, чтоб весь код по возможности вмещался в кэш. Это было очень актуально для ранних пней, как там щас с этим дела обстоят я не знаю. Посмотри доку "How to optimize for the Pentium" http://www.agner.org/assem/


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073