Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 14
1

Системный таймер. Вывести дату и время на экран на разных строках экрана

11.03.2010, 01:08. Показов 6598. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вывести дату и время на экран на разных строках экрана.

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
.model small
.stack 128h
.data
    den db '  .','$';
    mes db '  .','$';
    year db '    ','$'
    hour db '  :','$';
    min db '  :','$';
    sek db '  ','$';
.code
begin:
    mov ax,@data;
    mov ds,ax;
    mov ah,2ah;
    int 21h;
    mov ah,04;
    int 1ah;
    push cx;
    mov bl,dl;
    mov cl,04h;
    shr bl,cl;
    add bl,30h;
    mov den,bl;
    and dl,0fh;
    add dl,30h;
    mov den+1,dl
    lea dx,den;
    mov ah,09h;
    int 21h;
    
    mov ah,04h;
    int 1ah;
    push cx;
    mov bl,dh;
    mov cl,04h;
    shr bl,cl;
    add bl,30h;
    mov mes,bl;
    and dh,0fh;
    add dh,30h;
    mov mes+1,dh;
    lea dx,mes;
    mov ah,09h;
    int 21h;
    
    mov ah,04h;
    int 1ah;
    push cx;
    mov bl,dl;
    mov cl,04h;
    shr bl,cl;
    add bl,30h;
    mov year,bl;
    and dl,0fh;
    add dl,30h;
    mov year+1,dl;
    lea dx,year;
    mov ah,09h;
    int 21h;    
    
    call nextline;
    mov ah,02h;
    int 21h;
    mov ah,02h;
    int 1ah;
    push cx;
    mov bl,dl;
    mov cl,04h;
    shr bl,cl;
    add bl,30h;
    mov hour,bl
    and dl,0fh;
    add dl,30h;
    mov hour+1,dl;
    lea dx,year;
    mov ah,09h;
    int 21h;
    
    mov ah,02h;
    int 1ah;
    push cx;
    mov bl,dl;
    mov cl,04h; 
    shr bl,cl;
    add bl,30h;
    mov min,bl;
    and dl,0fh; 
    add dl,30h;
    mov min+1,dl;
    lea dx,min;
    mov ah,09h;
    int 21h;
    
    mov ah,02h;
    int 1ah;
    push cx;
    mov bl,dl;
    mov cl,04h;
    shr bl,cl;
    add bl,30h;
    mov sek,bl;
    and dl,0fh; 
    add dl,30h;
    mov sek+1,dl;
    lea dx,sek;
    mov ah,09h;
    int 21h;
    nextline proc;
        mov dl,0ah;
        mov ah,02h;
        int 21h;
        mov dl,0dh;
        mov ah,02h;
        int 21h
    ret
    nextline endp;
    mov ah,4ch;
    int 21h;
end
Вотс.. сделал.. но дату выводит нормально, а время неправильно, посмотрите плиз, что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2010, 01:08
Ответы с готовыми решениями:

Вывести на экран дату и время
Напишите программу которая: -выводит на экран (указать конкретное место, фон, цвет символов)...

Вывести на экран текущие дату и время
Составить программу, которая выводит на экран текущие дату и время, а также имена всех файлов с...

