Всем привет! По заданию, мне нужно передать системное время,а затем установить в принимающей машине новое системное время, равное переданному. Нашёл функции по взятию и установки системного времени: 2cH и 2dH, соответственно... Вот как я их использую:
data segment
h db ? m db ? s db ? ms db ?
data ends
code segment assume cs:code, ds:data
GetTime proc
push ax push cx push dx
xor ax,ax xor cx,cx xor dx,dx
mov ah, 2ch int 21h
mov h, ch mov m, cl mov s, dh mov ms,dl
pop dx pop cx pop ax ret GetTime endp
SetTime proc
push ax push cx push dx
xor ax,ax xor cx,cx xor dx,dx
mov ch, 11h mov cl, 0 mov dh, 0 mov dl, 0
mov ah, 2dh int 21h
pop dx pop cx pop ax ret SetTime endp
start: mov ax, data mov ds, ax
call GetTime call SetTime ;call GetTime
fin: mov ax, 4c00h int 21h
code ends end start
Почему не происходит установка нового времени?
volvo
28.03.2009 2:21
Цитата
Почему не происходит установка нового времени?
происходит... Время устанавливается, и сохраняется, пока твоя программа работает. Можешь проверить: напиши процедуру, печатающую текущее время, измени время, и распечатай его...
Если ты хочешь, чтобы был постоянный эффект - запускай программу под ДОС, а не под Windows. И, кстати, проверяй регистр AL после установки времени, только в случае если AL = 0 операция завершилась корректно.
Rocket
28.03.2009 4:16
Цитата(volvo @ 27.03.2009 22:21)
происходит... Время устанавливается, и сохраняется, пока твоя программа работает. Можешь проверить: напиши процедуру, печатающую текущее время, измени время, и распечатай его...
Если ты хочешь, чтобы был постоянный эффект - запускай программу под ДОС, а не под Windows. И, кстати, проверяй регистр AL после установки времени, только в случае если AL = 0 операция завершилась корректно.
А чтобы в Windows время поменялось, что нужно сделать? И как вообще программу под ДОС запустить?
volvo
28.03.2009 4:23
Цитата
А чтобы в Windows время поменялось, что нужно сделать?
Работать с ассемблером для Windows и для смены времени вызывать API-функцию SetLocalTime...
Цитата
И как вообще программу под ДОС запустить?
Загрузиться с ДОС-овской дискеты и запустить...
Rocket
28.03.2009 4:54
Написал программы для передающей машины (out1.txt) и принимаюшей (inp1.txt). Как реализовать следующие моменты:
1.
;передающая машина
call GetTime
mov cx,4
mm: add dx,5 mm1: in al,dx and al, 01100000b cmp al, 01100000b jnz mm1 ;в al записать очередной символ sub dx,5 out dx,al loop mm
То есть, как часы, минуты, сек и мсек отправить?
2.
;принимающая машина mov cx,4
mm: add dx,5 mm1: in al,dx test al,00000001b jz mm1 sub dx,5 in al,dx ;сохранить этот символ loop mm
call SetTime
Как вообщем эти переменные принять и сохранить?
volvo
29.03.2009 0:53
Цитата
как часы, минуты, сек и мсек отправить?
Цитата
Как вообщем эти переменные принять и сохранить?
Вот тут лежит документ, в котором мало того, что описаны порты, так еще и приведены подпрограммы инициализации/сброса и приема/передачи данных: http://kwp2000.boom.ru/old/koc.txt
Разбирайся...
Rocket
29.03.2009 3:37
Цитата(volvo @ 28.03.2009 20:53)
Вот тут лежит документ, в котором мало того, что описаны порты, так еще и приведены подпрограммы инициализации/сброса и приема/передачи данных: http://kwp2000.boom.ru/old/koc.txt
Разбирайся...
Да у меня в принципе тоже есть материал по портам, но всё равно лишним не будет.
Вот что у меня получилось, опять же, для передающей машины (out1.txt) и принимающей (inp1.txt). Если есть возможность, наличие двух портов, то протестируйте пожалуйста...уж очень интересно узнать результат моей работы
Rocket
1.04.2009 3:10
Цитата(volvo @ 28.03.2009 1:23)
Работать с ассемблером для Windows и для смены времени вызывать API-функцию SetLocalTime...
Загрузиться с ДОС-овской дискеты и запустить...
Пишу туже самую программу, но только с использование Api-функций... SetLocalTime также не изменяет время в Windows. С чем это связано?
volvo
1.04.2009 3:33
Цитата
SetLocalTime также не изменяет время в Windows. С чем это связано?
У меня изменяет... Привилегию SeSystemTimePrivilege разрешил для текущего процесса?
Rocket
1.04.2009 3:45
Цитата(volvo @ 1.04.2009 0:33)
У меня изменяет... Привилегию SeSystemTimePrivilege разрешил для текущего процесса?
Нет. Как это сделать?
volvo
1.04.2009 3:52
Вот программа, меняющая системное время:
.386 .model flat, stdcall option casemap :none
include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\advapi32.inc
Добрый вечер! Сегодня я тестировал программу (передача системного времени через COM порт, написанная на ассемблере)...Но что-то как-то не особо удачно, вобщем время не передалось... Это код программы для передающей машины:
data segment
h db ?,?,?,?
mesmen db 13,10,"Choose COM-X :",13,10,13,10,"COM-1 pressed(1)",13,10,"COM-2 pressed(2)",13,10,"COM-3 pressed(3)",13,10,"COM-4 pressed(4)",13,10,"$"
mes1 db 13,10,"COM-1 is active!!!",13,10,"$" mes2 db 13,10,"COM-2 is active!!!",13,10,"$" mes3 db 13,10,"COM-3 is active!!!",13,10,"$" mes4 db 13,10,"COM-4 is active!!!",13,10,"$"