Взять ассемблерный код программы, для каждой команды по справочнику определить количество тактов, за которые она выполняется. Пройти по коду программы, определив все ветвления и количество проходов каждого цикла. Просуммировать такты всех выполняемых команд, умножить на время выполнения одного такта.
На современных процессорах с вычислительным конвейером расчёт невозможен, так как количество тактов на команду однозначно не определено.