Вопрос по организации кода

Тема в разделе "WASM.ASSEMBLER", создана пользователем DuXeN0N, 12 ноя 2009.

  1. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    В таблицу переходов например + jmp [jump_table+eax]
    Если веток много, это однозначно будет быстрее чем cmp/jcc/cmp/jcc... даже если их не тупо расставить, а на основании дерева к примеру ветвления делать.
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    Учитывая что идентификаторы в своей программ ты можешь ставить какие угодно например
    Код (Text):
    1. .const
    2. IDYES=0 IDNO=1 IDCANCEL=2
    3. .data
    4. handels dd save_file, close, nothing
    5. .code
    6. jmp handels[eax*4]
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    знаю, упоминал здесь
     
  4. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Ещё MSVC6 такое делал (особенно в длинном switch (uMsg) в оконной процедуре, где номера сообщений сильно отличались, и таблица переходов была бы слишком длинной):
    Код (Text):
    1.         sub eax,ID_CANCEL ; = 2
    2.         jz   .id_cancel
    3.         sub eax,ID_YES - 2 ; 6 - 2 = 4
    4.         jz .id_yes
    5.         sub eax,ID_IDNO - (2 + 4); 7 - 6 = 1
    6.         jnz .default
    7. .id_no:
    8.         ...
    Правда, я не уверен, что это быстрее)
     
  5. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    угум. таблица переходов. что касается разбросанных идентефикаторов - тут обратите внимание на моё "в некоторых случаях". если прога довольно серьёзная - то наверняка таблицка получится длинной и идентефикаторы будут почти по порядку, что и даст студии возможность заменить условные переходы табличкой. я х.з. делают ли это компиляторы, но если знать частоту вызова case'ов, то можно соптимизировать - на первое место ставить те, которые максимально уменьшат неопределённость выбора.
     
  6. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Делают.
    Intel C++ в листинге даже вероятности ветвлений в процентах в комментарии пишет.
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    то же знаю, упоминается здесь