Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 2
Регистрация: 05.09.2012
Сообщений: 27
1

Программа, которая через заданный промежуток времени с консоли выдает сообщение на экран

05.09.2012, 05:10. Показов 2087. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Требуется написать программу таймер на ассемблере, которая через заданный промежуток времени с консоли выдает сообщение на экран.

Я начал с самого простого просто попытался сделать все через функции 1Ah прерывания, но ничего не получилось, программа не хочет переходить на процедуру , как бы я не старался...


Вот как я пытаюсь установить таймер:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
; это установка 4ah на процедуру таймер
mov ah,25h
mov al,4Ah
mov dx,offset timer
push ds
push cs
pop ds
int 21h
pop ds
 
;а это вычисление времени и допустим прибавление некоторого промежутка времени, допустим 5 сек
mov ah,02h
int 1Ah
mov ah,06h
add dh,5
int 1Ah
 
;ожидание сообщения
mov ah,01h
int 21h
 
 
;сама процедура таймер 
timer proc
push AX
mov AH,0Eh
mov AL,'@'
int 10h
mov al,20h
out 20h,al
pop ax
iret
timer endp
то есть просто через 5 сек должно выводиться @ ....но не выводиться.

Help кто знает в чем проблема
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2012, 05:10
Ответы с готовыми решениями:

Нужна программа которая бы сама нажимала ссылку через заданный промежуток времени, помогите пожалуйста
Нужна программа которая бы сама нажимала ссылку через заданный промежуток времени, помогите...

Выполнить действие через заданный промежуток времени
Как сделать так, чтобы через каждый промежуток времени(15мин) выполнялось определённое действие?

Выполнение действий через заданный промежуток времени
Нужен самый простой пример програмки на си++ (работаю в вижуал студио), которая будет каждый равный...

Alarm не срабатывает через заданный промежуток времени
Всех приветствую. Мне нужно написать будильник. Для решения этой задачи я решил использовать класс...

8
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,927
06.09.2012, 08:09 2
А пробуете наверно через DOSBOX?
Оно и не будет работать. Досбокс не генерирует прерывания 4a. Недоработка.
А так у меня на XP все работает.
1
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
06.09.2012, 10:15 3
Как вариант можно попробовать через int 1Ch:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
               org  100h
start:         jmp  main
 
_int1C:         pushf
        inc byte ptr cs:flag
        cmp byte ptr cs:flag,18*5   ; got 5 sec. signal?
        jz  @@1         ; yes, processing
@@0:        popf
        jmp dword ptr cs:old_int1C      ; go back
@@1:        mov byte ptr cs:flag, 0
        push    ax
;       push    cx
;       mov ah, 05h
;       mov cx, 07h ;'a'
;       int 16h
;       pop cx
        mov al, 7           ; send BEEP to console
        int 29h
        pop ax
        jmp     @@0
old_int1C:  dd  ?
flag:       db  0
 
main:
        push    cs
        push    cs
        pop ds
        pop es
                mov     ax, 351Ch                                     ; получить в ES:BX адрес прерывания 8h
            int     21h
            mov     word ptr cs:old_int1C, bx     ; запомним старый адрес 08
            mov     word ptr cs:old_int1C+2, es    ; прерывания
                mov     ax, 251Ch                                             ; установим вектор на 08
            mov     dx, _int1C        ; прерывание
            int     21h
; ввод строки. каждые ~5 сек. пищим //появляется буква "а"
            mov ah, 0Ah
        mov dx, inpbuf
        int 21h
 
remove: 
            mov dx, word ptr cs:old_int1C     ; возвращаем вектор прерывания
            mov ds, word ptr cs:old_int1C+2    ; на место
            mov ax, 251Ch
                int 21h
exit:                                   ; выход
            int 20h
inpbuf: db  255         ; наибольшая длина строки
len:    db  ?                       ; сюда вернется настоящая длина
buf:    db  255 dup(?)              ; тут будет то, что ввели
2
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
06.09.2012, 11:20 4
Цитата Сообщение от neverend12 Посмотреть сообщение
Help кто знает в чем проблема
mov ax,254Ah
mov dx,offset cs:timer
1
0 / 0 / 2
Регистрация: 05.09.2012
Сообщений: 27
08.09.2012, 02:37  [ТС] 5
Спасиб народ! Помогло!
0
0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 14
16.12.2012, 21:43 6
Charles Kludge, а как сделать чтобы программа выводила сообщение, а затем восстанавливала исходное содержание экрана, все это через промежутки времени?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
16.12.2012, 22:00 7
Втупую сохранять часть видеопамяти, выводить сообщение и восстанавливать.
Для этого потребуется:
MEM 0040h:004Ah - VIDEO - COLUMNS ON SCREEN
Size: WORD
MEM 0040h:004Eh - VIDEO - CURRENT PAGE START ADDRESS IN REGEN BUFFER
Size: WORD
MEM 0040h:0062h - VIDEO - CURRENT PAGE NUMBER
Size: BYTE
MEM 0040h:0084h - VIDEO (EGA/MCGA/VGA) - ROWS ON SCREEN MINUS ONE
Size: BYTE
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
16.12.2012, 22:45 8
А с переключением видеостраниц?
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
16.12.2012, 22:59 9
AFP, дык одна строчка на чёрном экране будет выглядеть... уныло.
0
16.12.2012, 22:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2012, 22:59
Помогаю со студенческими работами здесь

автоудаление определенной папки через заданный промежуток времени
Пожалуйста , подскажите программу (или инструмент в Windows 7) , которая могла бы безвозратно...

Вход на страницу и её закрытие через заданный промежуток времени
подскажите команду для входа на страницу и выхода с нее с заданным интервалом времени? Добавлено...

Определить количество бактерий через заданный промежуток времени
Каждая бактерия ежеминутно делится на 2. Если в начале у нас была одна бактерия, то сколько...

Таймер (выполнение кода через заданный промежуток времени)
Всем привет, подскажите, как создать внутренний таймер, то есть через что бы через некоторое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru