- •1.1.1. Кодирование символов
- •2. Системный отладчик Debug
- •2.1. Адресация памяти
- •2.2. Работа в отладчике
- •Лабораторная работа № 1
- •3. Основы программирования
- •3.1. Процесс программирования
- •3.1.1. Этапы создания программы
- •3.1.2. Компиляция программы. Опции командной строки
- •3.2. Cинтаксис ассемблерной программы
- •3.3. Простейшая программа
- •3.4. Скелет (каркас) программы
- •3.4.1. Модуль EXE
- •3.4.2. Модуль COM
- •3.5. Образ программы в памяти
- •3.5.1. Модуль EXE
- •3.5.2. Модуль COM
- •3.6. Работа с отладчиком Turbo Debugger (TD)
- •Лабораторная работа №1
- •4. Операторы и директивы
- •4.1. "Препроцессорные" директивы INCLUDE и EQU
- •4.2. Директивы описания и инициализации переменных DB, DW и DD
- •4.2.1. Директива DB (Define Byte - определить байт)
- •4.2.2. Директивы DW и DD (Define Word и Define Double Word)
- •4.3. Операторы Assembler
- •4.3.1. Операторы обработки данных
- •4.3.2. Операторы передачи управления
- •4.4. Вспомогательные псевдооператоры
- •4.5. Работа с макрооператорами
- •Лабораторная работа № 2
- •4.6. Приложение к лабораторной работе № 2. Адресация
- •4.6.1. Форматы машинных команд и их кодирование
- •4.6.2. 16-битный режим адресации операндов в памяти
- •5. Сервисные функции DOS
- •5.1.1. Ввод с клавиатуры символьной информации
- •5.1.2. Системные функции DOS ввода данных с клавиатуры
- •5.1.3. Команды работы со строками
- •5.1.4. Системные функции DOS вывода данных
- •Лабораторная работа №3
- •Лабораторная работа №4
- •6. Функции BIOS для работы с экраном и клавиатурой
- •6.1. Прямое программирование видеобуфера в текстовом режиме
- •6.2. Прерывание 10h. Видеофункции BIOS
- •6.3. Прерывания 16h, 1Ah, 15h
- •6.3.1. Прерывание 16h
- •6.3.2. Прерывание 1Ah
- •6.3.3. Прерывание 15h
- •Лабораторная работа №5
- •Заключение
- •Рекомендуемая литература
- •Использованная литература
3.4. Скелет (каркас) программы
Программы, выполненные под управлением DOS (сеанс MS-DOS для Windows), могут принадлежать к одному из двух типов, которым соответствуют расширения имён программных файлов .com и .exe. Основное различие этих программ заключается в том, что программы типа .com состоят из единственного сегмента объёмом в 64 Кбайт, в котором размещаются программный код, данные и стек, а в программах типа .exe для каждого из них выделяются отдельные сегменты. Управление сегментами – один из наиболее сложных аспектов программирования на языке ассемблера. При этом ассемблер имеет не один, а целых два набора директив управления сегментами. Первый набор, включающий упрощенные директивы определения сегментов, позволяет достаточно просто ими управлять и идеально подходит для компоновки ассемблерных модулей с языками высокого уровня (Pascal и С). Второй набор, включающий стандартные директивы определения сегментов, предназначен для построения сложных ассемблерных программ. В данном лабораторном практикуме, как правило, применяются упрощенные директивы, введение которых возможно лишь с одновременным указанием используемой модели памяти. В свою очередь, модель памяти неявно задаёт атрибуты упрощенных директив, определяющих действия компоновщика Turbo Linker при формировании исполнительного файла программы.
3.4.1. Модуль EXE
Для программы на языке Assembler, как и для программ многих другихязыков программирования, имеется так называемый каркас программы — т.е. часть, которая присутствует во всех программах. Для режима IDEAL, который мы будем использовать, каркас выглядит следующим образом:
1IDEAL
2 |
MODEL |
small |
3 |
STACK |
256 |
4DATASEG
5CODESEG
6 |
Start: |
mov |
ax,@data |
7 |
Exit: |
mov |
ds,ax |
8 |
mov |
ax,4C00h |
|
9 |
END |
int |
21h |
10 |
Start |
|
Таким образом, используя данный скелет, можно съэкономить время при подготовке новых программ.
3.4.2. Модуль COM
Для программ типа COM:
1IDEAL
2 MODEL Tiny
3DATASEG
4CODESEG
5 |
Org |
100h |
|
6 |
Proc |
main |
ax,4C00h |
7 |
Exit: |
mov |
|
8 |
Endp |
int |
21h |
9 |
main |
|
|
10 |
End |
main |
|
Из отличий от программы EXE можно выделить следующие:
40