Для вызова одной из 10 процедур? В общем случае - эффективнее будет вызов через процедурную переменную, это компилируется в одну единственную инструкцию: call [proc_var] // где proc_var - адрес переменной, например [ebp - 10] CASE же, в большинстве случаев компилируется примерно так: mov eax, [X_var] // case X of test eax, eax je case_0 // 0: sub eax, 1 je case_1 // 1: // ...и т. д. для всех остальных вариантов, затем уже сами вызовы: case_0: call proc_0 jmp end case_1: call proc_1 jmp end // ...и т. д. т. е. даже в лучшем случае (если выполняется самый первый вариант, X = 0) - будет выполнено как минимум 5 инструкций, каждый следующий вариант - ещё +2 инструкции. Конечно если оптимизация включена, то оптимизатор может заменить простой перебор например на двоичный поиск, но толк от этого будет только в плане ускорения перебора значений, минимальное же количество выполняемых инструкций от этого не убавится (скорее даже наоборот, увеличится).