0 / 0 / 1
Регистрация: 15.05.2011
Сообщений: 25
1
FASM

Вывести текущее время в разных форматах (в 12 и 24 часовом)

04.06.2012, 21:06. Показов 1035. Ответов 3
Метки нет (Все метки)

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
include 'WIN32AX.INC'
.data                           ;сегмент данных
szDisplayName DB "Часы", 0    
hWnd DD 0                      
hInst DD 0
szClassName DB "WinClock_Class", 0
                            ; переменные для элемента "Button"
ButtonClassName DB "BUTTON", 0
ButtonText DB "Выход", 0
hwndButton DD 0
                            ; переменные для элемента "Static"
LabelClassName DB "STATIC", 0
LabelText DB " "     ; " 00:00:00 "
Hour DB "00"
DB ":"
Min DB "00"
DB ":"
Sec DB "00"
DB " ",0
hwndLabel DD 0
msg MSG
wc WNDCLASS
STime SYSTEMTIME ; идентификаторы элементов управления
ButtonID EQU 1;
LabelID EQU 2;
TimerID EQU 3
.code                            ;сегмент кода
start:
push NULL
call dword ptr GetModuleHandle
mov [hInst], EAX
 
; ------------ заполнение структуры WNDCLASS требуемыми параметрами---------------
mov [wc.style], CS_HREDRAW or CS_VREDRAW
mov [wc.lpfnWndProc], WndProc     ;установить [wc.lpfnWndProc]=WndProc
mov [wc.cbClsExtra], NULL         ;установить [wc.cbClsExtra]= NULL
mov [wc.cbWndExtra], NULL         ;установить [wc.cbWndExtra]= NULL
push [hInst]                      ;поместить в стек [hInst]
pop [wc.hInstance]            ;взять из стека [wc.hInstance]
mov [wc.hbrBackground], COLOR_BTNFACE+1   ;установить [wc.hbrBackground]=COLOR_BTNFACE+1
mov [wc.lpszMenuName], NULL             ;установить [wc.lpszMenuName]=NULL
mov [wc.lpszClassName], szClassName     ;установить                           [wc.lpszClassName]=szClassName 
push IDI_APPLICATION            ;поместить в стек IDI_APPLICATION
push NULL                   ;поместить в стек NULL
call dword ptr LoadIcon         ;функция загрузки заданного значка (пиктограммы) из исполняемого  (.EXE) файла, связанного с экземпляром приложения. 
 
mov [wc.hIcon], EAX         ;установить [wc.hIcon]=EAX
push IDC_ARROW              ;поместить в стек IDC_ARROW 
push NULL                   ;поместить в стек NULL
call dword ptr LoadCursor       ;функция загружающая указанный курсор из исполняемого (.EXE) файла, связанного с экземпляром приложения. 
 
mov [wc.hCursor], EAX           ;установить [wc.hCursor]=EAX
lea EAX, [wc]               ;загрузка исполнительного адреса
push EAX                        ;поместить в стек EAX
call dword ptr RegisterClass
 
 
 
; -------------------------- создать окно зарегистрированного класса-----------------------------
push NULL
push [hInst]
push NULL
push NULL
push 200                        ; высота окна
push 300                        ; ширина окна
push 100                        ; координата Y
push 100                        ; координата X
push WS_DLGFRAME + WS_SYSMENU + WS_MINIMIZEBOX
push szDisplayName
push szClassName
push WS_EX_OVERLAPPEDWINDOW
call dword ptr CreateWindowEx
mov [hWnd], EAX
push SW_SHOWNORMAL
push [hWnd]
call dword ptr ShowWindow
push [hWnd]
call dword ptr UpdateWindow
 
; --------------------------------- цикл обработки сообщений----------------------------------------
StartLoop:
push 0
push 0
push NULL
lea EAX, [msg]
push EAX
call dword ptr GetMessage
cmp EAX, 0
je ExitLoop
lea EAX, [msg]
push EAX
call dword ptr TranslateMessage
lea EAX, [msg]
push EAX
call dword ptr DispatchMessage
jmp StartLoop
ExitLoop:
mov EAX, [msg.wParam]
push EAX
call dword ptr ExitProcess
 
; ------------------------ оконная процедура приложения ------------------------------------------
proc WndProc hWin, uMsg, wParam, lParam
cmp [uMsg], WM_CREATE
je WMCreate
cmp [uMsg], WM_COMMAND
je WMCommand
cmp [uMsg], WM_TIMER
je WMTimer
cmp [uMsg], WM_DESTROY
je WMDestroy
jmp WMOver
WMCreate:
 
; --------------------- создать окно зарегистрированного класса Button-------------------------
push NULL
push [hInst]
push ButtonID
push [hWin]
push 30                        ; высота окна
push 60                        ; ширина окна
push 100                       ; координата Y
push 120                       ; координата X
push WS_CHILD + WS_VISIBLE + BS_DEFPUSHBUTTON
push ButtonText
push ButtonClassName
push NULL
call dword ptr CreateWindowEx
mov [hwndButton], EAX
push EAX
call dword ptr SetFocus
 