Вывести на экран текущие дату и время
1. Напишите программу на языке ассемблера, которая: 1. выводит на экран (указать конкретное место,...

Измерить время между нажатиями клавиш (системный таймер)
Покажите как работать с таймеров. Помогите собрать программу. Нужно составить программу, которая...

26
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
11.03.2010, 03:17 2
Лучший ответ Сообщение было отмечено как решение

Решение

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
.model small
.stack 128h
.data
    den db '  .';
    mes db '  .';
    year db '    ',0dh,0ah
    hour db '  :';
    min db '  :';
    sek db '  ','$';
.code
BCD2ASCII macro
    mov al,ah
    shr al,4
    and ah,0fh
    add ax,3030h
endm
begin:
 
    mov ax,@data;
    mov ds,ax;
    mov ah,04;
    int 1ah;
    mov ah,dl
    BCD2ASCII
    mov word ptr [den],ax
    
    mov ah,dh
    BCD2ASCII
    mov word ptr [mes],ax
    
    mov ah,cl
    BCD2ASCII
    mov word ptr [year],ax
    
    mov ah,02h;
    int 1ah;
    
    mov ah,ch
    BCD2ASCII
    mov word ptr [hour],ax
    
    mov ah,cl
    BCD2ASCII
    mov word ptr [min],ax
    
    mov ah,dh
    BCD2ASCII
    mov word ptr [sek],ax
    
    lea dx,den;
    mov ah,09h;
    int 21h;
    
    mov ah,4ch;
    int 21h;
    
end begin
Ну или тоже самое, но короче
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
.model small
.stack 128h
.data
    den db '  .';
    mes db '  .';
    year db '    ',0dh,0ah
    hour db '  :';
    min db '  :';
    sek db '  ','$';
.code
BCD2ASCII macro reg,mem
 mov ah,reg
    mov al,ah
    shr al,4
    and ah,0fh
    add ax,3030h
    mov word ptr [mem],ax
endm
begin:
    mov ax,@data;
    mov ds,ax;
    mov ah,04;
    int 1ah;
 
    BCD2ASCII dl,den
    
    BCD2ASCII dh,mes
 
    BCD2ASCII cl,year
    
    mov ah,02h;
    int 1ah;
    
    BCD2ASCII ch,hour
 
    BCD2ASCII cl,min
 
    BCD2ASCII dh,sek
 
    lea dx,den;
    mov ah,09h;
    int 21h;
    
    mov ah,4ch;
    int 21h;
    
end begin
3
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 14
11.03.2010, 19:08  [ТС] 3
можеш откоменитровать строчки:

Assembler
1
2
3
4
5
6
7
8
BCD2ASCII macro reg,mem
 mov ah,reg
        mov al,ah
        shr al,4
        and ah,0fh
        add ax,3030h
        mov word ptr [mem],ax
endm
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BCD2ASCII dl,den
        
        BCD2ASCII dh,mes
 
        BCD2ASCII cl,year
        
        mov ah,02h;
        int 1ah;
        
        BCD2ASCII ch,hour
 
        BCD2ASCII cl,min
 
        BCD2ASCII dh,sek
Буду благодарен)
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
11.03.2010, 22:22 4
Лучший ответ Сообщение было отмечено как решение

Решение

Это макрос. Переведет из двоично-десятичного числа в символьное представление.
Assembler
1
2
3
4
5
6
7
8
BCD2ASCII macro reg,mem
 mov ah,reg  ; делаем 2 копии нужного регистра
        mov al,ah
        shr al,4 ; от первого оставляем старшую часть
        and ah,0fh ; от второго младшую
        add ax,3030h ; делаем из строку
        mov word ptr [mem],ax ; записываем строку в нужное место памяти
endm
3
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 14
12.03.2010, 18:44  [ТС] 5
Спасибо
0
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
18.12.2010, 19:14 6
Скажите пожалуйста, а как сделать так чтобы время выводилось английскими словами?
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
18.12.2010, 20:34 7
Как это понять ?
0
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
18.12.2010, 23:25 8
Ну например 2.12.10 выводилось как two.december.two thousand ten
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
18.12.2010, 23:42 9
Ну можете сделать массивы с этими словами и массивы с аддресами этих слов
Assembler
1
2
3
4
5
sOne db "one$"
sTwo db "two$"
sTree db "tree$"
....
pDay dw sOne,sTwo,sThree.....
Потом, при расчете брать аддрес строки и выводить ее.
Assembler
1
2
3
4
5
6
7
; получение даты
.....
mov bx,num ; число для вывода
shl bx,1
mov dx,[pDay+bx] ; теперь в dx - аддрес нужной строки
; вывод этой строки
....
0
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
19.12.2010, 08:24 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
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
; Вывод на экран текущей даты и времени из RTC
.model tiny
.code
.186 ; для shr al,4
org 100h ; СОМ-программа
start:
mov al,0Bh ; CMOS OBh - управляющий регистр В
out 70h,al ; порт 70h - индекс CMOS
in al,71h ; порт 71h - данные CMOS
and al,11111011b ; обнулить бит 2 (форма чисел - BCD)
out 71h,al ; и записать обратно
mov al,7 ; CMOS 02h - день
call print_cmos
mov al,'.' 
int 29h
mov al,8 ; CMOS 02h - месяц
call print_cmos
mov al,'.' 
int 29h
mov al,9 ; CMOS 02h - год
call print_cmos
mov al,'-'   
int 29h
 
 
mov al,4 ; CMOS 04h - час
call print_cmos
mov al,':' 
int 29h
mov al,2 ; CMOS 02h - минута
call print_cmos
mov al,':' 
int 29h
mov al,0h ; CMOS 00h - секунда
call print_cmos
mov ah,10h
int 16h 
mov ax,4c00h
int 21h 
 
