Всем привет! По заданию, мне нужно передать системное время,а затем установить в принимающей машине новое системное время, равное переданному. Нашёл функции по взятию и установки системного времени: 2cH и 2dH, соответственно... Вот как я их использую:
datasegment
h db?
m db?
s db?
ms db?dataendscodesegmentassumecs: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 axret
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 axret
SetTime endpstart:
mov ax, data
mov ds, axcall GetTime
call SetTime
;call GetTime
fin: mov ax, 4c00h
int 21h
codeendsendstart
Почему не происходит установка нового времени?
volvo
27.03.2009 22:21
Цитата
Почему не происходит установка нового времени?
происходит... Время устанавливается, и сохраняется, пока твоя программа работает. Можешь проверить: напиши процедуру, печатающую текущее время, измени время, и распечатай его...
Если ты хочешь, чтобы был постоянный эффект - запускай программу под ДОС, а не под Windows. И, кстати, проверяй регистр AL после установки времени, только в случае если AL = 0 операция завершилась корректно.
Rocket
28.03.2009 0:16
Цитата(volvo @ 27.03.2009 22:21)
происходит... Время устанавливается, и сохраняется, пока твоя программа работает. Можешь проверить: напиши процедуру, печатающую текущее время, измени время, и распечатай его...
Если ты хочешь, чтобы был постоянный эффект - запускай программу под ДОС, а не под Windows. И, кстати, проверяй регистр AL после установки времени, только в случае если AL = 0 операция завершилась корректно.
А чтобы в Windows время поменялось, что нужно сделать? И как вообще программу под ДОС запустить?
volvo
28.03.2009 0:23
Цитата
А чтобы в Windows время поменялось, что нужно сделать?
Работать с ассемблером для Windows и для смены времени вызывать API-функцию SetLocalTime...
Цитата
И как вообще программу под ДОС запустить?
Загрузиться с ДОС-овской дискеты и запустить...
Rocket
28.03.2009 0: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
jnzmm1;в al записать очередной символ
sub dx,5
out dx,alloop mm
То есть, как часы, минуты, сек и мсек отправить?
2.
;принимающая машина
mov cx,4
mm: add dx,5
mm1: in al,dx
test al,00000001b
jzmm1
sub dx,5
in al,dx;сохранить этот символ
loop mm
call SetTime
Как вообщем эти переменные принять и сохранить?
volvo
28.03.2009 20:53
Цитата
как часы, минуты, сек и мсек отправить?
Цитата
Как вообщем эти переменные принять и сохранить?
Вот тут лежит документ, в котором мало того, что описаны порты, так еще и приведены подпрограммы инициализации/сброса и приема/передачи данных: http://kwp2000.boom.ru/old/koc.txt
Разбирайся...
Rocket
28.03.2009 23:37
Цитата(volvo @ 28.03.2009 20:53)
Вот тут лежит документ, в котором мало того, что описаны порты, так еще и приведены подпрограммы инициализации/сброса и приема/передачи данных: http://kwp2000.boom.ru/old/koc.txt
Разбирайся...
Да у меня в принципе тоже есть материал по портам, но всё равно лишним не будет.
Вот что у меня получилось, опять же, для передающей машины (out1.txt) и принимающей (inp1.txt). Если есть возможность, наличие двух портов, то протестируйте пожалуйста...уж очень интересно узнать результат моей работы
Rocket
31.03.2009 23:10
Цитата(volvo @ 28.03.2009 1:23)
Работать с ассемблером для Windows и для смены времени вызывать API-функцию SetLocalTime...
Загрузиться с ДОС-овской дискеты и запустить...
Пишу туже самую программу, но только с использование Api-функций... SetLocalTime также не изменяет время в Windows. С чем это связано?
volvo
31.03.2009 23:33
Цитата
SetLocalTime также не изменяет время в Windows. С чем это связано?
У меня изменяет... Привилегию SeSystemTimePrivilege разрешил для текущего процесса?
Rocket
31.03.2009 23:45
Цитата(volvo @ 1.04.2009 0:33)
У меня изменяет... Привилегию SeSystemTimePrivilege разрешил для текущего процесса?
Добрый вечер! Сегодня я тестировал программу (передача системного времени через COM порт, написанная на ассемблере)...Но что-то как-то не особо удачно, вобщем время не передалось... Это код программы для передающей машины:
datasegment
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,"$"dataendscodesegmentassumecs:code, ds:data
clrscn proc
push ax
push bx
push ds
push es
mov cl, 0
mov ch, 0
mov dl, 80
mov dh, 25
xor ax,ax
mov al,0
xor bx, bx
mov bh, 10
int 10h
pop es
pop ds
pop bx
pop axret
clrscn endp
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 h+1, cl
mov h+2, dh
mov h+3, dl
pop dx
pop cx
pop axret
GetTime endpstart:
mov ax, data
mov ds, ax
met:
call clrscn
mov ah, 09h
mov dx,offset mesmen
int 21h
mov ah,01h
int 21h
cmp al,'1'jz m1
cmp al,'2'jz m2
cmp al,'3'jz m3
cmp al,'4'jz m4
jmp met
m1:
call clrscn
mov ah, 09h
mov dx,offset mes1
int 21h
mov ax,0040h
mov es, ax
mov ds, es:[0000]
jmp beg
m2: call clrscn
mov ah, 09h
mov dx,offset mes2
int 21h
mov ax,0040h
mov es, ax
mov ds, es:[0002]
jmp beg
m3: call clrscn
mov ah, 09h
mov dx,offset mes3
int 21h
mov ax,0040h
mov es, ax
mov ds, es:[0004]
jmp beg
m4: call clrscn
mov ah, 09h
mov dx,offset mes4
int 21h
mov ax,0040h
mov es, ax
mov ds, es:[0006]
beg: add dx,3
mov al, 10000000b
out dx,al
nop
nop
mov ax,417h
sub dx,3
out dx,al
nop
nop
inc dx
mov al,ah
out dx,al
nop
nop
;установка протокола
inc dx
inc dx
mov al,00011111b
out dx, al
nop
nop
sub dx,3
;передающая машина
call GetTime
mov cx,4
mov si,0
mm: add dx,5
mm1: in al,dx
and al, 01100000b
cmp al, 01100000b
jnzmm1;в al записать очередной символ
mov al,h+si
inc si
sub dx,5
out dx,alloop mm
fin: mov ax, 4c00h
int 21h
codeendsendstart
При запуске ехе-шник какбы виснит. Что не так в коде, какие будут замечания и поправки? подскажите пожалуйста
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.