oh0: rol al,4 ; циклически сдвигаем значение,
mov dl,al ; чтобы очередная тетрада стала младшей
and dl,0Fh ; гасим старшую тетраду
cmp dl,9 ; сравниваем значение с 9
jbe short oh1 ; это цифра - обходим доп.корректировку
add dl,7 ; дополнительно корректируем до буквы
oh1: add dl,30h ; корректируем до цифры
push ax
mov ah,02h ; выводим полученную цифру
int 21h
pop ax
loop oh0 ; продолжаем вывод
pop dx ; восстанавливаем регистры
pop cx
ret
OutHex endp
;-------------------------------------------------------------------------
InHex proc near ; процедура ввода шестнадцатеричного числа
; считанное число возвращает в ax
;-------------------------------------------------------------------------
push cx ; сохраняем регистры
push dx
xor cx,cx ; обнуляем регистр для накопления числа
ih0: mov ah,1 ; вводим символ
int 21h
sub al,30h ; вычитаем из него '0'
jb short ih3 ; результат < 0 - это не hex цифра
cmp al,9 ; результат < 9 - это десятичная цифра
jbe short ih2
sub al,11h ; вычитаем из результата 17
jb short ih3 ; теперь он < 0 - это не большая hex буква
cmp al,5
jbe short ih1 ; результат > 5 - это не большая hex буква
sub al,20h ; вычитаем из результата 32
jb short ih3 ; теперь он < 0 - это не маленькая hex буква
cmp al,5
ja short ih3 ; результат > 5 - это не маленькая hex буква
ih1: add al,10 ; корректируем до числа
ih2: shl cx,4 ; сдвигаем накапливаемое число на тетраду
; влево, на освободившееся место пишем
or cl,al ; распознанную цифру
jmp short ih0 ; продолжаем ввод
ih3: mov ah,02h ; выводим перевод строки
mov dl,0dh
int 21h
mov dl,0ah ; и возврат каретки
int 21h
mov ax,cx ; переносим результат в ax
pop dx ; восстанавливаем регистры
pop cx
ret
InHex endp
;-------------------------------------------------------------------------
end main
ГУАП
КАФЕДРА № 44
ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ассистент |
А.Б. Бубликов |
|||
должность, уч. степень, звание |
подпись, дата |
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №5 |
Работа с системными часами |
по курсу: ИНТЕРФЕЙСЫ ПЕРИФЕРИЙНЫХ УСТРОЙСТВ |
РАБОТУ ВЫПОЛНИЛ(А)
СТУДЕНТ(КА) ГР. |
В8441 |
Тарасов Р.С. |
|||
подпись, дата |
инициалы, фамилия |
Санкт-Петербург 2011
Опросить текущее состояние часов и вывести на экран. Считать с клавиатуры количество секунд и установить системное время на это количество секунд в прошлое. Установить будильник на 15 секунд в будущее и обработать его прерывние выдав звуковой сигнал.
Ниже перечислены использованные функции INT 1AH доступа к часам реального времени:
AH сервис
--- ----------------------------------------------------------------------------
02H ¦AT¦ читать время из CMOS часов реального времени
выход: CH = часы в коде BCD (пример: CX = 1243H = 12:43)
CL = минуты в коде BCD
DH = секунды в коде BCD
выход: CF = 1, если часы не работают
--- ----------------------------------------------------------------------------
03H ¦AT¦ установить время на CMOS часах реального времени
вход: CH,CL = часы,минуты в коде BCD
DH = секунды в коде BCD
DL = 1 для опции "единиц светового дня"
--- ----------------------------------------------------------------------------
06H ¦AT¦ установить сигнал часов реального времени. В указанное время вызывается
пользовательская программа по вектору прерывания INT 4aH. Лишь один сигнал
может быть активен в каждый момент времени.
вход: CH,CL = часы,минуты в коде BCD
DH = секунды в коде BCD
выход: CF = 1, если часы не работают или сигнал уже активен
--- ----------------------------------------------------------------------------
07H ¦AT¦ сбросить сигнал часов реального времени. Эта функция позволяет отменить
один сигнал перед установкой другого.
--- ----------------------------------------------------------------------------
Текст программы:
.MODEL SMALL
.STACK 100h
.DATA
Message1 DB 'Программа демонстрирует работу с часами',13,10,'$'
Message2 DB 'Текущее время:','$'
Message3 DB 'Время, сдвинутое назад:','$'
Message4 DB 'Введите смещение в секундах: ','$'
Message5 DB 'Через 15 секунд должен сработать будильник',13,10,'$'
buff DB 6,7 dup (?)
vseg DW ?
voff DW ?
.CODE
main:
; подготовительные действия
mov ax,@Data ; устанавливаем регистры DS и ES,
mov ds,ax ; чтобы они указывали на сегмент данных
mov es,ax
mov ah,09h
lea dx,Message1
int 21h ; выводим заголовок программы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.