От этого время не увеличивается, т.к. время, затраченное на все эти инструкции, в конце вычитается из времени теста и получается чистое время, затраченное только на выполнение тестируемого кода. Без времени на опрос счётчика. Именно для этого и вызывается rdtsc несколько раз. И поэтому и сохраняется время на опрос самого счётчика в переменных counterL/counterH. Так что 364 тика - это время, потраченное именно на тестируемый код, а не на опрос счётчика. Реальное время. Если вместо твоего цикла вставить пустую строку (убрать цикл между Init_Clock() и Stop_Clock()), то время будет 0 тиков ровно. xor eax,eax / cpuid вызываются тоже не от нехрен делать, а чтобы проц доделал свои делишки перед началом теста и был готов на все 100 edx может понадобиться, если тест затяжной и количество тиков перевалит за 4 Гигатика. Как правильно мерять, можно найти у А.Фога (утилитка wintest)
Это все понятно - для чего вызывается cpuid тоже известно, сам раньше так и делал; edx - заранее не нужен - меряем небольшой участок кода. Ну а так в общем согласен - все делаешь правильно -)).