Quote:
2. Подскажите простейший код как на асме эффективно реализовывается CASE OF.
Никак, это очень сложный оператор и простейших решений нет.
Если количество вариантов мало и они сильно разрежены, то могут скомпилировать линейную последовательность сравнений с условными переходами.
Если количество вариантов велико и они сильно разрежены, то компилируют дерево двоичного поиска на серии сравнений и условных переходов.
Если вне зависимости от количества вариантов они компактны, то компилируют таблицу подстановки (которую разыменовывают исходным значением, использую его как индекс).
И, наконец, для смешанного варианта очень большого переключателя применяются все 3 способа, когда исходный переключатель разбивают на подблоки и к каждому подблоку применяют свою стратегию реализации. Плюс по каждому варианту могут быть разные способы реализации, т.к. при компиляции будут доступны в каждом случае разные свободные регистры (для неортогональной системы команд) и могут быть разные требования к памяти и коду (например, избыток памяти данных или избыток памяти кода). Вплоть до компиляции обычного вызовы процедуры с параметрами.
Не удивлюсь, если там экспоненциальная сложность (оптимизация двоичных выражений во всяком случае такой точно является).
По крайней мере, я умудрялся завешивать компилятор Си++, когда генерировал ему на вход свой код (используя Си в качестве эдакого ассемблера для реализации своей системы).