ВУЗ:
Составители:
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 объявлена как дальняя, так как в ней находится
текст резидентной секции, управление которой может передаваться
только с помощью дальнего перехода или вызова.
Страницы
- « первая
- ‹ предыдущая
- …
- 117
- 118
- 119
- 120
- 121
- …
- следующая ›
- последняя »
