Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2014, 16:28   #1
Sadof
Новичок
Джуниор
 
Регистрация: 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 ;Конец программы
Sadof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться! 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