Разработка программы, моделирующей на экране дисплея часы с десятичной индикацией часов, минут и секунд

Страницы работы

8 страниц (Word-файл)

Содержание работы

НОВОСИБИРСКИЙ  ГОСУДАРСТВЕННЫЙ  ТЕХНИЧЕСКИЙ 
УНИВЕРСИТЕТ

ФАКУЛЬТЕТ  АВТОМАТИКИ  И  ВЫЧИСЛИТЕЛЬНОЙ  ТЕХНИКИ

Кафедра  Систем Сбора и Обработки Данных

Микропроцессорная техника

Расчетно-графическая работа

Вариант №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

Вывод.

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

Похожие материалы

Информация о работе