Анализ технического задания. Составление карты распределения адресного пространства. Модуль управления и индикации CPAN, страница 27

298 4199  2E: 88 26 061A            mov cs:[061Ah],ah;

299 419E  57                        push di

300 419F  58                        pop ax

301 41A0  2E: A2 061C               mov cs:[061Ch],al;

302 41A4  2E: 88 26 061E            mov cs:[061Eh],ah;

303 41A9  F4                        hlt

304                                   ;-------------------------------------------------------------------305                                   ;Обработка IRQ2 - прерывания от клавиатуры

306                                   ;

307                                   ;При обработке прерывания от оператора МПС должна выполнить следующие действия:

308                                   ;а) опрос клавиатуры и определение кода нажатой клавиши;

309                                   ;б) ввод уставки последовательным нажатием клавиш 0 - F

310                                   ;   после  нажатия клавиши УСТАВКА;

311                                   ;в) вывод на световую индикацию значений X1...X4 и Q4 в случае

312                                   ;   нажатия клавиши ВЫВОД;

313                                   ;г) перевод системы в состояние ожидания в случае нажатия клавиши ОСТАНОВ.

314                                   ;-------------------------------------------------------------------315 41AA                         IRQ2:

316 41AA  FA                        cli         ;Запрещение прерывания.

317                                   ;Сохранение регистров в стеке.

318 41AB  50                        push ax

319 41AC  53                        push bx

320 41AD  51                        push cx

321 41AE  52                        push dx

322 41AF  9C                        pushf

323 41B0  B0 40                     mov al,01000000b ;программирование контроллера дисплея/клав для режима

324                                   ;считывания ОЗУ клавиатуры

325 41B2  E6 49                     out [49h],al

326 41B4  E4 48                     in al,[48h]  ;считывание кода нажатой клавиши

327 41B6  3C 10                     cmp al,10h              ;проверка - это клавиша УСТАВКА

328 41B8  75 08                     jne check1      ;если нет - переход

329 41BA  B0 02                     mov al,2        ;устанавливаем признак уставки

330 41BC  A2 0303r                  mov [ust],al    ;ust - ячейка памяти

331 41BF  EB 38 90                  jmp break

332 41C2                         check1:

333 41C2  3C 11                     cmp al,11h      ;проверка - это клавиша ВЫВОД

334 41C4  75 0B                     jne check2      ; если нет - переход

335 41C6  E8 FF29                   call output

336 41C9  32 C0                     xor al,al       ;сбрасываем признак уставки

337 41CB  A2 0303r                  mov [ust],al    ;ust - ячейка памяти

338 41CE  EB 29 90                  jmp break

339 41D1                         check2:

340 41D1  3C 12                     cmp al,12h      ;проверка - это клавиша ОСТАНОВ

341 41D3  75 01                     jne check3      ;если нет - переход

342 41D5  F4                        hlt

343 41D6                         check3:  ; значит это цифровая клавиша

344 41D6  8A 26 0303r               mov ah,[ust]

345 41DA  0A E4                     or ah,ah

346 41DC  74 1B                     jz break    ;признак уставки не установлен - клавиша не обрабатывается

347 41DE  FE 0E 0303r               dec [ust]

348 41E2  74 0E                     jz ust_2        ;ввести младший полубайт уставки

349                                   ;ввод старшего полубайта уставки

350 41E4  D0 E0                     shl al,1

351 41E6  D0 E0                     shl al,1

352 41E8  D0 E0                     shl al,1

353 41EA  D0 E0                     shl al,1

354 41EC  A2 0302r                  mov [pred_key],al    ;pred_key - ячейка, хранящая вводимую уставку

355 41EF  EB 08 90                  jmp break