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