Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
25
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Лучший курс лекций по лучшему языку программирования – языку ассемблера Блок управления памятью (mcb)

Смещ.

Длина

Содержимое

'M'(4dH) - за этим блоком есть еще блоки

+0

1

Тип

'Z'(5aH) - данный блок является последним

+1

2

Владелец

параграф владельца (для FreeMem); 0 = владеет собой сам

+3

2

Размер

число параграфов в этом блоке распределения

+5

0bH

Зарезервировано

+10Н

?

Блок памяти начинается здесь и имеет длину (Размер*10H) байт.

Параграф по этому адресу возвращает функция 48H AllocMem.

Замечания:

блоки памяти всегда выравнены на границу параграфа ("сегмент блока")

блоки M-типа: следующий блок находится по (сегмент_блока+Размер):0000

блоки Z-типа:(сегмент_блока+Размер):0000=конец памяти (намек: a000H=640K)

После функции 4bH Exec, Z-блок начинается с ( PSP -1):0000 нового процесса

Окружение DOS

Использование окружения

Окружение не превышает 32K байт и начинается на границе параграфа. Смещение 2cH в PSP текущей программы содержит номер параграфа окружения.

Вы можете найти нужное 'имя' серией сравнений строк ASCIIZ, пока не дойдете до пустой строки (нулевой длины), что указывает конец окружения. Обычно 'имя' в каждой строке окружения задано прописными буквами, но это необязательно.

Одна типичная операция с окружением используется программами типа оболочки, которые запускают вторичную копию COMMAND.COM. Такие программы обычно ищут 'имя' "COMSPEC" и используют соответствующее 'значение' как полный путь интерпретатора команд DOS -- программы, запускаемой через функцию DOS 4bH .

Некоторые программы требуют, чтобы оператор поместил информацию для приложения в окружение посредством команды SET. Приложение может использовать такую информацию при каждом выполнении. Например, текстовый процессор может отыскивать в окружении 'имя' "DICTIONARY" и использовать соответствующее 'значение' как имя файла со словарными данными.

INT 19H: Начальный загрузчик (Bootstrap Loader)

Этот вектор рассматривается после POST , чтобы попытаться загрузить и выполнить какой-либо код "начального вызова" на дискете или твердом диске.

Данные в секторе 1 дорожки 0 головки 0 дисковода 0 для первого откликнувшегося диска (дискеты или твердого диска) загружаются по абсолютному адресу 0000:7c00, и управление передается по этому адресу. Если опрос всех дисков неудачен, управление передается на прерывание INT 18H .

На твердом диске, этот код в "корневом секторе" в действительности определяет активный раздел диска, а затем загружает и выполняет корневой сектор для этого раздела. Это передает управление активной операционной системе диска.

См. Таблицу разделов диска о последовательности загрузки с твердого диска.

См. Структуру корневого сектора о формате корневого сектора для DOS.

Замечание: Вы можете использовать этот сервис, чтобы перезагрузить DOS после

изменения каких-либо значений в Списке оборудования или иных Переменных BIOS (не забудьте установить по адресу 0:0472 значение 1234H). После перезагрузки DOS примет во внимание все ваши изменения.

Окружение DOS

Окружение имеет ограниченный размер в DOS, но можно создать большее окружение при помощи директивы 'SHELL=' в файле CONFIG.SYS или команды 'COMMAND /e:NNNNN', которая запускает вторичную копию командного интерпретатора, резервируя NNNNN байт пространства для окружения.

Структура:

Пример в мнемонике ассемблера:

Имя_1=значение_10

db 'COMSPEC=c:\command.com',0

Имя_2=значение_20

db 'PROMPT=$p$g',0

:

db 'WP=c:\wordproc',0

Имя_N=значение_N0

db 'PATH=d:\;c:\dos;c:\utils',0

0

db 0

хххх

EXEC_string_10

:

EXEC_string_NN0

0

ТОЛЬКО

DOS

3.0

dw 1

db 'C:\ACCTNG\AR001.EXE',0

db 0

Здесь 0 - это символ ASCII NUL (00H), а xxxx - 16-битовое двоичное значение.

Окружение DOS

Отыскание пути загрузки

Начиная с версии 3.0, DOS помещает дополнительную строку за концом официального окружения. Эта строка содержит диск и путь, с которых была загружена программа. "Умная" прикладная программа может использовать эту строку, чтобы облегчить себе поиск своих оверлеев и файлов данных.

Это имеет практическое значение, так как DOS 3.0 позволяет оператору вызывать

программу, указывая ее путь перед именем программы.

Вслед за последней строкой ASCIIZ окружения находится нулевой байт, указывающий конец официального окружения. Следующие два байта содержат 16-битовый двоичный счетчик дополнительных строк (обычно 0001H). Вслед за значением счетчика сидит строка ASCIIZ, содержащая путь и имя файла. Это в точности та строка, которая использовалась функцией DOS 4bH (EXEC) для загрузки и запуска вашей программы.

Даже если программный файл был не в текущем оглавлении, и DOS использовала путь поиска команд (т.е. строку PATH=) для отыскания программы, корректное полное имя программного файла (d:\путь\имяфайла.тип,0) будет помещен за концом окружения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]