- •Лучший курс лекций по лучшему языку программирования – языку ассемблера Блок управления памятью (mcb)
- •Программирование на Ассемблере для ibm pc
- •Программная модель 8086
- •Программная модель мп
- •Сегментная память
- •Вывод на экран
- •Вывод строки символов
- •Вывод на экран шестнадцатеричного числа
- •Процедуры
- •Ввод символов
- •Вывод на экран двоичного числа
- •Работа с дисковыми файлами
- •Префикс сегмента программы (psp)
- •Структура префикса программного сегмента.
- •Прерывания.
- •Табличные вызовы подпрограмм.
- •Макрокоманды.
- •Макроопределения.
- •Использование параметров в макроопределениях.
- •Директива local
- •Использование библиотек макроопределений.
- •Конкатенация. (&)
- •Директивы повторения.
- •Условные директивы.
- •Перечисление условных директив.
- •Пример использования ifnb.
- •Пример использования макроопределений.
- •Резидентные программы tsr (terminate and stay resident)
- •Защита резидентной программы от повторной загрузки.
- •Выгрузка резидентной программы.
- •Переключение стека в резидентной программе.
- •Обработчик прерываний от таймера
- •Контроллер прерываний и его программирование
- •Взаимодействие прикладных и системных обработчиков прерываний
- •Резидентный обработчик прерываний от клавиатуры с подключением до системного
- •Резидентный обработчик прерывания от клавиатуры с подключением после системного обработчика
- •Резидентный обработчик прерываний от клавиатуры с подключением как до, так и после системного.
- •Вывод на экран текста средствами bios
- •Режимы дисплея
- •Работа с видеобуфером.
- •Логическая организация текстового видеобуфера.
- •Программирование портов. Звук.
- •Программирование звукового канала таймера.
- •Интерфейс с Си
- •Программы с несколькими сегментами команд.
- •Программы с несколькими сегментами данных.
- •Директива assume. Инициализация сегментных регистров и замена сегментов.
- •Структуры и записи.
Лучший курс лекций по лучшему языку программирования – языку ассемблера Блок управления памятью (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) будет помещен за концом окружения.