та ТВП
; за адресою Adr_IRQ
push cs
pop ax es: Adr_IRQ + 2, ax
;- Програмування ППА
mov al, 10010000b; Керуюче слово для ППА
out PPA_CW, al
;- Програмування ПІТ
call ProgramCalculateY2SetPIT
call ProgramCalculateY3SetPIT
;- Програмування контролера переривань al, 00010010b; Запис ICW1 в КП (робота КП)
out PIC_ICW1, al al, 01000000b; Запис ICW2 в КП (номер вектора переривання)
out PIC_ICW2, al al, 00000000b; Запис OCW1 в КП (маскування переривань)
out PIC _ICW1, al; Дозвіл апаратних переривань
; -
;- Початок основної програми -
; -:
ProgramKlavIn ProgramCalculateY1SetY1SetInd ProgramStart
; -
;- Підпрограма обробки переривання -
; -: ax ProgramCalculateY2SetPIT ax
; -
;- Підпрограма опитування клавіатури (порту А ППА) -
; -: ax dx bx
; Прийняти і зберегти значення Х
in ax, PPA_A
mov ds: Data_X, ax
; Прийняти і зберегти значення К
in ax, PPA_B ds: Data_K, ax
bx dx ax
; -
;- Підпрограма розраховує У1 і виводить його в порт С -
;-SetY1SetInd: ax dx bx
; розрахунок У1
mov ax, ds: Data_X; Переміщення змінної X в ax
cmp ax, ds: Data_K; Порівнювання X і K
jl xmin; Якщо X менше К, то перехід на мітку xminax, ds: Data_K; Переміщення змінної K в ax
xmin: add ax, ds: Data_x; MIN (X, K) + X
mov ds: Data_Y1, ax; Збереження результату
; Висновок в порт С
mov bx, ax
and ax, 0000000000001111b; виділення молодшої тетради в ax
and bx, 0000000011110000b; виділення старшої тетради в bx ax, bx; молодша і старша тетради в загальний регістр ax
out PPA_C, al
bx dx ax
; -
;- Підпрограма розрахунку Y2 і програмування ПІТ -
;-SetPIT: ax dx
; розрахунок У2 ax, ds: Data_X; Переміщення змінної X в ax
cmp ax, ds: Data_K; Порівнювання X і K
jg xmax; Якщо X менше К, то перехід на мітку xminax, ds: Data_K; Переміщення змінної K в ax
xmax: add ax, 4d; MAX (X, K) +4
mov ds: Data_Y2, ax
; програмування ПІТ за значенням У2 ax, 0000000000011110b; записати молодший байт в лічильник 0
; і встановити режим 3
out Adr_PIT_U, al
out Adr_PIT_0, dl ax, 000000000010111...