Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ Время работы программы

Автор: 18192123 15.05.2008 22:03

Здраствуйте! Вот такое задание: вывести в файл время работы программы (неважно какой - например, программы выводящей на экран текстовое сообщение и ждущей нажатия любой клавиши для завершения работы)..Приведите пожалуста пример, как реализовывается такое задание, как узнать, сколько работала программа и как вообще осуществляется вывод в файл?

И ещё такой вопрос: как на экран, пока работает программа можно выводить системное время?

Автор: andriano 16.05.2008 2:27

1. Реализация времени зависит от ОС. Поэтому без ее указания ответить на вопрос невозможно.
2. Чтобы узнать, сколько работала программа, определяется время перед началом ее работы и после окончания, а потом из второго вычитается первое.
3. Интересует файловый вывод вообще или как вывести конкретно время? Файловый вывод тоже определяется ОС.
4. Периодически запрашивать время и обновлять его на экране. Помню, в DOS писал функцию, которая одновременно опрашивает клавиатуру и обновляет показания времени. В Windows время лучше выводить по прерыванию таймера.

Автор: 18192123 16.05.2008 2:44

1. Windows XP
2. А как это самое время узнать?
3. с файловым выводом впервые сталкиваюсь, так что интересует как и он сам, так и вывод именно времени работы.


Автор: andriano 16.05.2008 2:58

1-2. Если к точности не предъявляются слишком высокие требования, то GetTickCount будет достаточно. Погрешность - десяток или несколько десятков мс. Если требования к точности очень высокие, то QueryPerformanceCounter/QueryPerformanceFrequency, но есть целый букет недостатков.
3. CreateFile, WriteFile, CloseHandle.

Автор: мисс_граффити 16.05.2008 5:35

andriano, на ассемблере?...

18192123, у меня про ввод-вывод (в том числе файловый) есть методичка. могу кинуть, если хочешь

Автор: volvo 16.05.2008 5:57

Цитата
на ассемблере?...
Опять же, смотря на каком ассемблере - "invoke GetTickCount" еще никто не отменял...

Автор: andriano 16.05.2008 11:26

Да хотя бы и ручками распихать стек и call нужную процедуру. (в WinAPI вызовы производятся в стиле Паскаля, т.е. параметры запихиваются в стек в обратном порядке - в вершине стека лежит последний, а стек освобождает вызываемая процедура)

Автор: 18192123 17.05.2008 1:55

Цитата(мисс_граффити @ 16.05.2008 2:35) *

andriano, на ассемблере?...

18192123, у меня про ввод-вывод (в том числе файловый) есть методичка. могу кинуть, если хочешь

да, было бы неплохо))

Автор: 18192123 18.05.2008 0:46

Нашла функцию, которая отвечает за получение времени:


mov AH, 2Ch
int 21h



тогда в регистре CH-час,CL-мин,DН-с,DL-1/100с..
И у меня вопрос: как теперь всю эту информацию вывести на экран?

Автор: andriano 18.05.2008 2:38

Цитата(18192123 @ 15.05.2008 23:44) *

1. Windows XP

Цитата(18192123 @ 17.05.2008 21:46) *

Нашла функцию, которая отвечает за получение времени:

mov AH, 2Ch
int 21h



тогда в регистре CH-час,CL-мин,DН-с,DL-1/100с..
И у меня вопрос: как теперь всю эту информацию вывести на экран?

1. Пишешь про WinXP, а функцию нашла для DOS.
2. Если уж пишешь под DOS и нужно не определить текущее время, а как написано в заголовке темы, измерить время выполнения прграммы, лучше читать показания счетчика времени BIOS, находящиеся по адресу 0040:006c. Измеряется в "тиках", частота которых составляет 18.2 Гц.
3. На экран выводится строка, следовательно, нужную тебе величину нужно преобразовать в строку, после чего ее можно вывести одной из стандартных функций BIOS/DOS.

Автор: hardcase 18.05.2008 20:49

Хммм всегда смущали подобные темы связанные с выполнением подобной элементарщины.

А если написать на C код (десяток строк с применением WinAPI) и попросить компилятор сгенерировать листинг на ассемблере?

Автор: Despot 19.05.2008 5:38

Цитата(hardcase @ 18.05.2008 17:49) *

А если написать на C код (десяток строк с применением WinAPI) и попросить компилятор сгенерировать листинг на ассемблере?


Офтоп конечно, но всё же вопрос. Как поросить компилятор сгенерировать этот самый листинг? У меня вот есть BC 3.1 и BuilderC++.

Автор: hardcase 21.05.2008 13:51

Цитата(Despot @ 19.05.2008 2:38) *


Офтоп конечно, но всё же вопрос. Как поросить компилятор сгенерировать этот самый листинг? У меня вот есть BC 3.1 и BuilderC++.
Обратиться к документации компилятора и найти нужный ключ запуска.
Для майкрсофтовского компилятора это вариации ключа /FA