; -------------------- создать окно зарегистрированного класса Label---------------------------
push NULL
push [hInst]
push LabelID
push [hWin]
push 20                       ; высота окна
push 90                       ; ширина окна
push 50                       ; координата Y
push 105                      ; координата X
push WS_CHILD + WS_VISIBLE + WS_BORDER + ES_CENTER + ES_AUTOHSCROLL
push LabelText
push LabelClassName
push NULL
call dword ptr CreateWindowEx
mov [hwndLabel], EAX
; ----- создать Timer, период - 1000 мс
push TmProc
push 1000
push TimerID
push [hWin]
call dword ptr SetTimer
call RefreshTime
xor EAX, EAX
ret
WMCommand:
mov EAX, [wParam]
cmp [lParam], 0
je ExitWMC
cmp AX, ButtonID
jne ExitWMC
shr EAX,16
cmp AX, BN_CLICKED
jne ExitWMC
push NULL
call dword ptr PostQuitMessage
xor EAX, EAX
ExitWMC:
ret
WMTimer:
call RefreshTime
xor EAX, EAX
ret
WMDestroy:
push NULL
call dword ptr PostQuitMessage
xor EAX, EAX
ret
WMOver:
push [lParam]
push [wParam]
push [uMsg]
push [hWin]
call dword ptr DefWindowProc
ret
endp
 
; ----------------- процедура обработки события WM_TIMER ----------------------------------
proc TmProc hWin, uMsg, wParam, lParam
call RefreshTime
ret
endp
 
; --------------------------------------- обновить время ------------------------------------------------
RefreshTime:
push    STime
call dword ptr GetLocalTime    ; вызов функции GetLocalTime
mov  ax,[STime.wHour]             ; установить ax=[STime.wHour]
call Int2Str                      ; вызов функции Int2Str
mov  word[Hour],cx            ; установить word[Hour]=cx
mov  ax,[STime.wMinute]        ; установить ax=[STime.wMinute]
call Int2Str                      ; вызов функции Int2Str
mov  word[Min],cx             ; установить word[Min]=cx
mov  ax,[STime.wSecond]        ; установить ax=[STime.wSecond]
call Int2Str                      ; вызов функции Int2Str
mov  word[Sec],cx             ; установить word[Sec]=cx
push LabelText                ; поместить в стек LabelText
push [hwndLabel]                  ; поместить в стек [hwndLabel]
call dword ptr SetWindowText   ; вызов функции GetLocalTime
ret
 
 
; ------------------------------- int(ax) -> строка ASCII(cx) ------------------------------------------
Int2Str:                               ;Начало подпрограммы
 
aam     ;коррекция ASCII-формата после     умножения  
mov cx,ax                    ;установить сx=ax
add cx,3030h                 ; коды символа
xchg    ch,cl                    ;перестановка операндов
ret
.end start
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2012, 21:06
Ответы с готовыми решениями:

Вывести время в 24-часовом формате
Задание 1. Создать проект для решения задачи, используя условный оператор. на экран выводить...

Текущее время в разных странах
Не могли бы помочь. Как сделать чтоб пользователь вводил определённую команду или текст, например с...

<% now %> Каким образом вывести дату в разных форматах ??
При вызове стандартной функции &lt;% now %&gt; сервер выдает дату следующего формата 3/3/2002...

Вывести текущее время в формате ЧЧ:ММ:СС
я хочу из time(0), получить время (ЧЧ:ММ:СС). что я делаю не так? или есть более лёгкий способ его...

3
156 / 53 / 4
Регистрация: 28.05.2012
Сообщений: 120
04.06.2012, 23:31 2
Создаёшь дополнительный контрол, например, чекбокс. И в оконной процедуре обрабатываешь его сообщения, устанавливая/сбрасывая глобальную переменную, например, dwTimeFormat. Например, если она равна 1, то формат 12 часовой, если 0 - 24 часовой. Далее, при обновлении времени делаешь проверку на эту переменную. Если она = 1, делишь число часов на 12 и выводишь полученный остаток.
Пример работы с чекбоксами и обработки поступающих от них сообщений (на паскале, под асм переписать, имея ваш пример, элементарно):
http://decoding.narod.ru/api/c... ckbox.html
1
608 / 408 / 8
Регистрация: 26.04.2012
Сообщений: 2,067
05.06.2012, 08:44 3
Subrealist, можно еще радиобатон заделать для удобства пользователю мне кажется с батоном лучше будет
0
0 / 0 / 1
Регистрация: 15.05.2011
Сообщений: 25
05.06.2012, 10:03  [ТС] 4
как из этой проги сделать таймер с тремя кнопками (стоп/пуск, +1 секунда, +10 секунд)

Добавлено через 4 минуты
очень срочно нужно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2012, 10:03
Помогаю со студенческими работами здесь

Вывести текущее время и текущую дату
создать программу, которая выводит текущее время и текущую дату. var DateTime : TdateTime;...

Как в формах вывести текущее время?
Как запрограммировать вывод текущего времени в отдельное окошечко формы и чисел от 1 до 9, в...

Как получить текущее Текущее Unix epoch время в милисекундах?
Хочу получить через эксель выписку егрюл egrul.nalog.ru Общий порядок такой: 1) Отправляю ПОСТ...

Как в Java ME вывести на экран текущее время?
Пробовал через класс DateField, но там нужно выставлять самому дату и время, а мне нужно что-бы он...

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

Работа триггера. Как вывести текущее время
Есть таблица Заявки, в ней хочу удалить строки и писать в таблицу История что была удалена заявка...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru