Необходимо написать программу на языке ассемблера в среде MASM (MASM 6.11 если версия важна) под архитектуру х86, операционка MS-DOS. Программа должна динамически выводить на экран аналоговые (стрелочные) часы.
Собственно проблема в том, что я не работал с выводом графики в ассемблере и поэтому не знаю как организовать считывание показаний часов и привязывание их к изменению координат стрелок.
Сами часы (не аналоговые):
Гугль ничего конкретного не выдал.Code:OutStr macro str ;макрос вывода строки push dx mov ah,09h lea dx,str int 21h pop dx endm ;---------------------------------------- OutChar macro char ;макрос вывода символа push ax push dx mov ah,06h mov dl,char add dl,30h int 21h pop dx pop ax endm ;---------------------------------------------------------------------------------------------------- Decomposition macro time ;макрос разложения двузначного числа (16-ного) на цифры и вывода их на экран push bx mov bh,time ;используется bx mov bl,time and bh,11110000b shr bh,4h and bl,00001111b OutChar bh OutChar bl pop bx endm ;------------------------------------- Delay macro time ;макрос задежки в мкс local ext,iter push cx mov cx,time ext: push cx mov cx,5000 iter: loop iter pop cx loop ext pop cx endm ;----------------------------------------------------------- GotoXY macro x,y ;макрос установки позиции курсора в т.(x,y) push ax push bx push dx mov ah,02 ;Запрос на установку курсора mov bh,0 ;Экран 0 mov dh,x ;Строка 0 mov dl,y ;Столбец 0 int 10h ;Передача управления в BIOS pop dx pop bx pop ax endm ;---------------------------------- ClrScr macro ;макрос очистки экрана push ax push bx push cx push dx mov ah,06h ;AH 06 (прокрутка) mov bh,07 ;Нормальный атрибут (черно/белый) mov cx,0000 ;Верхняя левая позиция mov dx,184Fh ;Нижняя правая позиция int 10h ;Передача управления в BIOS pop dx pop cx pop bx pop ax endm ;---------------------------------------------- BlinkOn macro ;макрос включения мигания курсора push ax push cx mov ax,0100h mov cx,0506h int 10h pop cx pop ax endm ;------------------------------------------------ BlinkOff macro ;макрос выключения мигания курсора push ax push cx mov ax,0100h mov cx,2000h int 10h pop cx pop ax endm ;----------------------------------------------- .model small .stack 100h .data M1 DB ':$' M2 DB 'Current time....$' M3 DB '',10,13,'$' .code start: mov ax,@DATA ;инициализация mov ds,ax ClrScr BlinkOff l1: GotoXY 0,0 OutStr M2 xor ax,ax mov ah,2h ;получение времени int 1Ah Decomposition ch ;ch - часы OutStr M1 Decomposition cl ;cl - минуты OutStr M1 Decomposition dh ;dh - секунды OutStr M3 mov ah,01h ;проверка буфера клавиатуры int 16h ;флаг нуля zf=0 если была нажата клавиша jnz exit Delay 10000 jmp l1 exit: ClrScr BlinkOn mov ax,4C00h int 21h END start
Желаемый результат - как в этой программе (см. аттач).



Reply With Quote
Thanks