С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
 
Kseniya1004
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 13
1

Вызов подпрограммы по срабатыванию таймера

28.11.2017, 21:54. Просмотров 288. Ответов 4

помогите пожалуйста, вроде правильно, но выбивает ошибку syntax error in expression в HWND DWORD ?
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
.486 
.model flat, stdcall 
option casemap :none 
;константи
STD_OUTPUT_HANDLE  equ -11
STD_INPUT_HANDLE  equ -10
TIME_PERIODIC    equ 1 
 
include \masm32\include\windows.inc 
include \masm32\include\masm32.inc 
include \masm32\include\kernel32.inc 
include /masm32/include/user32.inc 
include \masm32\include\msvcrt.inc 
include \masm32\include\winmm.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\winmm.lib
includelib \masm32\lib\msvcrt.lib 
 
COOR  STRUC
X  WORD ?
Y  WORD ?
COOR  ENDS
 
.data 
Format db '%d',0
HANDL DWORD ?
HANDL1 DWORD ?
    STR2 DB "Пример таймера в консоли ",0
    STR3 DB 100 dup(0)
    FORM DB "Число вызовов: %lu",0
    BUF  DB 200 dup(?)
    NUM  DWORD 0
    LENS DWORD ? 
    CRD  COOR <?>
    ID  DWORD ? 
    HWND DWORD ?
_DATA ENDS
 
.code 
Start: 
 
mov ax,-12 ; заносим значение а в регистр АХ 
mov bx,4 ; заносим значение ч а регистр ВХ 
imul ax,bx ; умножаем а на х 
mov bx,4 ; заносим значение b в регистр ВХ 
sub ax,bx ; отнимаем b от ах 
mov cx,-8 ; заносим значение у в регистр СХ 
imul cx,cx ; умножаем у на у (получим у^2) 
mov bx,4 ; вносим значение b в регистр ВХ 
imul cx,bx ; умножим у^2 на b, сохранится в регистре СХ 
add ax,cx ; добавим значение СХ к значению в АХ 
mov bx,-13 ; внесем значение d в регистр ВХ 
add ax,bx ; добавим d к значению в АХ 
; получим итоговый результат в регистре АХ 
 
 
 
 
invoke crt_printf, addr Format, ax ; invoke crt_printf - вывод числа в формате 
invoke crt__getch ; ожидание нажатия клавиши 
invoke crt__exit, 0 ; выход из программы 
 
;установить таймер
    PUSH TIME_PERIODIC  
    PUSH 0
    PUSH OFFSET TIME    
    PUSH 0             
    PUSH 1000         
    CALL timeSetEvent@20
    MOV ID,EAX          
;закрыть таймер
    PUSH ID
    CALL timeKillEvent@4
;закрить консоль
    CALL FreeConsole@0
;завершить работу проги
    PUSH 0
    CALL ExitProcess@4
 
TIME  PROC TimeID:DWORD,TimeRsv2:DWORD,TimeDat:DWORD, TimeRsv4:Dword,TimeRsv5:DWORD
    PUSHA       
POPA         
    RET 20       
TIME  ENDP
 
end Start
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2017, 21:54
Ответы с готовыми решениями:

Закрытие программы по срабатыванию таймера
Есть программа с 1 формой. Можно ли сделать во 2 форме таймер, для которого...

Вызов makeSomeThing() из-под Таймера
Доброго времени суток. Необходимо задать выполнение makeSomeThing(),...

Вызов функции по завершению таймера
Помогите написать код, что бы вызвалась функция в момент, когда таймер...

Вызов процедуры DrawCell из таймера
Нужно периодически обновлять графику в StringGrid . Подскажите как вызвать...

Вызов события таймера по клику кнопки
Доброго времени суток! Событие таймера настроено с частотой раз в минуту,...

