Задание
Программа в цикле выводит на экран таблицу ASCII кодов (с 00 до FF) с интервалом 1 сек.
Обработчик CTRL+C делает подсчет нажатий на CTRL+C (n).
Когда n=5, выводит символ, на котором произошло событие.
Решение
Код: Выделить всё
.model small
.stack 100h
.486
.data
mes1 db 'Please press Ctrl+C 5 raz'
len1 equ $-mes1
mes2 db 0dh, 0ah,'Please press CTRL+Z to EXIT'
len2 equ $-mes2
mes3 db 0dh, 0ah,'ASCII:',0dh, 0ah
len3 equ $-mes3
mes4 db 'ASCII:'
len4 equ $-mes4
sim db 00h
cnt db 0
clrscr macro ;макрос очистки экрана
mov ah, 0
mov al, 3
int 10h
endm
delay macro time
local inner,outer
mov cx,time
outer: push cx
mov cx,0
inner: loop inner
pop cx
loop outer
endm
outmes1 macro mes,len
mov ah, 40h
mov bx, 1
mov cx, len
mov dx, offset mes
int 21h
endm
outchar macro c
mov ah, 2
mov dl, c
int 21h
endm
stop macro
mov ah,8
int 21h
endm
wind macro f,scroll,xl,yl,xr,yr,atr
mov ah, f
mov al, scroll
mov bh, atr
mov ch, yl
mov cl, xl
mov dh, yr
mov dl, xr
int 10h
endm
cprint macro mes,len,x,y,atr
push es
mov ax, ds
mov es, ax
mov ah, 13h
mov al, 1
mov bh, 0
mov bl, atr
mov cx, len
mov dh, y
mov dl, x
mov bp, offset mes
int 10h
pop es
endm
.code
begin:
mov ax,@data
mov ds,ax
eshe:
clrscr
outmes1 mes1,len1
outmes1 mes2,len2
outmes1 mes3,len3
again:
delay 3000
mov ah, 06h ;нoмep функции DOS
mov dl, 0FFH ;зaпpoc ввoдa c клaвиaтуpы
int 21h
jz nenagato
cmp al, 1Ah ;CTRL+Z
je exit
cmp al, 03h ;CTRL+C
je ctrlc
jmp nenagato
nenagato:
outchar sim
cmp sim,254
jne next
mov sim,00h
;jmp eshe
next:
inc sim
jmp again
ctrlc:
inc cnt
cmp cnt,5
jne nenagato
outchar sim
wind 6,0,35,15,45,17,42
cprint mes4,len4,36,16,33
cprint sim,1,43,16,33
stop
exit:
mov ah,4ch
int 21h
end begin
Оказывается, надо делать свой обработчик прерываний.
Что и где мне нужно поправить и дописать? Наставьте меня на путь истинный! Просто не приходилось писать свои обработчики.
Можно скачать исходник Здесь
И сам exe Здесь
Помогите плиз! Нужно сегодня сдать рабочую прогу! А, то не видать мне зачета!