Шаг 118.
Управляющие структуры языка С. Оператор switch

    На этом шаге мы рассмотрим представление оператора выбора.

    Оператор switch весьма часто употребляется в функциях окон. Хорошее знание его ассемблерной структуры поможет вам легче отыскивать эти функции в море ассемблерного кода.

switch (i) 
{
  case 1: 
     .   .   .   .   .
     break;
case 3:
     .   .   .   .   .
     break;
case 5:
     .   .   .   .   .
     break;
}

    A вот соответствующий данной структуре ассемблерный код.

    DEC EAX
    JZ  L1
    SUB EAX, 2
    JZ  L2
    SUB EAX, 2
    JZ  L3
    JMP L4
L1:
     .   .   .   .   .
    JMP L4
L2:
     .   .   .   .   .
    JMP L4
L3:
     .   .   .   .   .
L4:

    Структура достаточно интересная. Такой подход позволяет наилучшим образом оптимизировать проверку большого количества условий.

    В действительности оператор выбора может кодироваться и другим способом. Вот еще один возможный вариант представления оператора выбора:

    CMP  EAX,10 
    JE   L1 
    СМР  ЕАХ,5 
    JE   L2
    СМР  ЕАХ, 11 
    JE   L3
     .   .   .   .   .


    Примечание. Эти варианты характерны для трансляторов фирмы Borland, например, для Turbo Pascal. Более совершенные трансляторы реализуют мультиветвление при помощи косвенного перехода по таблице. При этом время выполнения перехода одинаково для всех вариантов мультиветвления.

    На следующем шаге мы рассмотрим циклы.




Предыдущий шаг Содержание Следующий шаг