На этом шаге мы рассмотрим представление оператора выбора.
Оператор 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 . . . . .
На следующем шаге мы рассмотрим циклы.