Автор Тема: [tasm] работа с таймерами  (Прочитано 6370 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн barsikellin

  • Коллежский регистратор
  • *
  • Сообщений: 2
  • Репутация: 0
[tasm] работа с таймерами
« : јРЩ 14, 2009, 06:33:01 pm »
Само задание: написать программу для измерения скорости вывода графики на экран (пикселей/c) в режиме 320*200*256 цветов. Результат выдать в десятичном коде. Опрос таймера выполнять при помощи функций DOS


Сделал заполнение экрана пикселями, но вот с таймерами никак не смог разобраться.


TITLE A09GRX2 (EXE)
.MODEL SMALL
.STACK 64
.286   ;---------------------------------------------------------------
        .CODE
A10MAIN PROC FAR
        MOV AX, @data ;
        MOV DS, AX    ;
        MOV ES, AX    ;
        MOV AH, 0FH   ;
        INT 13H       ;
        PUSH AX       ;
        CALL B10MODE
        CALL C10DISPLY
        MOV AH, 10H
        INT 16H
        POP AX
        MOV AH, 00H
        INT 10H
        MOV AX, 4C00H
        INT 21H
A10MAIN ENDP
B10MODE  PROC NEAR
         MOV AX, 0013H
         INT 10H
         MOV AH, 0BH
         MOV BX, 0007H
         INT 10H
         RET
B10MODE ENDP
C10DISPLY PROC NEAR
          PUSHA
          MOV BX, 00
          MOV CX, 00
          MOV DX, 00
C20:
        MOV AH, 0CH
        MOV AL, BL
        INT 10H
        INC CX
        CMP CX, 320
        JNE C20
        MOV CX, 00
        INC BL
        INC DX
        CMP DX, 200
        JNE C20
        POPA
        RET
C10DISPLY ENDP
END A10MAIN

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: [tasm] работа с таймерами
« Ответ #1 : јРЩ 14, 2009, 06:48:53 pm »
До зарисовки выполняешь RDTSC (это команда такая) и сохраняешь регистр eax после отрисовки опять вызываешь RDTSC и вычитаешь из eax сохраненое значение - получишь сколько тактов прошло за время отрисовки
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/

Оффлайн barsikellin

  • Коллежский регистратор
  • *
  • Сообщений: 2
  • Репутация: 0
Re: [tasm] работа с таймерами
« Ответ #2 : јРЩ 14, 2009, 06:52:28 pm »
До зарисовки выполняешь RDTSC (это команда такая) и сохраняешь регистр eax после отрисовки опять вызываешь RDTSC и вычитаешь из eax сохраненое значение - получишь сколько тактов прошло за время отрисовки
я ассемблер вижу 4 раз в жизни, можно куском кода это же?

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: [tasm] работа с таймерами
« Ответ #3 : јРЩ 14, 2009, 09:31:20 pm »
Код: (assembler) [Выделить]
rdtsc
push ax

;тут код рисования

rdtsc
pop bx
sub ax, bx
;после всего этого в ax будет кол-во тактов
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/

Оффлайн Адамантэус

  • Коллежский советник
  • *****
  • Сообщений: 725
  • Репутация: 24
  • Пол: Мужской
  • Телезритель
Re: [tasm] работа с таймерами
« Ответ #4 : јРЩ 16, 2009, 02:35:16 pm »
 Только количество ассемблерных команд (упоминаемых тактов), не всегда точно определяет время вывода. А для того что-бы оценить время надо считывать основной канал таймера, по порту 40h, хотя это объёмная функция не для начинающих но можно для начала и просто считать из порта :'(
« Последнее редактирование: јРЩ 17, 2009, 11:26:37 pm от Адамантэус »

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: [tasm] работа с таймерами
« Ответ #5 : јРЩ 16, 2009, 08:41:37 pm »
Можно и системный таймер перехватить.. но опять же это более чем для начального освоения
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/

Оффлайн yurakms

  • Коллежский регистратор
  • *
  • Сообщений: 1
  • Репутация: 0
Re: [tasm] работа с таймерами
« Ответ #6 : ѕЪвпСам 15, 2009, 04:54:12 am »
Помогите пожалуйста, необходимо в tasm (DOS) сделать следующую прогу: вводишь цифру от 1 до 9, срабатывает таймер отчёта времени (в зависимости от введённой цифры, если 2, то от 2х до 0, если 9, то от 9 до 0 и т.д.) и на нулевой секунде срабатывает встроенная пищалка компа. Ассемблер знаю очень плохо, дня 3 мучился, но прога получается кривая и выводит не то, что нужно =( очень нужно! Заранее огромное спасибо!!  :'(

Оффлайн Ruslan11

  • Коллежский регистратор
  • *
  • Сообщений: 14
  • Репутация: 0
Re: [tasm] работа с таймерами
« Ответ #7 : ґХЪРСам 05, 2009, 03:30:26 pm »
Помогите пожалуйста, необходимо в tasm (DOS) сделать следующую прогу: вводишь цифру от 1 до 9, срабатывает таймер отчёта времени (в зависимости от введённой цифры, если 2, то от 2х до 0, если 9, то от 9 до 0 и т.д.) и на нулевой секунде срабатывает встроенная пищалка компа. Ассемблер знаю очень плохо, дня 3 мучился, но прога получается кривая и выводит не то, что нужно =( очень нужно! Заранее огромное спасибо!!  :'(

Не знаю, как насчёт писчалки, но нужно зделать примерно так: перейти в защищённый режим, на обработке клавы определить цифру, сделать cend 1, kolvo - цифра*1000, на обработчике таймера проверяь эти переменные, и делать что нужно.
     код ascii узнавать так:
    and  al, 7Fh
    push edi
    mov  edi, ascii
    add  di, ax
    mov  al, [edi]
    pop  edi

ascii    db 0,'1234567890-=',0,0,'qwertyuiop[]',0,0,'asdfghjkl;',"'`",0,0,'zxcvbnm,./',0,'*',0,' ',0, 0,0,0,0,0,0,0,0,0,0, 0,0, '789-456+1230.', 0,0
kolvo db 0
cend db 0               

P.S это фасм, под тасм не писал.
« Последнее редактирование: ґХЪРСам 05, 2009, 03:41:49 pm от Ruslan11 »

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: [tasm] работа с таймерами
« Ответ #8 : ґХЪРСам 05, 2009, 05:36:27 pm »
Защищенный режим тут не нужен. Делаешь ввод с терминала символа, вычитаешь из него '0' (sub al, '0'), читаешь из CMOS значение секунд, прибавляешь свое число(введенное), учитывая что секунд 60(вычти если больше получится) и сохраняешь в переменную, потом устанавливаешь прерывание на таймер (8 прерывание вроде) и по нему читаешь из кмос значение секунд, если совпало с твоим можешь убирать прерывание, и включаешь пищалку
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/

Оффлайн max9105

  • Коллежский регистратор
  • *
  • Сообщений: 1
  • Репутация: 0
Re: [tasm] работа с таймерами
« Ответ #9 : јРав 01, 2010, 12:30:55 pm »
помогите написать задачу . Мне нужно написать программку в TASM что она выводина на экран первое четверостишее стишка ( в лесу родилась ёлочка ) И чтобы каждое слово было разным цветом .
Помогите пожалуйста :'(

Оффлайн Veliant

  • Надворный советник
  • *****
  • Сообщений: 331
  • Репутация: 7
  • Пол: Мужской
Re: [tasm] работа с таймерами
« Ответ #10 : јРав 05, 2010, 05:07:07 pm »
Делается это не оч сложно.
Пишется текст в формате
text db xx,'c',xx,'c'
где xx - цвет фона и текста, а с - символ
и потом копируете весь блок в видеопамять начиная с b000:0000
Помощь в программировани и различные статьи
http://libcoder.blogspot.com/