4
ФедосеевПавел
Модератор
3859 / 2179 / 895
Регистрация: 01.02.2015
Сообщений: 7,263
28.11.2017, 23:04 2
Цитата Сообщение от Kseniya1004 Посмотреть сообщение
выбивает ошибку
"При компиляции получаю сообщение об ошибке"

Где-то в недрах include уже определён тип данных HWND и переменную не получается так назвать. Назовите иначе это поле.
0
Kseniya1004
0 / 0 / 0
Регистрация: 03.04.2017
Сообщений: 13
28.11.2017, 23:42  [ТС] 3
спасибо)
подскажите ещё, пожалуйста, как сделать, чтоб таймер вызывал подпрограмму вывода текста на консоль при каждом срабатывании(т.е. каждую секунду должна открываться консоль с текстом и закрываться)?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
;установить таймер 
 PUSH TIME_PERIODIC; периодический вызов
 PUSH 0 
 PUSH OFFSET TIME  ; вызываемая таймером процедура 
 PUSH 0             ; точность вызова таймера 
 PUSH 1000          ; вызов через одну секунду 
 CALL timeSetEvent@20
 MOV ID,EAX
 
 ;закрыть таймер 
 PUSH ID
 CALL timeKillEvent@4
0
ФедосеевПавел
Модератор
3859 / 2179 / 895
Регистрация: 01.02.2015
Сообщений: 7,263
28.11.2017, 23:47 4
Не знаю. Нужно почитать о таймерах и WinAPI. Но это смогу лишь на выходных.

Добавлено через 44 секунды
Я бы начал с поиска timeSetEvent в MSDN.
0
Jin X
4636 / 1391 / 162
Регистрация: 14.12.2014
Сообщений: 2,686
Записей в блоге: 8
Завершенные тесты: 2
02.12.2017, 22:59 5
Kseniya1004, в чём вопрос конкретно? Как создавать консоль и закрывать её?
Assembler
1
2
        invoke  AllocConsole
        invoke  FreeConsole
Только какой в этом смысл?

Я вообще не совсем понимаю, почему у вас половина кода написано в стиле TASM, т.е. с использованием timeSetEvent@20 вместо timeSetEvent, например? И push + call вместо invoke...

p.s. Приложение может иметь только одну консоль.

Добавлено через 10 секунд
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
.686P
.MODEL Flat,StdCall
OPTION CASEMAP:NONE
 
INCLUDE         \MASM32\INCLUDE\WINDOWS.INC
INCLUDE         \MASM32\INCLUDE\KERNEL32.INC
INCLUDE         \MASM32\INCLUDE\USER32.INC
INCLUDE         \MASM32\INCLUDE\MSVCRT.INC
INCLUDE         \MASM32\INCLUDE\WINMM.INC
 
INCLUDELIB      \MASM32\LIB\KERNEL32.LIB
INCLUDELIB      \MASM32\LIB\USER32.LIB
INCLUDELIB      \MASM32\LIB\MSVCRT.LIB
INCLUDELIB      \MASM32\LIB\WINMM.LIB
 
TimerProc       PROTO   :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
 
.DATA
 
Msg             DB      'Hello World',0
 
.CODE
 
Start:
 
                invoke  timeSetEvent, 1000, 0, ADDR TimerProc, 0, TIME_PERIODIC or TIME_CALLBACK_FUNCTION
                invoke  Sleep, 5500
                invoke  ExitProcess, NULL
 
TimerProc       PROC    uTimerID, uMsg, dwUser, dw1, dw2
                invoke  AllocConsole
                invoke  crt_printf, ADDR Msg
                invoke  FreeConsole
                ret
TimerProc       ENDP
 
END             Start
1
02.12.2017, 22:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2017, 22:59

Вызов подпрограммы
Вечер добрый. Я совсем плохо соображаю в Fortran и програмировании вообще,...

вызов подпрограммы
у меня задание написать программу вычисления обьема цилиндра. простая...

Вызов dll из подпрограммы
Я сделал dll и вызов функции из мейна основной программы Я хочю, в мейне...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru