
- •В.А. Афанасьев
- •Часть 1 Лабораторный практикум
- •Предисловие
- •1. Краткая характеристика операционной среды ms-dos в компьютерах с операционной системой Windows
- •2. Составные части ms-dos и её инициализация
- •3. Взаимодействие Ассемблерной программы с ms-dos и аппаратными средствами Компьютера
- •4. Сегментированная организация памяти в реальном режиме. Виды памяти в среде ms-dos
- •Распределение первого мегабайта памяти компьютера
- •Содержание некоторых полей области данных bios
- •5. Программная модель 32-разрядных процессоров i80x86
- •Назначения сегментных регистров
- •6.2.2. Путь выполнения команды
- •6.2.3. Трансляция программы. Опции командной строки
- •6.2.4. Структура программы для .Exe- и .Com-файлов. Образ программы в памяти
- •Сегменты упрощенной модели памяти Small
- •%Title "Имя exe-файла программы"
- •%Title "Имя com – файла программы"
- •6.2.5. Работа с отладчиком Turbo Debugger (td)
- •6.2.6. Форматы машинных команд и их кодирование
- •Определение эффективного адреса
- •Косвенные виды адресации
- •6.2.6.2. Использование 32-битных регистров
- •6.2.7. Работа над синтаксическими ошибками при ассемблировании программы
- •6.3. Задание к работе. Порядок выполнения
- •6.4. Контрольные вопросы
- •Приложения к лабораторной работе № 1 п.1.1. Машинные коды команд базового процессора i8086
- •Машинные коды команд базового процессора i8086
- •П.1.2. Демонстрационные файлы
- •П.1.3. Форматы исполняемых файлов .Exe и .Com на диске
- •А) Листинг prog_com. Lst
- •Содержимое префикса программы psp
- •А) Листинг prog_exe.Lst
- •Б) Машинный код исполняемого файла prog_exe.Exe на диске объёмом 624 байта
- •Формат заголовка исполняемого .Exe – файла на диске
- •7.2.2. Ввод с клавиатуры символьной информации
- •7.2.2.1. Буфер ввода данных с клавиатуры
- •7.2.2.2. Системные функции dos ввода данных с клавиатуры
- •Сравнительная характеристика функций dos ввода с клавиатуры
- •7.2.3. Функции dos вывода данных на экран
- •7.2.4. Расширенные коды ascii и управление программой с клавиатуры
- •Расширенные коды для функциональных клавиш
- •7.2.5. Строковые команды. Общая характеристика
- •Команды обработки строк
- •7.3. Задания к работе. Подготовка и выполнение
- •7.4. Контрольные вопросы
- •Приложения к лабораторной работе № 2 Приложение п.2.1. Примеры реализаций типового задания
- •Приложение п.2.2. Esc-последовательности
- •Параметры Esc-последовательности
- •Приложение п.2.3. Таблица символов в кодировке ascii
- •8.2.2. Прямое программирование видеобуфера в текстовом режиме
- •8.2.3. Справочные данные по функциям bios
- •8.2.3.1. Прерывание int 10h. Видеофункции bios
- •Текстовые видеорежимы и страницы в стандарте vga, поддерживаемые современными видеоконтроллерами
- •8.2.3.2. Рекомендации по использованию видеосервиса bios
- •8.2.3.3. Прерывание int 16h
- •8.2.3.4. Задержка программных операций
- •Int 15h, функция 86h
- •8.3. Варианты индивидуального задания
- •8.4. Контрольные вопросы
- •Приложения к работе № 3 Примеры реализаций типовых заданий п.3.1. Листинг 3.4. Программа получения скан-кодов клавиш клавиатуры
- •П.3.2. Листинг 3.5. Демонстрационная программа использования функций bios для работы с экраном и клавиатурой
- •9.2.1. Представление знаковых и беззнаковых чисел в 16-разрядном компьютере
- •Представление чисел в 16- разрядном компьютере
- •9.2.2. Преобразование ascii-кодов чисел с произвольным основанием в двоичное число
- •9.2.3. Преобразование двоичного числа в ascii-строку числа по произвольному основанию
- •9.2.4. Задание к работе. Порядок выполнения
- •Варианты заданий 1-7
- •Варианты заданий 8-14
- •9.2.5. Вопросы построения многомодульных программ
- •9.2.6. Ассемблирование и компоновка отдельных модулей в программу. Создание библиотеки объектных модулей
- •9.3. Контрольные вопросы
- •Список использованной и рекомендуемой Литературы
- •Оглавление
Содержание некоторых полей области данных bios
Адрес (offset) |
Размер, байт |
Типичное значение |
Описание |
00h, 02h |
2+2 |
03F8h, 02F8 |
Базовые порты COM1 и COM2 |
08h |
2 |
03BCh |
Базовый порт LPT1 |
10h |
2 |
C463h |
Состав установленного оборудования |
13h |
2 |
0280h=640Кбайт |
Основная память |
17h, 18h |
1+1 |
– |
Первый и второй байты флагов клавиатуры |
1Ah |
2 |
001Eh – 003Ah |
Головной указатель клавиатурного буфера |
1Ch |
2 |
001Eh – 003Eh |
Хвостовой указатель клавиатурного буфера |
49h |
1 |
03h |
Текущий видеорежим |
4Ah |
2 |
50h=80 |
Ширина экрана |
4Ch |
2 |
1000h=4байта |
Размер видеостраницы |
4Eh |
2 |
|
Смещение в видеобуфере текущей видеостраницы |
50h |
16 |
– |
Позиции курсора на каждой видеостранице |
60h |
2 |
0607h |
Форма курсора |
6Ch |
4 |
– |
Счётчик прерываний системного таймера, 18,2 Гц |
72h |
2 |
0000h |
Режим начальной загрузки: 0000h – полный цикл POST, 1234h – укороченный цикл после нажатия Ctrl-Alt-Del |
80h |
2 |
001Eh |
Адрес начала буфера клавиатуры |
F0h -FFh |
16 |
Нули |
Область межзадачных связей |
Блоки верхней памяти UMA различаются как по принципу работы – ОЗУ или ПЗУ, так и по месту расположения в компьютере. Видеопамять (тип OЗУ) – обычно находится в составе видеоадаптера, программы BIOS (тип ПЗУ) – на материнской плате компьютера.
Всё, что выше первого мегабайта, получило название расширенной или XMS-памяти (см. табл. 1). Как уже отмечалось выше, доступ к расширенной памяти осуществляется в защищённом режиме и она не доступна для DOS.
Однако в составе DOS имеются два драйвера, которые позволяют пользоваться XMS-памятью в ограниченном объёме. Первый драйвер Himem.sys разрешает DOS загрузить себя в первый сегмент расширенный памяти, получившей название высокой памяти – High Memory (HMA). Второй – Emm386.exe- может выполнять две альтернативные функции:
отображение расширенной памяти на свободные адреса верхней UMA-памяти (Expanded memory – EMS),
загрузку драйверов и резидентных программ DOS (системных и прикладных) из CMA-памяти на свободные адреса верхней памяти UMA.
Указанные функции реализуются посредством модификации конфигурационных файлов Config.sys и Autoexec.bat. В начале файла Config.sys помещаются две строки, осуществляющие загрузку данных файлов (в начале Himem.sys, затем Emm386.exe), затем, в третьей строке, – директиву DOS с параметрами: High и UMB. Параметр High пролонгирует назначение драйвера Himem.sys, UMB – разрешает DOS управлять блоками верхней памяти через посредство драйвера Emm386.exe. Вот, к примеру, как это выглядит для Windows 9x:
........
Device=C:\Windows\Himem.sys
Device=C:\Windows\Emm386.exe Noems
Dos=High,Umb
В конце второй строки добавляется ключевое слово Ram, если требуется реализация от драйвера функции отображения расширенной памяти в umb, или noems – для указанной выше альтернативной функции. В дальнейшем записываются строки, загружающие драйвера (при наличии noems) в верхнюю память с помощью команды Devicehigh. Например:
Devicehigh=C:\Windows\Command\Ansi.sys
При этом загрузка резидентов выполняется в Autoexec.bat командой Loadhigh(Lh). Выполнение подобной работы позволяет освободить CMA-память для загружаемых команд до уровня ~ 600 Кбайт.
Для просмотра памяти можно воспользоваться следующими командами:
Mem/d/p – постраничный просмотр модулей и драйверов всей памяти;
Mem/m:<filename> – вывод подробных сведений об использовании памяти заданным модулем.
При установке на компьютер системы Windows 2000 функция загрузки подсистемы DOS в память HMA, через посредство драйвера Himem.sys, выполняется по умолчанию. Кроме того, драйвер Emm386.exe в этой системе уже не используется, а его функции в файле Config.nt частично выполняет команда Emm. Описание данной команды приведено в виде комментариев в файле Config.nt для Windows 2000.
Рассмотренные выше строчки в Config.nt можно представить в виде:
........
device=%SystemRoot%\system32\himem.sys
Emm=Ram2
Dos=High,Umb
Devicehigh=C:\Windows\Command\Ansi.sys
Вообще система Windows 2000 автоматически оптимизирует использование памяти для подсистемы MS-DOS и её программ. Для резервирования за программой DOS определённых объёмов памяти различных типов щёлкните правой кнопкой на значке исполняемого файла программы и выберите из контекстного меню команду Свойства. В окне свойств откройте вкладку Память (рис. 3).
Рис. 3. Окно свойств с открытой вкладкой Память
В рамке Обычная память задаётся необходимый для работы программы объём памяти в Кбайтах (от 0 до 640 Кб.). В раскрывающемся списке Переменные среды задаётся объём памяти (в байтах) для интерпретатора команд Command.com (проявляет себя только при запуске Windows 9x). Установка флажка Защищённый режим препятствует изменению программой установленной структуры и объёма обычной памяти, что защищает систему от зависания в случае ошибок в программе.
В рамке Отображаемая (EMS) память указывается максимальный объём физической памяти, отображаемой в диапазоне свободных адресов верхней памяти, который может быть выделен программе.
В рамке Дополнительная (XMS)-память можно установить флажок Использовать HMA для загрузки программы в высокую память, однако если в HMA-память загружена DOS (что более необходимо), положение флажка не играет роли.
В рамке Память DPMI для защищённого режима MS-DOS задаётся предельный объём памяти DPMI для защищённого режима DOS, который может быть выделен программе (проявляет себя только при запуске Windows 9x).
Для просмотра памяти можно воспользоваться следующими командами:
mem/d – выводит сведения о загруженных программах и внутренних драйверах, а также вывод других сведений о программах (при необходимости используйте постраничный вывод с помощью команды more, например, mem/d|more);
mem/c – выводит сведения о программах, загруженных в обычную память и в верхнюю область памяти, а также итоговые сведения об использовании памяти.