+ Reply to Thread
Results 1 to 3 of 3

Thread: "Аналоговые часы" на MASM (x86, DOS)

  1. #1
    Annihi1at0r's Avatar

    Default "Аналоговые часы" на MASM (x86, DOS)

    Необходимо написать программу на языке ассемблера в среде 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
    Гугль ничего конкретного не выдал.

    Желаемый результат - как в этой программе (см. аттач).
    Attached Files
    Last edited by Annihi1at0r; 27-10-2010 at 21:56.
    MA770T-UD3/AMD Phenom-II B50/16384MB RAM/GF9800GT/Gentoo Linux 11 (kernel 2.6.38 gcc 4.6.0 glibc 2.7.0)

  2. #2
    root's Avatar

    Default Re: "Аналоговые часы" на MASM (x86, DOS)

    Подобные вопросы следует размещать на специализированных форумах, например тут (Раздел: Помощь Студентам)
    Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)

    Не бойся идти медленно, бойся остановиться. (Китайская пословица)

    When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)

  3. Пользователь сказал cпасибо:
    Annihi1at0r (28-10-2010)
  4. #3
    korsader's Avatar

    Default Re: "Аналоговые часы" на MASM (x86, DOS)

    Вот аналоговые часики на асме. Возможно это то, что тебе нужно.
    Attached Files

  5. 2 пользователя(ей) сказали cпасибо:
    Annihi1at0r (16-11-2010) Dark Koder (06-08-2013)
+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:38
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org