Страница 1 из 1

Резидентная программа вывода на экран

Добавлено: 22 дек 2012, 20:18
aidar1290
Есть программа выводящяя сообщение на экран через промежутки времени. Необходимо:1)чтобы после вывода сообщения восстанавливала содержание экрана 2)была резидентной

Код: Выделить всё

; 
tasm dos com #
.286
.model tiny
.code
org 100h
start:  mov ax,3
    int 10h; очищаю экран
    push 0
    pop es
a0: mov ax,es:[46Ch]; читаю системное время
    add ax,100; изменяя это число добиваюсь нужной продолжительности задержки
a1: cmp ax,es:[46Ch]; жду отведенное время
    jnz a1
    mov ah,9; вывожу надпись на экран
    mov dx,offset mes
    int 21h
    mov al,es:[41Ah]; читаю буфер клавиатуры пока не нажмут клавишу
    cmp al,es:[41Ch]
    jz a0
    retn; выхожу из программы
mes db 'Hello!',0Dh,0Ah,'$'
end start 

Re: Резидентная программа вывода на экран

Добавлено: 31 дек 2012, 17:02
MahovIV
aidar1290 писал(а):Есть программа выводящяя сообщение на экран через промежутки времени. Необходимо:1)чтобы после вывода сообщения восстанавливала содержание экрана 2)была резидентной

Код: Выделить всё

; 
tasm dos com #
.286
.model tiny
.code
org 100h
start:  mov ax,3
    int 10h; очищаю экран
    push 0
    pop es
a0: mov ax,es:[46Ch]; читаю системное время
    add ax,100; изменяя это число добиваюсь нужной продолжительности задержки
a1: cmp ax,es:[46Ch]; жду отведенное время
    jnz a1
    mov ah,9; вывожу надпись на экран
    mov dx,offset mes
    int 21h
    mov al,es:[41Ah]; читаю буфер клавиатуры пока не нажмут клавишу
    cmp al,es:[41Ch]
    jz a0
    retn; выхожу из программы
mes db 'Hello!',0Dh,0Ah,'$'
end start 
Если ты нашёл способ, то поделись своим опытом. У меня несколько другая проблема. Я написал программу на ассемблере, которая складывает два двойных слова. Программа работает, но результат не отображается на экране. .model small ; модель памяти, используемая для ЕХЕ
.stack 100h ; сегмент стека размером в 256 байт
.data
X dd 1111111h ;определение данных
Y dd 2222222h
Z dd 3333333h
.code
start: mov ax,@data ; сегментный адрес строки message
mov ds,ax ; помещается в DS
mov bx, offset x
mov ax, [bx]
add ax,[bx+4]
mov [bx+8], ax
mov ax, [bx+2]
adc ax, [bx+6]
mov [bx+10], ax
mov ah,09h
lea dx,string
int 21h
mov ax,4C00h
int 21h ; функция DOS "завершить программу"
end start