![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 30.03.2014
Сообщений: 1
|
![]()
Взяла чужую прогу "вывод текущей даты и времени на дисплей". Нужно разобраться как мы получаем и в каком формате, как обрабатываем дату и время. Кто в этом разбирается помоги пожалуйста понять, очень нужно для универа.
Model Small, C .Data time db 'Время: $' str_hour db 'час$' test_hour db 2,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2 ,2,2,2,0,1,1 tail_hour dw dummy, hour_a, hour_ob hour_a db 'а$' hour_ob db 'ов' dummy db '$' str_minute db 'минут$' str_second db 'секунд$' date db 0dh,0ah,'Дата: $' arr_month dw yanuary, february, march, april, may, june dw july, august, september, october, november, december yanuary db 'января$' february db 'февраля$' march db 'марта$' april db 'апреля$' may db 'мая$' june db 'июня$' july db 'июля$' august db 'августа$' september db 'сентября$' october db 'октября$' november db 'ноября$' december db 'декабря$' str_year db 'года$' .Code .startup mov ax, @data mov ds, ax mov es, ax mov ah,09h mov dx,offset time int 21h Mov AH, 2Ch ;Получение времени(интересует от сюда) Int 21h xor ax, ax mov al, ch call print_value, ax, offset print_hour mov al, cl call print_value, ax, offset print_minute mov al, dh call print_value, ax, offset print_second mov ah,09h mov dx,offset date int 21h Mov AH, 2ah ;Получение даты Int 21h xor ax, ax mov al, dl call print_value, ax, offset print_day mov al, dh call print_month, ax mov ax, cx call print_value, ax, offset print_year mov ah, 0 int 16h .exit 0 ; ; Функция вывода числа с "хвостиком" ; Параметры: value - выводимое число ; print_progtam - адрес подпрограммы, которая еще что-то добавит, ; она вызовится с параметором value, чтобы знать, ; что добавлять print_value proc value:word, print_program uses ax, cx, dx xor cx, cx mov bl, 10 div_loop: ; преобразование и вывод числа div bl inc cx push ax mov ah, 0 test ax, ax jnz div_loop pr_loop: pop ax mov al, ah or al, 30h int 29h loop pr_loop mov al, ' ' ; разделительный пробел int 29h call word ptr [print_program], value ; "хвостик" ret print_value endp ; ;для часов определим по таблице, что надо добавить к слову 'час' (час, часа, часов) print_hour proc num:word lea dx, str_hour mov ah, 9 int 21h mov si, num mov al, test_hour[si] mov ah, 0 shl ax, 1 mov si, ax mov dx, tail_hour[si] mov ah, 9 int 21h mov al, ' ' int 29h ret print_hour endp ; ;для минут и секунд обрабатывается одинаково ;в подпрограмме add_tail print_minute proc num:word lea dx, str_minute mov ah, 9 int 21h call add_tail, num mov al, ' ' int 29h ret print_minute endp ; ;для минут и секунд обрабатывается одинаково ;в подпрограмме add_tail print_second proc num:word lea dx, str_second mov ah, 9 int 21h call add_tail, num ret print_second endp ; ;если остаток от деления на 10 (число единиц) 0 или больше 4, то ничего не добавляем ; (остается 'минут', 'секунд') ;если 1, то 'минута', 'секунда' ;все остальное 'минуты', 'секунды' add_tail proc num:word mov ax, num aam cmp al, 4 ja print_tail_ret cmp al, 1 jb print_tail_ret JZ tail_a mov al, 'ы' int 29h jmp print_tail_ret tail_a: mov al, 'а' int 29h print_tail_ret: ret add_tail endp ; ;для дня не надо выводить ничего (только число) print_day proc num:word ret print_day endp ; ;для месяцев не надо выводить число (только название) ;просто берем из таблицы ;номер месяца начинается с 1! print_month proc num:word mov si, num dec si shl si, 1 mov dx, arr_month[si] mov ah, 9 int 21h mov al, ' ' int 29h ret print_month endp ; ;для года просто добавляем 'года' print_year proc num:word lea dx, str_year mov ah, 9 int 21h ret print_year endp ; End ;Конец программы |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите разобраться! | gameskiller | Свободное общение | 1 | 28.11.2009 18:57 |
Помогите разобраться | rainbow | Паскаль, Turbo Pascal, PascalABC.NET | 45 | 04.04.2009 20:46 |
Помогите разобраться! | SerSasha | Помощь студентам | 4 | 09.06.2008 10:00 |