Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 23.02.2012
Сообщений: 11
1

выключение компьютера

22.03.2012, 21:11. Просмотров 3154. Ответов 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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
.model small,stdcall
.stack 300h
.486
.data
menu    db "1.Установить будильник.",13,10
    db "2.Часы реального времени.",13,10
    db "3.Системные часы.",13,10
    db "ESC - Виход$"
 
real    db "Часы реального времени:$"
system  db "Системные часы:$"
SetWU   db "Установить будильник:$"
SetRTm  db "Установить часы реального времени:$"
SetSTm  db "Установить системные часы:$"
Hours   db "Введите часы->$"
Min db "Введите минуты->$"
Num db 3 dup (0)
GetT    db 3 dup ('$')
Clr db 40 dup (' '),'$'
old dw 0
old_seg dw 0
sound   dw 250,250,250,100,100,0
.code
start:
    mov ax,@data
    mov ds,ax
    mov es,ax
    xor ax,ax
    mov al,3        ; видеорежим
    int 10h
    mov ah,01h
    mov ch,20h
    int 10h
mov cx,offset menu
call writeln,cx
call First
@@1:
    call GetRealTime
    call SystemTime
;проверяем наличие символа
    mov ah,01h
    int 16h
    jz  @@1 ;bufer pust
;извлекаем символ:
    mov ah,00h
    int 16h
    cmp al,27
    je exit
    cmp al,'1'
    je SetWUp
    cmp al,'2'
    je SetRT
    cmp al,'3'
    je SetST
    jmp @@1
SetWUp:
    call SetWakeUpTime
    jmp @@1
SetRT:
    call SetRealTime
    jmp @@1
SetST:
    call SetSystemTime
jmp @@1
 
exit:
    cli
    mov al,0bh
    out 70h,al
    in  al,71h
    and al,11011111b
    mov ah,al
    mov al,0bh
    out 70h,al
    mov al,ah
    out 71h,al
    mov ax,old
    mov es:[128h],ax
    mov ax,old_seg
    mov es:[128h+2],ax
    sti
    mov ah,07h
    int 1ah
    mov ah,4ch
    int 21h
;------------------------------------------------------------------
MyPL proc far
    pusha
    mov al,0b6h
    out 43h,al
    in  al,61h          ; подключить динамик
    or  al,3
    out 61h,al
    mov ax,3500     ; выбрали частоту
    out 42h,al          ;загрузили частоту
    mov al,ah
    out 42h,al
;------- организовали задержку
    push dx
    mov  si,15      ; длительность задержки
    mov  ah,0       ; считываем состояние таймера
    int  1ah
    mov  bx,dx      
    add  bx,si      ;добавляем задержку
Delay1:
    int  1ah        ; считываем состояние таймера
    cmp  dx,bx      ; длительность истекла
    jne  Delay1
    pop  dx
;---------------delay
    in  al,61h
    and al,0fch     ; отключить динамик
    out 61h,al
    popa
    iret
endp MyPL
;-------------------------------------------------------------------
SetMyProcAlarm proc
 push 00h
 pop es
 call SaveOld
 cli
 lea ax,mypl
 mov es:[128h],ax
 push cs
 pop ax
 mov es:[128h+2],ax
 mov al,0bh
 out 70h,al
 in  al,71h
 or  al,00100000b
 mov ah,al
 mov al,0bh
 out 70h,al
 mov al,ah
 out 71h,al
 sti
    ret
endp SetMyProcAlarm
;-------------------------------------------------------------------
SaveOld proc
    mov ax,es:[128h]
    mov old,ax
    mov ax,es:[128h+2]
    mov old_seg,ax
    ret
endp SaveOld
;-------------------------------------------------------------------
SetSysteMtime proc
call PosScreen,14,1
call writeln,offset SetSTm
call PosScreen,15,3
call writeln,offset Hours
call GetChar
mov si,0
mov [GetT+si],al
call GetChar
inc si
mov [GetT+si],al
call StrToInt,offset GetT
push dx
call PosScreen,16,3
call writeln,offset min
call GetChar
mov si,0
mov [GetT+si],al
call GetChar
inc si
mov [GetT+si],al
call StrToInt,offset GetT
pop cx
mov ch,cl
mov cl,dl
    mov ah,2dh
    int 21h
call ClrStr,14
call ClrStr,15
call ClrStr,16
    ret
endp SetSystemTime
;-------------------------------------------------------------------
ClrStr proc yy:word
call PosScreen,yy,0
call writeln,offset Clr
    ret
endp ClrStr
;-------------------------------------------------------------------
GetChar proc
badchar:
    mov ah,08h
    int 21h
    cmp al,48
    jae excelent
    jmp badchar
excelent:
    cmp al,57
    jna excelent1
    jmp badchar
excelent1:
    mov ah,0eh
    int 10h
    ret
endp GetChar
;---------------------------------------------------------------------
SetRealTime proc
call PosScreen,14,1
call writeln,offset SetRTm
call PosScreen,15,3
call writeln,offset Hours
call GetChar
mov si,0
mov [GetT+si],al
call GetChar
inc si
mov [GetT+si],al
call StrToBCD,offset GetT
push dx
call PosScreen,16,3
call writeln,offset min
call GetChar
mov si,0
mov [GetT+si],al
call GetChar
inc si
mov [GetT+si],al
call StrToBCD,offset GetT
pop cx
mov ch,cl
mov cl,dl
    mov ah,03h
    int 1ah
call ClrStr,14
call ClrStr,15
call ClrStr,16
    ret
endp SetRealTime
;------------------------------------------------------------------
;Преобразование строки в  BCD
;вход в adres адрес в DX
StrToBCD proc adres:word
    xor dx,dx
    mov si,adres
    mov al,ds:[si+0]
@10:
    cmp al,48
    jna ok10
    add dl,10h
    sub al,1
    jmp @10
ok10:
    mov al,ds:[si+1]
    sub al,48
    add dl,al
    ret
endp StrToBCD
;------------------------------------------------------------------
;Преобразование строки в Int
;вход в adres адрес в DX
StrToInt proc adrs:word
    xor dx,dx
    mov si,adrs
    mov al,ds:[si+0]
@11:
    cmp al,48
    jna ok11
    add dl,0ah
    sub al,1
    jmp @11
ok11:
    mov al,ds:[si+1]
    sub al,48
    add dl,al
    ret
endp StrToInt
;-------------------------------------------------------------------
SetWakeUpTime proc
call PosScreen,14,1
call writeln,offset SetWU
call PosScreen,15,3
call writeln,offset Hours
call GetChar
mov si,0
mov [GetT+si],al
call GetChar
inc si
mov [GetT+si],al
call StrToBCD,offset GetT
push dx
call PosScreen,16,3
call writeln,offset min
call GetChar
mov si,0
mov [GetT+si],al
call GetChar
inc si
mov [GetT+si],al
call StrToBCD,offset GetT
pop cx
mov ch,cl
mov cl,dl
    mov ah,06h
    int 1ah
call ClrStr,14
call ClrStr,15
call ClrStr,16
call SetMyProcAlarm
    ret
endp SetWakeUpTime
;---------------------------------------------------------------------
TwoProc proc
xor ah,ah
call IntToStr,ax,offset Num
call writeln,offset Num
    ret
endp TwoProc
;---------------------------------------------------------------------
SystemTime proc
    mov ah,2ch
    int 21h
    pusha
    pusha
mov al,ch
pusha
call PosScreen,11,18
popa
call TwoProc
mov al,':'
mov ah,0eh
int 10h
popa
mov al,cl
call TwoProc
mov al,':'
mov ah,0eh
int 10h
popa
push dx
mov al,dh
call TwoProc
mov al,':'
mov ah,0eh
int 10h
pop dx
mov al,dl
call TwoProc
    ret
endp SystemTime
First proc
call PosScreen,10,2
call writeln,offset real
call PosScreen,11,2
call writeln,offset system
    ret
endp First
; Подпрограмма позиционирования курсора на экране
PosScreen proc x:byte,y:byte
    mov ah,02h
    mov al,3        ; текущий режим видеоадаптера
    mov bh,0        ; активная страница
    mov bl,0
    mov dh,x
    mov dl,y
    int 10h
    ret
PosScreen endp
GetRealTime proc
    mov ah,02h
    int 1ah
    pusha
    pusha
mov ah,ch
pusha
call PosScreen,10,26
popa
call TreeProc
mov al,':'
mov ah,0eh
int 10h
popa
mov ah,cl
call TreeProc
mov al,':'
mov ah,0eh
int 10h
popa
mov ah,dh
call TreeProc
    ret
endp GetRealTime
TreeProc proc
call BCD_ToInt
call IntToStr,ax,offset Num
call writeln,offset Num
    ret
endp TreeProc
writeln proc addr:word
    mov ah,09h
    mov dx,addr
    int 21h
    ret
endp writeln
;Процедура преобразования BCD в двоичный формат
; вход- AH выход- Al
BCD_ToInt proc
    xor al,al
@16:
    cmp ah,0fh
    jb ok
    add al,0ah
    sub ah,10h
    jmp @16
ok:
    add al,ah
    xor ah,ah
    ret
endp BCD_ToInt
IntToStr proc numb:word,adr:word
    pusha           ; сохранение всех регистров
    mov ax,numb         ; преобразуемое число
    mov si,adr          ; адрес буфера для символьного числа
    mov bx,10           ; ds - адрес сегмента данных
    xor cx,cx
@1:
    xor dx,dx   
    div bx                  ; разделить на 10
    add dx,30h          ; преобразовали остаток к
    push    dx          ; символьному виду
    inc cx
    cmp ax,0            ; разделили полностью
    jne @1
cmp cx,2
je @2
jne @0n
@2:
    pop ax
    mov ds:[si],al          ; занесли в буфер 
    inc si
    loop    @2
    jmp exitpr
@0n:
    mov ds:[si],'0'
    inc si
    pop ax
    mov ds:[si],al
    inc si
exitpr:
    mov byte ptr ds:[si],'$'    ; конец строки для 9h
    popa                ; восстановление регистров
    ret
IntToStr endp
;--------------------------------------------------------------------
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2012, 21:11
Ответы с готовыми решениями:

Выключение ПК средствами биос
Здравствуйте, как можно выключить компьютер средствами прерываний биос чтобы пк выключался при...

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

Выключение компьютера в XP
Скажите как выключить комп в XP комп. Всё есть - перезагрузка,выход из windows , завершение...

Выключение компьютера
Мне надо экстренно завершить работу Windows 7/XP без вопроса системы:"Завершить все работающие...

3
Клюг
7662 / 3177 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
22.03.2012, 22:34 2
https://www.cyberforum.ru/post2765658.html
0
0 / 0 / 0
Регистрация: 23.02.2012
Сообщений: 11
23.03.2012, 01:04  [ТС] 3
Charles Kludge,спасибо) но у меня не получается сделать с этого таймер выключения, т.к. не шарю..

Добавлено через 59 минут
Цитата Сообщение от Charles Kludge Посмотреть сообщение

В mov dx, _int1C и mov dx, inpbuf ошибка - operand types do not match, как от неё избавиться?)
0
Клюг
7662 / 3177 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
23.03.2012, 08:34 4
elemeNt13,
Assembler
1
2
mov     dx, offset _int1C
mov     dx, offset inpbuf
Здесь ближе к вашей теме.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2012, 08:34

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

Выключение компьютера
Дорогие господа и дамы(?)! Недавно приобрел компьютер (недели не прошло): MB: MSI Z77A-G43 ...

Выключение компьютера
Уважаеммы программисты.я пишу программу и мне нужно чтобы при нажатии на кнопку компьютер...

Выключение компьютера
Мне нужно выключить компьютер. Операционная система Windows 7. У меня есть вот такой код: HANDLE...

Выключение компьютера
Люди ,подскажите,пожалуйста,как называется метод,который отвечает за завершение работы компьютера?


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

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

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