|
|
| Посл.отвђт | Сообщен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 |