Сборник по задачам и примерам Assembler



         

Использование счетчика меток реального времени TSC - часть 4


pushad сохранение всех регистров общего назначения в стеке db 0fh,31h :RDTSC - окончание профилирования

mov val_2+4.edx

mov val_2,eax

профилируем pushad и popad с учетом двух shrd pushad popad

db 0fh.31h;RDTSC

:теперь необходимо получить чистое время профилирования, для чего результат необходимо скорректировать (уменьшить) на количество тактов процессора, :потребное для выполнения пар команд PUSHAONPOPAD и M0V

subeax, val_2

jnc $+4 :учет заема из старшего разряда

dec edx

subedx. val_2+4 ;в edx:eax кол-ва тактов для выполнения 2-х команд ;PUSHAD\POPAD и 2-х SHRD

mov eax,val_l

sub val_2.eax

mov eax.val_l+4

jnc $+7 :учет заема из старшего разряда при выполнении предыдущего вычитания

dec val_2+4

sub val_2+4,eax

;в val_2:val_2+4 - чистое количество тактов процессора для выполнения профилируемого участка

popad восстановление всех регистров общего назначения из стека

:выводим

bin_dec_fpu val_2_q. string_pack, adr_string_pack, len_string_pack. adr_string. len_string

endm .data

val_2 label dword val_2_q dq 0 val_l label dword

dq 0

:b string_pack исходное значение из val_2_q в упакованном десятичном формате string_pack dt О

len_string_pack=$-string_pack adr_stringpack dd string_pack

string db 18 dup (0) максимальный результат состоит из 18 десятичных цифр

len_string=$-string adr_string dd string

.code

профилируем выполнение команд работы со стеком profiIer_i n val_l

push eax

pop eax

profiler_out val_l. val_2 exit: :выход из программы

Составьте тестовые примеры и «поиграйтесь» с данной программой. Обратите внимание, что при задании пустой последовательности команд между парой макросов profilerjn и profi1er_out все равно получается некоторая величина профилирования. Она постоянна, ее источник — сами команды RDTSC, которые требуют тактов процессора для своего исполнения. Эту величину можно скорректировать разными способами, но можно и не трогать, а учитывать при подведении окончательных результатов тестирования нужного вам фрагмента кода. На компьютере автора эта величина равна 52.

В этой программе для визуализации результатов профилирования разработана макрокоманда bi n_dec_fpu, производящая перевод значения из двоичной системы в десятичную.

 




Содержание  Назад