Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2010, 21:48   #1
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию таймер

Доброго времини суток .
нужно создать программу на ассемблере " таймер " который высчитает время выполнепия команд запущеных после его запуска . Выходит так:
1. запустили программу таймер
2. программа создаёт файл например с названием Time в который будет записано название задач которые потом запущены , и время выполнения каждой из задач :
Код:
add ax,bx ___________00.00.15
sub ax,bx ___________00.00.06
работать будет в DOS
есть таймер ...

proc timer
       mov ah,2ch
       int 21h
       cmp dl,[time]
       je end_timer
       mov [time],dl
delay:
       mov ah,2ch
       int 21h
       cmp dl,[time]
       je delay
       mov [time],dl
end_timer:
       ret
endp
помогите довести до ума ,предложите свою версию программы (приведённый таймер использовать не обезательно - может кто знает полегче )

Последний раз редактировалось Stilet; 20.09.2010 в 09:40.
Hunter557 вне форума Ответить с цитированием
Старый 18.09.2010, 16:11   #2
BVOG
Python,C++,ASM,Php
Пользователь
 
Аватар для BVOG
 
Регистрация: 29.08.2010
Сообщений: 58
По умолчанию

Надо делать через прерывание таймера.
Хакер - это не ламер с завышенным самомнением, а программист с заниженной зарплатой.
Нелегка и неказиста жизнь простого программиста.
BVOG вне форума Ответить с цитированием
Старый 18.09.2010, 20:48   #3
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

да нет я не согласен с прерыванием по таймеру. Так как здесь нужно учитывать время на обработку самого прерывания (сохранения регистров в стек)
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 18.09.2010, 20:53   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
да нет я не согласен с прерыванием по таймеру. Так как здесь нужно учитывать время на обработку самого прерывания (сохранения регистров в стек)
Не существенно, т.к. таймер далеко не такой точный. (18 раз в секунду увеличивается, если не ошибаюсь)
Если нужно мерить сколько будет выполняться отдельные команд, то нужно смотреть в сторону rdtsc
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 18.09.2010, 21:11   #5
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

Цитата:
Сообщение от Goodwin98 Посмотреть сообщение
то нужно смотреть в сторону rdtsc
А смогли бы пояснить по подробнее пожалуста
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 18.09.2010, 21:15   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

В пентиумах появился счетчик тактов, который увеличивается на 1 каждый такт. Команда rdtsc считывает этот счетчик в пару EDX:EAX.
Т.е. для того, чтобы замерить сколько выполнялись те или иные команды, нужно запомнить начальное состояние счетчика, а затем прочитать его после, ну и поделить на кол-во тактов в секунде(милисекунде, наносекунде, смотря как мерить).
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 19.09.2010, 21:35   #7
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию

а можно ли подробно ознакомится с вашими идеями?
напишите текст программы - который вы считаете правильным
я сам пробывал писать - не работает , да и я не знаю точно как это реализовать
Hunter557 вне форума Ответить с цитированием
Старый 19.09.2010, 21:41   #8
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Мне лично просто лень писать код. Покажите, что вы пытались, может и поправим....
Собственно в этой теме есть исходник программы для таких целей. Он несколько запутан для новичка, наверное, но все же можно его почитать (компилятор фасм, ОС - виндовс)
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 19.09.2010 в 21:46.
Goodwin98 вне форума Ответить с цитированием
Старый 19.09.2010, 21:50   #9
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию

Таймер № 1

Код:
a440seg segment 'code'

      assume cs:a440seg
      
a440  proc   far

      mov    al,0b6h
      out    67,al
      
      mov    ax,2711
      out    66,al
      mov    al,ah
      out    66,al
      
      in     al,97
      or     al,03
      out    97,al
      
      int    20h
      
a440  endp

a440seg  ends

      end
Таймер № 2
Код:
proc timer
       mov ah,2ch
       int 21h
       cmp dl,[time]
       je end_timer
       mov [time],dl
delay:
       mov ah,2ch
       int 21h
       cmp dl,[time]
       je delay
       mov [time],dl
end_timer:
       ret
endp
а как реализовать программу таймера с программами ариф. команд и чтоб скорость выполнения команд заносились в отдельный файл например "time" - не знаю. (посмотрите пост №1)

Код:
RDTSC            // Помещает в EDX:EAX значение внутреннего счетчика процессора
      mov T1, eax    // Запомнили младшую часть (старшая вряд ли изменится)

      dec ecx          // тестовая команда

      RDTSC            // новое значение счтечика
      mov T2, eax

      writeln(T2-T1:6);  // Выводим разницу в значениях
разница в значениях- это разное время или кол. тактов ?

если кол. тактов - тогда нужно делить на частоту проца , для этого её нужно забивать в прогу ... но как быть если использовать на разных компах ( не буду же я на каждом компе указывать в проге его частоту ) может зделать чтоб прога сама находила частоту проца а потом делала все расчёты ? но как это замутить?

Последний раз редактировалось Stilet; 20.09.2010 в 09:44.
Hunter557 вне форума Ответить с цитированием
Старый 21.09.2010, 11:58   #10
Hunter557
Пользователь
 
Аватар для Hunter557
 
Регистрация: 20.02.2010
Сообщений: 15
По умолчанию

Хорошо я понял в чём прикол - всё предложенное выше довольно сложно реализовать. Но если использовать таймер процессора и чтоб он засекал выполнение не одной команды , а цикл из 1000 nop например ( чтобы минимальное время было в секундах ) это проще .
1 запускаем программу таймер
2 программа создаёт файл в который запишет только время старта и остановки таймера
3 стартует таймер фиксируется текущее время и заносит его в созданный файл и пошло виполнение заданного цикла например из 1000 одинаковых действий
4 цикл закончился и таймер фиксирует текущее время и сново заносит его в тот же файл ,и программа останавливается. Потом можно зайти в файл и посмотреть время старта и финиша цикла .Или чтоб этот файл автоматически открывался для просмотра .Программа под DOS.
Может кто подскажет как это реализовать ?

вот Goodwin98 подтолкнул на прогу внутр. таймера проца.

RDTSC // Помещает в EDX:EAX значение внутреннего счетчика процессора
mov T1, eax // Запомнили младшую часть (старшая вряд ли изменится)

dec ecx // тестовая команда (заменить её на цикл из 1000 nop )

RDTSC // новое значение счтечика
mov T2, eax

writeln(T2-T1:6); // Выводим разницу в значениях

помогите собрать всё в прогу

Последний раз редактировалось Hunter557; 21.09.2010 в 12:14.
Hunter557 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер Ins1De Общие вопросы C/C++ 2 26.05.2010 22:29
Таймер на С++ Александр Елис Помощь студентам 3 26.01.2010 16:30
Таймер graff Общие вопросы C/C++ 11 04.07.2009 01:36
Таймер IVANSour Общие вопросы Delphi 2 18.01.2009 14:41
Таймер Stanislav Общие вопросы Delphi 3 26.11.2007 06:52