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

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

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

18192123, у меня про ввод-вывод (в том числе файловый) есть методичка. могу кинуть, если хочешь
volvo
Цитата
на ассемблере?...
Опять же, смотря на каком ассемблере - "invoke GetTickCount" еще никто не отменял...
andriano
Да хотя бы и ручками распихать стек и call нужную процедуру. (в WinAPI вызовы производятся в стиле Паскаля, т.е. параметры запихиваются в стек в обратном порядке - в вершине стека лежит последний, а стек освобождает вызываемая процедура)
18192123
Цитата(мисс_граффити @ 16.05.2008 2:35) *

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

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

да, было бы неплохо))
18192123
Нашла функцию, которая отвечает за получение времени:

mov AH, 2Ch
int 21h



тогда в регистре CH-час,CL-мин,DН-с,DL-1/100с..
И у меня вопрос: как теперь всю эту информацию вывести на экран?
andriano
Цитата(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
Хммм всегда смущали подобные темы связанные с выполнением подобной элементарщины.

А если написать на C код (десяток строк с применением WinAPI) и попросить компилятор сгенерировать листинг на ассемблере?
Despot
Цитата(hardcase @ 18.05.2008 17:49) *

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


Офтоп конечно, но всё же вопрос. Как поросить компилятор сгенерировать этот самый листинг? У меня вот есть BC 3.1 и BuilderC++.
hardcase
Цитата(Despot @ 19.05.2008 2:38) *


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