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



         

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


;на входе:

;string_bin_qword - адрес 64-битной ячейки (описанной dt) с преобразуемым

:двоичным целым числом

:string_pack - адрес 80-битной ячейки (описанной dt), в которую сохраняется

упакованное 10-е значение

:adr_string_pack - ячейка с адресом string_pack (описанной dd)

:len_string_pack - длина string_pack

:adr_string - ячейка с адресом string (описанной dd). В string помещаются

;символы десятичных цифр для вывода.

:len_string - размер string (18 байт)

:.........преобразуем bin->dec

finit

f 11d string_bin_qword :заносим в сопроцессор двоичное целое число fbstp string_pack извлекаем упакованное десятичное

¦-------------распакуем..........

Ids si.adr_string_pack

add si.len_string_pack-2 :на конец string_pack (18 упак. дес. цифр)

les di.adr_string

movcx.9 ;9 пар упакованных десятичных цифр

xor ax,ax cycl: xor ax,ax

std ;string_pack обрабатываем с конца

lodsb ;в al очередные 2 упакованные десятичные цифры

распаковываем - аИ=младшая, а1=старшая

shi ax.4

rol al .4

or ах.ЗОЗОп :преобразуем в символьное представление

xchg ah .al :ап-младшая. al-старшая

eld :в string записываем с начала

stosw

loop cycl

;.........выводим на консоль...............................

' mov bx.l стандартный дескриптор - экран

mov cx.len_string

Ids dx.adr_string -.формируем указатель на строку string

mov ah.40h :номер функции DOS

int 21h :выводим

jc exit ;переход в случае ошибки

endm

profileMn macro val_l:REQ

;val_l - ячейка памяти 64 бита (2x32) для сохранения момента :начала профилирования ("грязного") pushad сохранение всех регистров общего назначения в стеке

db Ofh.31h;RDTSC mov val_l+4.edx

mov va!_l.eax popad восстановление всех регистров общего назначения из стека

endm

profiler_out macro val_l:REQ. val_2:REQ

:val_l - ячейка памяти 64 бита (2x32). 8 которой при входе в макрос сохранен :момент начала профилирования командой profilerjn. Далее в макросе эта ячейка :содержит результат профилирования - число тактов процессора :val_2 - ячейка памяти 64 бита (2x32). в которой сохраняется момент ("грязный") окончания профилирования




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