
- •В.А. Афанасьев
- •Часть 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. Контрольные вопросы
- •Список использованной и рекомендуемой Литературы
- •Оглавление
9.2.6. Ассемблирование и компоновка отдельных модулей в программу. Создание библиотеки объектных модулей
Выше, в параграфе п. 9.2.5 нами была рассмотрена структура программных модулей, допускающих независимое ассемблирование с помощью команды tasm в том же формате, который первоначально был рассмотрен в первой лабораторной работе. Например, пускай имеется главный модуль main.asm и два вспомогательных x.asm и y.asm. Производим последовательное ассемблирование (порядок произвольный):
tasm main.asm
tasm x.asm
tasm y.asm
Если в вашем рабочем каталоге находятся только эти модули с расширеним .asm, то ассемблирование можно произвести одной командой tasm *.asm. Следующим шагом на пути получения единого исполняемого файла программы является сборка полученных объектных модулей с помощью команды компоновщика tlink. Если мы хотим, чтобы имя исполняемого файла совпадало с именем главного модуля (типовой случай), то он должен быть первым в списке объектных модулей (разделяются пробелами или знаком плюс):
Tlink main.obj x.obj y.obj
Для определения другого имени программы, например, calculator – имя добавляется в конце после запятой:
Tlink main.obj x.obj y.obj ,calculator
Перейдём теперь к вопросу создания библиотеки объектных модулей. Если Вы в процессе разработки ассемблерных программ создали несколько хороших процедур, которые могут использоваться в других ваших программах, то данные процедуры (однородные по своему функциональному назначению) можно скомпоновать в ассемблерные модули, допускающие независимое ассемблирование. Полученный таким образом объектный модуль может быть с помощью утилиты tlib (Turbo Library) загружен в библиотеку объектных модулей (БОМ). БОМ – это дисковый файл с расширением .lib, содержащий объектные модули, прошедшие стадию ассемблирования и включающие процедуры, часто используемые при создании новых программ. Чтобы воспользоваться процедурой, входящей в состав БОМ, надо вызвать её из вашей программы командой Call, предварительно определив её в качестве внешней процедуры директивой Extrn. В процессе компоновки tlink самостоятельно просмотрит БОМ и подсоединит к программе объектный код того модуля, в котором содержится соответствующая процедура. Библиотекарь можно вызвать, набрав команду tlib в командной строке. Общая форма вызова следующая:
TLIB 4.00 Copyright (c) 1987, 1996 Borland International
Syntax: TLIB libname [/C] [/E] [/P] commands, listfile
Libname Имя создаваемой или существующей библиотеки (полный путь)
/C Устанавливает чувствительность к регистру в именах
/E Создаёт расширенный словарь библиотечных имён. Помещается в
конце файла библиотеки и служит для облегчения поиска компонов-
щиком нужной процедуры
/Psize Устанавливает размер библиотечной страницы
Commands Последовательность операторов (опций) для исполнения
+ Добавить имя модуля в библиотеку
– Удалить имя модуля из библиотеки
* Извлечь имя модуля без удаления
–+ или +– Заменить имя модуля в библиотеке
–* или *– Извлечь имя модуля и удалить
listfile Имя для файла листинга
Рассмотрим примеры работы с библиотекарем Turbo Library
Создание библиотеки mylib.lib из двух модулей x.obj и y.obj:
Tlib/E mylib +x.obj +y.obj
Создание библиотеки mylib.lib и получение листинга. Листинг – это алфавитный список модулей вместе с общими переменными (процедурами), которые в них объявлены:
Tlib/E mylib +x.obj +y.obj, mylib.lst
Получение листинга mylib.lst существующей библиотеки mylib.lib:
Tlib mylib, mylib.lst
Замена модуля x.obj на новую копию и удаление из библиотеки модуля y.obj: Tlib mylib –+x.obj –y.obj
В случае, если модули x.obj и y.obj и есть те самые вспомогательные модули программы, главный модуль которой является main.obj, то исполняемый файл с именем main можно создать командой (обратите внимание на три запятые после имени главного модуля):
Tlink main.obj ,,, mylib.lib
В общем случае в команде формирования исполняемого файла указываются все необходимые объектные модули, которые не вошли в библиотеку. Если программа использует несколько библиотек, то они записываются через пробелы:
Tlink main.obj ,,, mylib1.lib mylib2.lib