; Подпрограмма задержки
DELAY proc near
Push cx
Mov cx, 100
D12: push cx
Xor cx,cx
D11: nop
Loop d11
Pop cx
Loop d12
Pop cx
Ret
DELAY endp
; Подпрограмма вывода символа с заданным атрибутом
OUT_SYMBOL proc near
Push ax
Push bx
Mov al, SYM
Mov ah, ATRIBUT1
Mov bx, POS
Call DELAY
mov es:[bx], ax
Pop bx
Pop ax
Ret
OUT_SYMBOL endp
; Основная программа
START: mov ax, DATA
Mov ds, ax
; чтение вектора прерывания
Mov ah, 35h
Mov al, 1Ch
Int 21h
Mov OLD_IP, bx
Mov OLD_CS, es
; установка вектора прерывания
Push ds
Mov dx, offset NEW_1C
Mov ax, seg NEW_1C
Mov ds, ax
Mov ah, 25h
Mov al, 1Ch
Int 21h
Pop ds
Mov ax, 0B800h
Mov es, ax
Call CLS
Call DELAY
P1: cmp EXIT, 0
Jne quit
Cmp DIRECT, 1
Jz p2
Cmp DIRECT, 2
Jz p3
Cmp DIRECT, 3
Jz p4
Mov ax, POS
Add ax,160
Cmp ax, 3999
Jg p1
Mov POS, ax
Call OUT_SYMBOL
Jmp p1
P2: mov ax, POS
Sub ax, 160
Jl p1
Mov POS, ax
Call OUT_SYMBOL
Jmp p1
P3: mov ax, POS
Sub ax, 2
Jl p1
Mov POS, ax
Call OUT_SYMBOL
Jmp p1
P4: mov ax, POS
Add ax, 2
Jg p1
Mov POS, ax
Call OUT_SYMBOL
Jmp p1
Quit: call CLS
Mov dx, OLD_IP
Mov ax, OLD_CS
Mov ds, ax
Mov ah, 25h
Mov al, 1Ch
Int 21h
Mov ax, 4c00h
Int 21h
CODE ends
End START
Варианты заданий
Во всех вариантах задания завершение программы осуществляется при нажатии цифры 0.
|