Функция 4BH, подфункция 01H. Структура данных, формируемая подфункцией 01H Смещение Размер Назначение 00H Сегментный адрес окружения запускаемой программы 02H
Функция 4BH, подфункция 01H Назначение: загрузка программы в память без ее выполнения. Подфункция 01H выполняет те же действия, что и подфункция 00H, но не запускает программу. Параметры подфункции 01H, такие же, как и для подфункции 01H. После вызова подфункции 01H регистровая пара ES: BX указывает на структуру размером 22 байта с информацией о загруженной программе. Эта структура включает в себя блок параметров, переданный подфункции 01H и два дополнительных поля. В табл. 19 приведены смещения полей структуры, их размеры (в байтах) и назначение.
Таблица 19 Структура данных, формируемая подфункцией 01H
Точку входа в программу можно использовать для запуска загруженной программы. Это можно выполнить, например, командой дальнего перехода JMP. Последнее поле структуры определяет параметры, необходимые для переключения стека. Первые два байта поля содержат необходимое значение регистра SP, а вторые два байта – необходимое значение регистра SS. Перед запуском программы вызывающая программа должна обеспечить переключение на стек вызываемой программы.
Функция 4BH, подфункция 03H Назначение: оверлейная загрузка программы в память без ее запуска. Оверлейная загрузка означает загрузку в память фрагмента кода программы без подготовки префикса программного сегмента и инициализации различных регистров. Оверлейная загрузка является единственным способом выполнения программ, объем кода которых превышает объем доступной памяти. Такие программы выполняются по частям, выгружая уже выполненные фрагменты кода и загружая новые.
Использование оверлейной загрузки является достаточно сложным процессом, который используется только для очень больших программ, и здесь рассматриваться не будет.
Функция 4CH Назначение: завершение программы и передача управления вызывавшей программе с кодом возврата. Код возврата указывается в регистре AL. Хотя для завершения программы можно использовать функцию DOS 00H или прерывание 20H, предпочтительнее использовать функцию 4CH. К тому же эта функция может использоваться для возвращения программой какого-либо значения в вызвавшую программу. Пример использования функции 4CH: MOV AH, 4CH MOV AL, 01H ; код возврата INT 21H
Функция 4DH Назначение: получение кода возврата последней завершенной программы. Код возврата помещается в регистр AL. В регистр AH помещается значение, определяющее, каким образом была завершена программа. В табл. 20 приведены возможные значения регистра AH после вызова функции 4DH.
Таблица 20 Значения регистра AH после вызова функции 4DH
Функция 4DH возвращает корректную информацию только один раз для каждой последней завершенной программы. Пример использования функции 4DH: MOV AH, 4DH INT 21H CMP AH, 0 JNZ M1 . . . ; не нормальное завершение программы M1: . . . ; нормальное завершение программы
Функция 50H Назначение: установка текущего префикса программного сегмента. Функция 50H используется обычно в резидентных программах для того, чтобы сообщить DOS сегмент своего префикса программного сегмента. Если этого не сделать, DOS будет считать, что текущей программой является та программа, которая была прервана при переключении на обработчик прерывания резидентной программы. Сегмент префикса программного сегмента заносится в регистр BX.
Пример использования функции 50H: CODE SEGMENT ORG 100H . . . New2FH PROC ; обработчик программного прерывания . . . MOV BX, CS MOV AH, 50H INT 21H . . . IRET New2FH ENDP . . . CODE ENDS Для этого примера следует отметить, что прерывание DOS 21H вызывается в обработчике программного, а не аппаратного прерывания.
Функция 51H Назначение: получение сегмента префикса программного сегмента текущей программы. Функция 51H возвращает в регистре BX значение префикса программного сегмента. Если функция вызвана в обработчике программного прерывания, то возвращаемое в регистре BX значение является сегментом префикса программного сегмента прерванной программы, а не резидентной. Для того чтобы в резидентной программе можно было использовать префикс программного сегмента, нужно его значение во время инициализации резидентной программы записать в переменные резидентной части. Это справедливо для программ типа EXE. Для COM программ регистр CS всегда указывает на префикс программного сегмента и использование функции 51H не имеет смысла. Пример использования функции 51H: MOV AH, 51H INT 21H Функции настройки даты/времени позволяют получить или установить дату и время DOS. Начиная с DOS 3. 3, функции установки даты и времени также изменяют значения даты и времени BIOS.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|