Системное программное обеспечение. Рощин А.В. - 119 стр.

UptoLike

Составители: 

119
PSP. Ясно, что с помощью этого прерывания DOS нельзя оставить в
памяти программу, больше 64 килобайт. Если для завершения
инициализирующей секции используется функция 31h прерывания DOS int
21h, в регистре dx указывается размер резидентной секции (с учетом PSP) в
параграфах (1 параграф = 16 байтам). Для определения размера
резидентной секции в параграфах вычисляется выражение (size + 100h +
0Fh)/16 где: size – размер резидентной секции в байтах. Дополнительное
слагаемое 0Fh (десятичное 15) в выражении необходимо для того, чтобы
отводимое количество параграфов было округлено в большую сторону. В
противном случае будет отсечен конец программы, меньший параграфа.
Ранее уже было сказано о том, что инициализирующая секция
располагается в конце программы. Такое расположение приводит к тому,
что после завершения инициализирующей секции занимаемая ею память
освободится, так как она не входит в указанный размер и расположена
после резидентной секции.
Пример структуры резидентной программы типа .COM
Code SEGMENT
assume cs:Code, ds:Code
org 100h
-----------------------------------------------------------
resprog proc far
jmp init ; Переход на секцию инициализации
; Данные и переменные резидентной секции
...................
entry: ; Текст резидентной секции
...................
resprog endp
-----------------------------------------------------------
size equ $-resprog ; Размер резидентной секции в байтах
-----------------------------------------------------------
init proc near ; Инициализирующая секция
; Текст инициализирующей секции
; Вычисление (size + 10Fh)/16 -> DX
mov ax,3100h ; Функция 31h
int 21h
init endp
-----------------------------------------------------------
Code ends
END resprog
Пояснения к примеру структуры резидентной программы:
1. Предполагается, что прописные и строчные буквы транслятором не
различаются (по умолчанию так и есть).
2. Процедура resprog объявлена как дальняя, так как в ней находится
текст резидентной секции, управление которой может передаваться
только с помощью дальнего перехода или вызова.
                                           119



      PSP. Ясно, что с помощью этого прерывания DOS нельзя оставить в
памяти программу, больше 64 килобайт. Если для завершения
инициализирующей секции используется функция 31h прерывания DOS int
21h, в регистре dx указывается размер резидентной секции (с учетом PSP) в
параграфах (1 параграф = 16 байтам). Для определения размера
резидентной секции в параграфах вычисляется выражение (size + 100h +
0Fh)/16 где: size – размер резидентной секции в байтах. Дополнительное
слагаемое 0Fh (десятичное 15) в выражении необходимо для того, чтобы
отводимое количество параграфов было округлено в большую сторону. В
противном случае будет отсечен конец программы, меньший параграфа.
      Ранее уже было сказано о том, что инициализирующая секция
располагается в конце программы. Такое расположение приводит к тому,
что после завершения инициализирующей секции занимаемая ею память
освободится, так как она не входит в указанный размер и расположена
после резидентной секции.
      Пример структуры резидентной программы типа .COM
Code SEGMENT
assume cs:Code, ds:Code
           org       100h
-----------------------------------------------------------
resprog              proc far
                     jmp init      ; Переход на секцию инициализации
 ; Данные и переменные резидентной секции
 ...................
entry:                             ; Текст резидентной секции
 ...................
resprog endp
-----------------------------------------------------------
size equ $-resprog                 ; Размер резидентной секции в байтах
-----------------------------------------------------------
init                 proc near ; Инициализирующая секция
 ; Текст инициализирующей секции
 ; Вычисление (size + 10Fh)/16 -> DX
                     mov ax,3100h           ; Функция 31h
                     int  21h
init       endp
-----------------------------------------------------------
Code ends
           END resprog

Пояснения к примеру структуры резидентной программы:
1. Предполагается, что прописные и строчные буквы транслятором не
   различаются (по умолчанию так и есть).
2. Процедура resprog объявлена как дальняя, так как в ней находится
   текст резидентной секции, управление которой может передаваться
   только с помощью дальнего перехода или вызова.