НОВОСИБИРСКИЙ
ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
ФАКУЛЬТЕТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ
Кафедра Систем Сбора и Обработки Данных
Микропроцессорная техника
Расчетно-графическая работа
Вариант №10
Выполнила: Еремина Ольга
Группа: АТ-83
Преподаватель:
Матушкин Г.Г.
Новосибирск
2011
Техническое задание: Разработать программу, моделирующую на экране дисплея часы с десятичной индикацией часов, минут и секунд. Предусмотреть возможность предварительной установки начального момента времени.
Решение поставленной задачи.
Решение будет, осуществляется в несколько логических блоков.
Первый блок будет осуществлять получение данных из консоли.
mov ah,3fh;
xor bx,bx;
mov cx,8;
mov dx,0001h;
int 21h;
xor si,si;
xor ax,ax;
mov dl,10;
movcx,2;
Второй блок будет преобразовывать введенные символы в числа.
mov bl, byte [si+0000h];
sub bl,30h;
mul dl;
add al,bl;
inc si;
loop lab1;
; ВЫДЕЛЯЕМСЕКУНДЫИЗЧИСЛА(ЧАСЫ)
mov di,3600;
inc si;
mul di;
push ax;
xor ax,ax;
mov dl,10;
mov cx,2;
; ВЫДЕЛЯЕМСЕКУНДЫИЗЧИСЛА (МИНУТЫ)
lab2: mov bl, byte [si+0000h];
sub bl,30h;
mul dl;
add al,bl;
inc si;
loop lab2;
mov di,60;
inc si;
mul di;
pop cx;
add ax,cx;
push ax;
xor ax,ax;
mov dl,10;
mov cx,2;
; ВЫДЕЛЯЕМСЕКУНДЫИЗЧИСЛА (СЕКУНДЫ)
lab3: mov bl, byte [si+0000h];
sub bl,30h;
mul dl;
add al,bl;
inc si;
loop lab3;
pop cx;
add ax,cx;
mov byte [si+00h],'$'
mov di,si;
mov bp,ax;
Третий блок будет преобразовывать число времени в символы для вывода на экран.
; ПЕРЕВОД СЕКУНД В СИМВОЛЬНЫЙ ВИД
lab4: mov bx,60;
xor dx,dx;
div bx;
push ax;
mov cx,2;
mov ax,dx;
lab5: mov bx, 10;
xor dx,dx;
div bx;
add dx,30h;
mov byte [si-0001h],dl;
dec si;
loop lab5
dec si;
pop ax;
mov bx,60;
xor dx,dx;
div bx;
push ax;
; ПЕРЕВОД МИНУТ В СИМВОЛЬНЫЙ ВИД
mov ax,dx;
mov cx,2;
lab6: mov bx, 10;
xor dx,dx;
div bx;
add dx,30h;
mov byte [si-0001h],dl;
dec si;
loop lab6;
dec si;
pop ax
mov cx,2;
; ПЕРЕВОД ЧАСОВ В СИМВОЛЬНЫЙ ВИД
lab7: mov bx, 10;
xor dx,dx;
div bx;
add dx,30h;
mov byte [si-0001h],dl;
dec si;
loop lab7;
Четвертый блок выводит полученное время на экран.
lab9: push cx
MOV AH,02 ;Запрос на установку курсора
MOV BH,00 ;Экран 0
MOV DH,12 ;Строка 05
MOV DL,36 ;Столбец 12
INT 10H
mov ah,9h
mov dx,0001h;
int 21h
mov si,di;
mov ax,bp;
jmp lab4 ; ВОЗВРАТ К НАЧАЛУ БЕСКОНЕЧНОГО ЦИКЛА
Код программы.
.model small ; Задание модели памяти.
.stack 100h ; Инициализация сегмента стека.
.data
data1 dw 0100h;
.code
main proc
mov ax, DGROUP ; Инициализация
mov ds, ax ; сегмента данных
; ВВОД ВРЕМЕНИ
mov ah,3fh;
xor bx,bx;
mov cx,8;
mov dx,0001h;
int 21h;
xor si,si;
xor ax,ax;
mov dl,10;
mov cx,2;
; ПЕРЕВОДИМ СИМВОЛЫ В ЧИСЛО
lab1: mov bl, byte [si+0000h];
sub bl,30h;
mul dl;
add al,bl;
inc si;
loop lab1;
; ВЫДЕЛЯЕМ СЕКУНДЫ ИЗ ЧИСЛА(ЧАСЫ)
mov di,3600;
inc si;
mul di;
push ax;
xor ax,ax;
mov dl,10;
mov cx,2;
; ВЫДЕЛЯЕМ СЕКУНДЫ ИЗ ЧИСЛА (МИНУТЫ)
lab2: mov bl, byte [si+0000h];
sub bl,30h;
mul dl;
add al,bl;
inc si;
loop lab2;
mov di,60;
inc si;
mul di;
pop cx;
add ax,cx;
push ax;
xor ax,ax;
mov dl,10;
mov cx,2;
; ВЫДЕЛЯЕМ СЕКУНДЫ ИЗ ЧИСЛА (СЕКУНДЫ)
lab3: mov bl, byte [si+0000h];
sub bl,30h;
mul dl;
add al,bl;
inc si;
loop lab3;
pop cx;
add ax,cx;
mov byte [si+00h],'$'
mov di,si;
mov bp,ax;
; НАЧАЛО БЕСКОНЕЧНОГО ВЫВОДА
mov cx,2000;
push cx;
; ПЕРЕВОД СЕКУНД В СИМВОЛЬНЫЙ ВИД
lab4:
mov bx,60;
xor dx,dx;
div bx;
push ax;
mov cx,2;
mov ax,dx;
lab5: mov bx, 10;
xor dx,dx;
div bx;
add dx,30h;
mov byte [si-0001h],dl;
dec si;
loop lab5
dec si;
pop ax;
mov bx,60;
xor dx,dx;
div bx;
push ax;
; ПЕРЕВОД МИНУТ В СИМВОЛЬНЫЙ ВИД
mov ax,dx;
mov cx,2;
lab6: mov bx, 10;
xor dx,dx;
div bx;
add dx,30h;
mov byte [si-0001h],dl;
dec si;
loop lab6;
dec si;
pop ax
mov cx,2;
; ПЕРЕВОД ЧАСОВ В СИМВОЛЬНЫЙ ВИД
lab7: mov bx, 10;
xor dx,dx;
div bx;
add dx,30h;
mov byte [si-0001h],dl;
dec si;
loop lab7;
pop cx;
dec cx;
jcxz lab8 ; ЕСЛИ CX = 0
; ВЫВОД НА ЭКРАН
lab9: push cx
MOV AH,02 ;Запрос на установку курсора
MOV BH,00 ;Экран 0
MOV DH,12 ;Строка 05
MOV DL,36 ;Столбец 12
I NT 10H
mov ah,9h
mov dx,0001h;
int 21h
mov si,di;
mov ax,bp;
jmp lab4 ; ВОЗВРАТ К НАЧАЛУ БЕСКОНЕЧНОГО ЦИКЛА
lab8: inc bp; УВЕЛИЧЕНИЕ ВРЕМЕНИ НА СЕКУНДУ
mov cx,2000;
jmp lab9;
ret
mov ax, 4c00h ; завершение программы и
int 21h ; возврат управления ОС
main endp
end main
Вывод.
Решение задачи было реализовано с помощью стандартных алгоритмов, используя команды смещения умножения, деления и переноса данных.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.