Вопрос № 57811: В меня такая проблема я читаю книгу (П.НОРТОН ПРОГРАММНО-АППАРАТНАЯ ОРГАНИЗАЦИЯ КОМПЬЮТЕРА IBM PC 1984). Так эта книга очень устарела. Посоветуйте кто может и знает книгу по свежие. Я сам учу ассемблер....Вопрос № 57832: Здравствуйте ! Как можно узнать и вывести на экран время выполнения участка программы от 1 до 2 ?...
Вопрос № 57.811
В меня такая проблема я читаю книгу (П.НОРТОН ПРОГРАММНО-АППАРАТНАЯ ОРГАНИЗАЦИЯ КОМПЬЮТЕРА IBM PC 1984). Так эта книга очень устарела. Посоветуйте кто может и знает книгу по свежие. Я сам учу ассемблер.
Отправлен: 05.10.2006, 15:53
Вопрос задал: Linrofl (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: mix_mix
Здравствуйте, Linrofl!
Рекомендую "Аппаратные средства IBM PC" Михаила Гука 2003г.
Книжка очень полезная и занимательная, в общем рекомендую.
Ответ отправил: mix_mix (статус: 8-ой класс)
Ответ отправлен: 05.10.2006, 17:50
Отвечает: Олег Владимирович
Здравствуйте, Linrofl!
Сам изучал асму по книге "Микропроцессоры Intel: архитектура, программирование, интерфейсы." Выпуск 2005г.
Оч. хорошее описание асмы, рассказывается также об аппаратных особенностях процессоров, о периферийных устройствах.
Удачи!
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 4-ый класс)
Ответ отправлен: 05.10.2006, 18:39
Отвечает: Николай Орлов
Здравствуйте, Linrofl!
Для ДОС могу посоветовать рассылку уважаемого Калашникова(Kalashnikoff.ru), книгу Юрова -Ассемблер. Для win32
wasm.ru - рекоммендую, довольно много информации.
А так же Зубков Ассемблер для DOS,WINDOWS,UNIX. Объяснение не ахти(на мой взляд), но можно использовать как
справочник для ДОС.
С уважением,ENS.
--------- Если нет выхода ищу вход.
Ответ отправил: Николай Орлов (статус: 5-ый класс)
Ответ отправлен: 05.10.2006, 20:02
Отвечает: Луковкин Николай Иванович
Здравствуйте, Linrofl!
Советую Вам (если решили изучать Ассемблер) преобрести очень хороший самоучитель А.Крупник "Ассемблер", в которой автор подробно учит как писать программы(особенно в среде Windows), с последующим исследованием их в отладчике (0llyDbg,AFD Pro)!В этой книге автор подробно объясняет, как необходимо установить компилятор MASM, с последующей настройкой, для того чтобы он мог функционировать на Вашем ПК!
Заказать книгу через почту можете на сайте ozon.ru
--------- Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Здравствуйте ! Как можно узнать и вывести на экран время выполнения участка программы от 1 до 2 ?
Приложение:
Отправлен: 05.10.2006, 20:22
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Вiктор
Здравствуйте, Whiteman!
Узнайте время прохождения точки 1 и время прохождения точки 2, и найдите разницу.
например, для виндовс (с использованием GetTickCount):
1:
call GetTickCount
mov time1, eax
...
2: call GetTickCount
sub eax, time1
mov time1,eax
Теперь в еах должно быть время выполнения участка между (1) и (2) в милисекундах.
(это конечно если я ничего не напутал)
Но это не подходит для очень коротких участков, т.к. насколько я знаю, GetTickCount не слишком точная функция, она выдаёт время рывками.
Для ДОС можно использовать досовские команды получения времени или относительного времени (я не помню их). Но сама идея та же: запоминаем момент времени при прохождении точки 1, затем вычетаем это значение из значения времени в момент прохождения точки 2.
--------- можно ли считать баги двигателем прогресса, если учесть, что они заставляют улучшать программы?
Ответ отправил: Вiктор (статус: 6-ой класс)
Ответ отправлен: 05.10.2006, 21:16
Отвечает: Wild_one
Здравствуйте, Whiteman!
Я бы не советовал использовать GetTickCount. Дело в том, что винда - многозадачная ОС и наш процесс может быть прерван. Лучше использовать процедуры:
BOOL GetProcessTimes( HANDLE hProcess, PFILETIHE pftCreationTime, PFILETIME pftExitTime, PFILETIME pftKernelTime, PFILETIME pftUserTime);
GetThreadTimes не годится для высокоточного измерения временных интервалов — для этого в Windows предусмотрено двe специальные функции:
BOOL QueryPerformanceFrequency(LARGE_INTEGER* pliFrequency);
BOOL QueryPerformanceCounler(LARGE_INTEGER* pliCount);
Подробнее у Джеффри Рихтера
"Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows"
Ответ отправил: Wild_one (статус: 5-ый класс)
Ответ отправлен: 05.10.2006, 23:03
Отвечает: Jekyll
Здравствуйте, Whiteman!
самый простой способ поставить перед 1 timeGetTime и после 2, разницу выводить.
Ответ отправил: Jekyll (статус: 2-ой класс)
Ответ отправлен: 06.10.2006, 00:07
Отвечает: ADSota
Здравствуйте, Whiteman!
1:
db 0fh,31h ;rdtsc - получить число тактов в edx:eax
push edx
push eax
...
2:
db 0fh,31h ;rdtsc - получить число тактов в edx:eax
pop ebx
sub eax,ebx
pop ebx
sbb edx,ebx
mov ebx,FREQ;поделить на частоту процессора
div ebx;в EAX - время в секундах
--------- Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 06.10.2006, 08:50
Отвечает: Николай Орлов
Здравствуйте, Whiteman!
Можно посчитать количество тактов(а зная частоту процессора узнать время,
если частота процессора 1Mhz, то в секунду он выполнит 1миллион тактов).
Об этом очень подробно написано у Агнера Фога "Оптимизация для процессоров семейства Pentium: 30. Тестирование скорости ".
Только потом следует вставить процедуру вывода десятичных чисел, но это уже совсем другая мстория.
С уважением,ENS.
--------- Если нет выхода ищу вход.
Ответ отправил: Николай Орлов (статус: 5-ый класс)
Ответ отправлен: 06.10.2006, 20:00