Результатом работы программы является выведенный в центр экрана символ *.
Программа 3. Повторите эксперимент без передачи управления. Не забудьте снять заявку в регистре ISR контроллера прерываний.
itimer3.asm
sseg SEGMENT STACK
db 64 dup (?)
sseg ENDS
dseg SEGMENT PARA PUBLIC 'DATA'
adr_int:
ipsave dw 0h
cssave dw 0h
msg db '*$'
dseg ENDS
cseg SEGMENT
main proc FAR
ASSUME cs:cseg, ds:dseg, ss:sseg
start:
; Data segment init
mov ax, dseg
mov ds, ax
; Get handler int8 adress
mov ax,3508h
int 21h
mov ipsave, bx
mov ax, es
mov cssave, ax
push ds
mov dx, offset int_8
mov ax, seg int_8
mov ds, ax
; Set our handler
mov ah, 25h
mov al, 8h
int 21h
pop ds
mov ax,0h
; Work with klav
int 16h
push ds
mov dx, ipsave
mov ax, cssave
mov ds, ax
mov ah, 25h
mov al, 8h
int 21h
pop ds
; Exit
mov ah,4Ch
int 21h
main ENDP
int_8 proc FAR
push ax
push bx
push es
push ds
push di
mov ax, dseg
mov ds,ax
; Color Display
mov ax,0B800h
mov es,ax
lea bx, msg
; Where to output
mov di,7D0h
m1:
mov al,[bx]
cmp al,'$'
je m_ex
mov es:[di],al
inc di
inc bx
mov es:[di],word ptr 0F0h
inc di
jmp m1
m_ex:
pop di
pop ds
pop es
pop bx
pop ax
; Unset int flag
mov al,20h
out 20h,al
iret
int_8 ENDP
cseg ENDS
END start
Результатом работы программы является выведенный в центр экрана символ *.
Программа 4. Замените в обработчике прямое отображение в видеопамять на процедуру инкрементации счетчика прерываний от таймеры так, чтобы по истечению одной секунды происходил вызов пользовательского прерывания int60h. Перед возвратом из программы обработки int8h передать управление исходному обработчику, чтобы не сбивать системные часы. Для иллюстрации результата в обработчик int60h включить вывод на экран символа.
Интервалу времени 1с соответствует 18 прерываний от таймера. Как только программный счетчик досчитывает до 18, производится вызов прерывания int 60h.
itimer4.asm
sseg SEGMENT STACK
db 64 dup (?)
sseg ENDS
dseg SEGMENT PARA PUBLIC 'DATA'
cnt dw 0h
adr_int8:
ipsave_8 dw 0h
cssave_8 dw 0h
adr_int60:
ipsave_60 dw 0h
cssave_60 dw 0h
msg db '*$'
dseg ENDS
cseg SEGMENT
main proc FAR
ASSUME cs:cseg, ds:dseg, ss:sseg
start:
; Data segment init
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.