ret
 
; процедура print_cmos
; выводит на экран содержимое ячейки CMOS с номером в AL
; считает, что число, читаемое из CMOS, находится в формате BCD
print_cmos proc near
 
out 70h,al ; послать AL в индексный порт CMOS
in al,71h ; прочитать данные
push ax
shr al,4 ; выделить старшие четыре бита
add al,'0' ; добавить ASCII-код цифры 0
int 29h  ; вывести на экран
 
 
pop ax
and al,0Fh ; выделить младшие четыре бита
add al,30h ; добавить ASCII-код цифры 0
int 29h ; вывести на экран
 
 
 
ret
 
 
end start
Может я неправильно вставил Ваши строки?
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
19.12.2010, 08:47 11
У меня нормально работает.

Вот вариант покороче
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
; Вывод на экран текущей даты и времени из RTC
.model tiny
.code
.186
org 100h
start:
mov al,0Bh       ; CMOS OBh - управляющий регистр В
out 70h,al       ; порт 70h - индекс CMOS
in  al,71h       ; порт 71h - данные CMOS
and al,11111011b ; обнулить бит 2 (форма чисел - BCD)
out 71h,al       ; и записать обратно
 
mov cx,6
mov si,offset a
b:lodsw
  out  70h,al ; послать AL в индексный порт CMOS
  in   al,71h ; прочитать данные
  push ax
  shr  al,4   ; выделить старшие четыре бита
  add  al,'0' ; добавить ASCII-код цифры 0
  int  29h    ; вывести на экран
  pop  ax
  and  al,0Fh ; выделить младшие четыре бита
  add  al,'0' ; добавить ASCII-код цифры 0
  int  29h    ; вывести на экран
  shr  ax,8
  int 29h
loop b
 
xor ax,ax
int 16h
ret
 
a db 7,'.',8,'.',9,'-',4,':',2,':',8,' '
 
end start
1
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
19.12.2010, 09:02 12
murderer, о,так лучше) но как сделать чтобы дата словами выводилась?
Я так понимаю нужно что то делать с регистром SI?
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
19.12.2010, 09:56 13
Тебе уже ответил Goodwin98
https://www.cyberforum.ru/asse... ost1216317
0
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
19.12.2010, 10:01 14
murderer, так ассемблер у меня ошибки пишет(
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
19.12.2010, 10:09 15
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.model tiny
.code
org 100h
start:
 
mov bx,2           ; число для вывода
shl bx,1
mov dx,[pDay+bx-2] ; теперь в dx - адрес нужной строки
 
mov ah,9
int 21h
 
xor ax,ax          ;ожидание нажатия клавиши
int 16h
ret
 
sOne   db "one$"
sTwo   db "two$"
sThree db "tree$"
pDay   dw sOne,sTwo,sThree
 
end start
0
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
19.12.2010, 10:17 16
Как то неправильно работает,сначала выводит дату и время,а после неё слово "two", почему так(
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
19.12.2010, 10:22 17
0
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
19.12.2010, 11:15 18
Я что-то неправильно делаю?(

Добавлено через 32 минуты
Я вроде понял,нужно то что в регистре al вывести в переменную pDay, так?
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
19.12.2010, 12:58 19
Вот написал без учёта окончаний
Вложения
Тип файла: rar tasmcom.rar (1.1 Кб, 46 просмотров)
1
0 / 0 / 1
Регистрация: 18.12.2010
Сообщений: 25
19.12.2010, 13:39 20
murderer, спасибо большое, СПАСИБО!!!!Я готов Вас расцеловать,вы меня просто спасли!Благодарю!!!

Добавлено через 3 минуты
Остальное я уж как нибудь сам доделаю,чтобы дата и время вся по английски была и ещё чтобы в две строки это всё было)
0
19.12.2010, 13:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2010, 13:39
Помогаю со студенческими работами здесь

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

Вывести несколько переменных в разных строках MessageBox
Добрый день! Написал небольшую программу, которая 5 раз с разными значениями переменных обсчитывает...

как 3 стринговых переменных вывести на разных строках?
.... writeln(a); writeln(b); writeln(c); // a,b,c - строки

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

Вывести текущую дату и время
Нужно сделать электронные часы в Delphi unit Unit1; interface uses Windows, Messages,...

Как вывести время и дату
Подскажите как в C++ вывести время и дату. Какой оператор использовать? Хочу в сайт на PHP встатить.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru