Assembler - язык неограниченных возможностей


Мультиплексорное прерывание - часть 12


; сюда передается управление, если все 255 функций мультиплексора заняты ; резидентными программами no_more_mux: mov ah,9 mov dx, offset no_more_mux_msg int 21h ret

; текст, который выдает программа при запуске: usage db "ASCII display and input program" db " v1.0",0Dh,0Ah db "Alt-A - активация",0Dh,0Ah db "Стрелки - выбор символа",0Dh,0Ah db "Enter - ввод символа",0Dh,0Ah db "Escape - выход",0Dh,0Ah db "$" ; текст, который выдает программа, если она уже загружена: already_msg db "Ошибка: программа уже загружена",0Dh,0Ah,'$' ; текст, который выдает программа, если все функции мультиплексора заняты: no_more_mux_msg db "Ошибка: Слишком много резидентных программ" db 0Dh,0Ah,'$' ; текст, который выдает программа при успешной установке: installed_msg db "Программа загружена в память",0Dh,0Ah,'$'

initialize endp end start

Резидентная часть этой программы занимает в памяти целых 2064 байта (из которых на собственно коды команд приходится только 436). Это вполне терпимо, учитывая, что обычно программа типа ascii.com запускается перед простыми текстовыми редакторами для DOS (edit, multiedit, встроенные редакторы оболочек типа Norton Commander и т.д.), которые не требуют для своей работы полностью свободной памяти. В других случаях, как, например, при создании программы, копирующей изображение с экрана в файл, может оказаться, что на счету каждый байт; такие программы часто применяют для сохранения изображений из компьютерных игр, которые задействуют все ресурсы компьютера по максимуму. Здесь резидентным программам приходится размещать данные, а иногда и часть кода, в старших областях памяти, пользуясь спецификациями HMA, UMB, EMS или XMS. В следующей главе рассмотрен простой пример именно такой программы.





Начало  Назад  Вперед