• Ешқандай Нәтиже Табылған Жоқ

(1)1 Некоммерческое акционерное общество Кафедра информационные системы ПРОГРАММИРОВАНИЕ В АССЕМБЛЕРЕ Конспект лекций для студентов специальности 5В060200 - Информатика Алматы 2015 АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ (2)СОСТАВИТЕЛИ: А.Т

N/A
N/A
Protected

Academic year: 2022

Share "(1)1 Некоммерческое акционерное общество Кафедра информационные системы ПРОГРАММИРОВАНИЕ В АССЕМБЛЕРЕ Конспект лекций для студентов специальности 5В060200 - Информатика Алматы 2015 АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ (2)СОСТАВИТЕЛИ: А.Т"

Copied!
74
0
0

Толық мәтін

(1)

1

Некоммерческое акционерное

общество

Кафедра

информационные системы

ПРОГРАММИРОВАНИЕ В АССЕМБЛЕРЕ Конспект лекций

для студентов специальности 5В060200 - Информатика

Алматы 2015

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

(2)

СОСТАВИТЕЛИ: А.Т. Купарова. Программирование в ассемблере.

Конспект лекций для студентов специальности 5В060200 - Информатика. – Алматы: АУЭС, 2015 –71с.

Настоящий конспект лекций составлен в соответствии с программой курса

«Программирование в ассемблере» для студентов специальности 5В060200 - Информатика.

Ил.6, табл.5

Рецензент: к.п.н., доц. А.М. Саламатина.

Печатается по плану издания некоммерческого акционерного общества

«Алматинский университет энергетики и связи» на 2015 г.

© НАО «Алматинский университет энергетики и связи», 2015 г.

(3)

Содержание

Введение……….……… 3

1 Лекция №1. Архитектура ЭВМ………... 3

2 Лекция №2. Ассемблер как язык программирования и связь его конструкций с архитектурой микропроцессора………... 9 3 Лекция №3. Жизненный цикл программы на ассемблере. Структура программы на ассемблере………..…. 11 4 Лекция №4. Структура и образ памяти программы .EXE и . COM 15 5 Лекция №5. Программно – доступные элементы машины………….. 19

6 Лекция №6. Системные регистры микропроцессора……… 24

7 Лекция №7. Способы задания операндов команды. Команды пересылки данных……… 27 8 Лекция №8. Команды передачи управления……….. 31

9 Лекция №9. Арифметические команды………. 37

10 Лекция №10. Описание группы логических команд………. 40

11 Лекция №11. Команды обработки строк……… 45

12 Лекция №12. Директивы ассемблера………. 48

13 Лекция №13. Организация программ. Макроопределения………….. 53

14 Лекция №14. Программирование в среде MS DOS……… 62

15 Лекция №15. Создание Windows - приложений на ассемблере……. 65

Список литературы………..… 70

(4)

Введение

Машинно-ориентированное программирование появилось одновременно с созданием электронных вычислительных машин. Сначала это были программы в машинных кодах, затем появился язык программирования Assembler (Автокод). Этот стиль программирования предполагает доскональное знание возможностей конкретной архитектуры ЭВМ и операционной системы и используется до сих пор тогда, когда другие стали бессильны, или нужно получить максимальное быстродействие в рамках той или иной операционной системы с использованием архитектуры данной ЭВМ.

Для того чтобы использовать эффективно все возможности компьютера,

применяют символический аналог машинного языка – язык ассемблера.

История развития вычислительной техники неразрывно связана с историей развития системного программного обеспечения. Современные компьютерные системы наряду с прикладным программным обеспечением всегда содержат системное, которое обеспечивает организацию вычислительного процесса.

Целью курса «Программирование в ассемблере» является изучение особенностей организации и функционирования ЭВМ, для грамотного программирования на любом алгоритмическом языке, умения отлаживать реальные задачи и действительно понимать, как работает ЭВМ. Изучение базовых понятий языка ассемблер, архитектуру компьютера на основе процессора Intel, основные аспекты современного программирования на ассемблере, включая системное и прикладное программирование для DOS и Windows.

В настоящих методических указаниях рассматривается язык ассемблер - как символическое представление машинного языка. Все процессы в машине на самом низком, аппаратном уровне приводятся в действие только командами (инструкциями) машинного языка. Отсюда понятно, что язык ассемблера для каждого типа компьютера свой. Это касается и внешнего вида программ, написанных на ассемблере и идей, отражением которых этот язык является.

Лекция №1. Архитектура ЭВМ

Цель лекции: изучение архитектурных особенностей IBM PC.

Содержание лекции: понятие архитектуры ЭВМ; распределение адресного пространства.

Понятие архитектуры ЭВМ

Архитектура ЭВМ - это абстрактное представление ЭВМ, которое отражает ее структурную, схемотехническую и логическую организацию.

Понятие архитектуры ЭВМ является комплексным и включает в себя:

1) Структурную схему ЭВМ.

2) Организацию и разрядность интерфейсов ЭВМ.

3) Набор и доступность регистров.

(5)

4) Организацию и способы адресации памяти.

5) Способы представления и форматы данных ЭВМ.

6) Набор машинных команд ЭВМ.

7) Форматы машинных команд.

8) Обработку нештатных ситуаций (прерываний).

Таким образом, понятие архитектуры включает в себя практически всю необходимую для программиста информацию о компьютере. Все современные ЭВМ обладают некоторыми общими и индивидуальными свойствами архитектуры. Индивидуальные свойства присущи только конкретной модели компьютера и отличает ее от больших и малых собратьев.

Наличие общих архитектурных свойств обусловлено тем, что большинство типов существующих машин принадлежат 4 и 5 поколениям ЭВМ, так называемой, фон-неймановской архитектуры. К числу общих архитектурных свойств и принципов можно отнести:

1) Принцип хранимой программы.

2) Принцип микропрограммирования.

3) Линейное пространство памяти.

4) Последовательное выполнение программ.

5) Безразличие к целевому назначению данных.

Совокупность всех взаимно связанных блоков, образующих функциональное полное работоспособное средство обработки информации с помощью компьютера, называется компьютерной системой. Основные компоненты стандартной компьютерной системы: системный блок, видеомонитор, клавиатура, печатающее устройство, дисководы и различные средства для асинхронной связи и управления игровыми программами. На рис.1 показана схема компьютера на базе микропроцессоров семейства Intel P6, к которым относятся Pentium Pro/II,III. На схеме представлены:

центральный процессор, оперативная память, внешние устройства. Все компоненты соединены между собой через системную шину. Системная шина имеет дополнительную шину - шину расширения. Основу микропроцессора составляют блок микропрограммного управления, исполнительное устройство, регистры. Остальные компоненты микропроцессора выполняют вспомогательные функции. ЭВМ являются преобразователями информации. В них исходные данные задачи преобразуются в результат ее решения. В соответствии с используемой формой представления информации машины делятся на два класса: непрерывного действия - аналоговые и дискретного действия - цифровые. В силу универсальности цифровой формы представления информации цифровые электронные вычислительные машины представляют собой наиболее универсальный тип устройства обработки информации. Основные свойства ЭВМ - автоматизация вычислительного процесса на основе программного управления, огромная скорость выполнения арифметических и логических операций, возможность хранений большого количества различных данных, возможность решения широкого круга математических задач и задач обработки данных. Особое значение ЭВМ

(6)

состоит в том, что впервые с их появлением человек получил орудие для автоматизации процессов обработки информации. Управляющие ЭВМ - предназначены для управления объектом или производственным процессом.

Для связи с объектом их снабжают датчиками. Непрерывные значения сигналов с датчиков преобразуются с помощью аналогово - цифровых преобразователей в цифровые сигналы, которые вводятся в ЭВМ в соответствии с алгоритмом управления. После анализа сигналов формируются управляющие воздействия, которые с помощью цифро - аналоговых преобразователей преобразуются в аналоговые сигналы. Через исполнительные механизмы изменяется состояние объекта.

Универсальные ЭВМ - предназначены для решения большого круга задач, состав которых при разработке ЭВМ не конкретизируется. Пример современных архитектурных линий ЭВМ: персональные ЭВМ (IBM PC и Apple Macintosh - совместимые машины), машины для обработки специфической информации (графические станции Targa, Silicon Graphics), большие ЭВМ (мэйнфреймы IBM, Cray, ЕС ЭВМ). Общее назначение системного ПО - обеспечивать интерфейс между программистом или пользователем и аппаратной частью ЭВМ (операционная система, программы- оболочки) и выполнять вспомогательные функции (программы-утилиты).

Современная операционная система обеспечивает следующее:

1) Управление процессором путем передачи управления программам.

2) Обработка прерываний, синхронизация доступа к ресурсам.

3) Управление памятью.

4) Управление устройствами ввода-вывода.

5) Управление инициализацией программ, межпрограммные связи.

6) Управление данными на долговременных носителях путем поддержки файловой системы.

Архитектура - совокупность технических средств и их конфигураций, с помощью которых реализована ЭВМ. ЭВМ 5 поколения, имеет, как правило, шинную архитектуру, что означает подключение всех устройств к одной электрической магистрали, называемой шиной. Если устройство выставило сигнал на шину, другие могут его считать. Это свойство используется для организации обмена данными. С этой целью шина разделена на 3 адреса - шина адреса, шина данных и шина управляющего сигнала. Все современные ЭВМ также включают устройство, называемое арбитром шины, которое определяет очередность занятия ресурсов шины разными устройствами. В PC распространены шины ISA, EISA, PCI, VLB.

Состав и функции основных блоков вычислительной системы: процессора, оперативной памяти, устройства управления, внешних устройств.

Процессор (ЦП) - устройство, выполняющее вычислительные операции и управляющее работой машины содержит устройство управления и арифметико-логическое устройство. Работа всех электронных устройств машины координируется сигналами, вырабатываемыми ЦП.

(7)

Рисунок 1- Структурная схема персонального компьютера

Регистры микропроцессора

Буфер команд

Кэш команд (L1)

Кэш данных (L1)

Устройство шинного интерфейса

Кэш второго уровня Шина адреса

Шина данных Шина

управления

Оперативна

я память Системный

контроллер

Устройства ввода/вывода Центральный

процессор (Pentium pro/II/III)

Конвейер ррррррррр ррр

Шина адреса/данных

Шина управления Устройство микро- программного управления Блок

микрокоманд

Шина кэша L2 (64) бита

Системная шина

Шина PCI Устройство

выборки/

декодирова ния

Устройство диспетчеризаци и/

исполнения

Блок удаления и восстановления

Выборка Загрузка Сохранение

(8)

Распределение адресного пространства

В зависимости от модификации персонального компьютера и состава его периферийного оборудования распределение адресного пространства может несколько различаться. Тем не менее размещение основных компонентов системы довольно строго унифицировано. Типичная схема использования адресного пространств компьютера приведена в таблице 1.

Значение адресов на этом рисунке, как и повсюду далее в книге, даны в 16- ричной системе счисления. Признаком 16-ричного числа служит буква h, стоящая после числа.

Таблица 1 - Типичное распределение адресного пространства

1 Кбайт

Векторы прерываний

00000h

256 байтов Область данных BIOS

00400h 512 байтов Область данных

DOS

00500h IO.SYS и MS

DOS.SYS Загружаемые

драйверы  Стандартная память

(640Кбайт) COMAND.COM

(резидентная часть)

Свободная память для загружаемых прикладных и системных программ 64 Кбайт Графический

буфер EGIA

A0000h = 32 Кбайт

UMB B0000h

32 Кбайт Текстовой буфер EGIA

B8000h 64 Кбайт ПЗУ -

расширения BIOS

C0000h  Верхняя память (384 Кбайт)

64 Кбайт UMB D0000h

128 Кбайт ПЗУ BIOS E0000h

64 Кбайт

HMA 100000h

Дополнительная память (EMS)

(9)

DOS 15 Мбайт (80286)

До 4 Гбайт (80386/486

XMS 10FFF0h Расширенная память

Первые 640 Кбайт адресного пространства с адресами от 00000h до 9FFFFh отводятся под основную оперативную память, которую еще называют стандартной (conventional). Начальный килобайт оперативной памяти занят векторами прерываний(256 векторов по 4байта). Вслед за векторами прерываний располагается область данных BIOS, которая занимает адреса от 00400h до 004FFh. В этой области хранятся разнообразные данные, используемыми программами BIOS в процессе управлением периферийным оборудованием, так здесь размещаются:

 входной буфер клавиатуры с системой указателей;

 адреса параллельных и последовательных портов;

 данные, характеризующие настройку видео системы (форма курсора и его текущее местоположение на экране, текущий видеорежим, ширина экрана и прочее);

 ячейки для отсчета текущего времени;

 область межзадачных связей и т. д.

Область данных BIOS заполняется информацией в процессе начальной загрузки компьютера и динамически модифицируется системой по мере необходимости; многие прикладные программы обращаются к этой области с целью чтения или модификации содержащейся в ней информации.

В области памяти, начиная с адреса 500h содержится некоторые системные данные DOS. Вслед за областью данных DOS располагаются собственно операционная система, загружаемая из файлов IO. SYS и MSDOS.SYS (IBMBIO.COM и IBMDOS.COM для системы PC-DOS). Система обычно занимает несколько десятков Кбайт.

Перечисленные выше компоненты операционной системе занимают обычно 60-90 Кбайт. Вся оставшаяся память до границы 640 Кбайт ( называемая иногда транзитной областью) свободна для загрузки любых систем или прикладных программ. Оставшиеся 384 Кбайт адресного пространства, называемого верхней (upper) памятью, первоначально были предназначены для размещения постоянных запоминающих устройств (ПЗУ).

Практически под ПЗУ занята только часть адресов. В самом конце адресного пространства, в области F0000h…FFFFFh (или E0000h… FFFFFh) располагается основное постоянное запоминающее устройство BIOS, а начиная с адреса C0000h-так называемое ПЗУ расширений BIOS для обслуживания графических адаптеров и дисков. Часть адресного пространства верхней памяти отводится для адресации к видео буферам графического адаптера. Приведенное на рисунке расположение видео буферов характерно для адаптера EGA; для других адаптеров оно может быть иным,

(10)

(например, видеобуфер простейшего монохромного адаптера MDA занимает всего 4 Кбайт и располагается, начиная с адреса B0000h).

В состав компьютеров PC/AT наряду со стандартной памятью (640Кбайт) может входить расширенная (extended) память, максимальный объем которой зависит от ширины адресной шины процессора при использовании процессора 80386/486 - 4Гбайт. Эта память располагается за пределами первого мегабайта адресного пространства и начиная с адреса 100000h. Поскольку функционирование расширенной памяти подчиняется

"Спецификации расширенной памяти" (Extended Memory Specification, сокращенно XMS), то и саму память часто называют XMS-памятью. Как уже отмечалось выше, доступ к расширенной памяти осуществляется в защищенном режиме, поэтому для MS DOS,работающей только в реальном режиме, расширенная память недоступна. Первые 64Кбайт расширенной памяти, точнее, 64Кбайт- 16 байт с адресами от 100000h до 10FFEFh, носят специальное название область старшей памяти (Higih Memory Area, HMA).

Эта область замечательна тем, что, хотя она находится за пределами первого мегабайта, к ней можно обратиться в реальном режиме работы микропроцессора.

Лекция №2. Ассемблер как язык программирования и связь его конструкций с архитектурой микропроцессора.

Цель лекции: изучение внутренней архитектуры микропроцессора.

Содержание лекции: свойства ЭВМ, сегментная адресация, режимы работы.

ЭВМ являются преобразователями информации. В них исходные данные задачи преобразуются в результат ее решения. В соответствии с используемой формой представления информации машины делятся на два класса: непрерывного действия - аналоговые и дискретного действия - цифровые. В силу универсальности цифровой формы представления информации цифровые электронные вычислительные машины представляют

собой наиболее универсальный тип устройства обработки информации.

Основные свойства ЭВМ - автоматизация вычислительного процесса на основе программного управления, огромная скорость выполнения арифметических и логических операций, возможность хранений большого количества различных данных, возможность решения широкого круга математических задач и задач обработки данных. Особое значение ЭВМ состоит в том, что впервые с их появлением человек получил орудие для автоматизации процессов обработки информации. Управляющие ЭВМ – предназначены для управления объектом или производственным процессом.

Для связи с объектом их снабжают датчиками. Непрерывные значения сигналов с датчиков преобразуются с помощью аналогово - цифровых преобразователей в цифровые сигналы, которые вводятся в ЭВМ в соответствии с алгоритмом управления. После анализа сигналов формируются управляющие воздействия, которые с помощью цифро - аналоговых преобразователей преобразуются в аналоговые сигналы. Через

(11)

исполнительные механизмы изменяется состояние объекта.

Универсальные ЭВМ – предназначены для решения большого круга задач, состав которых при разработке ЭВМ не конкретизируется.

Пример современных архитектурных линий ЭВМ: персональные ЭВМ (IBM PC и Apple Macintosh – совместимые машины), машины для обработки специфической информации (графические станции Targa, Silicon Graphics), большие ЭВМ (мэйнфреймы IBM, Cray, ЕС ЭВМ).

Важнейшей характеристикой любого микропроцессора является разрядность его внутренних регистров, а также внешних шин адресов и данных. Микропроцессор i8086 имеет 16-разрядную внутреннюю архитектуру и такой же разрядности шину данных. Таким образом, максимальное целое число (данное или адрес), с которым может работать микропроцессор, составляет 216-1=65535 (64К-1). Однако адресная шина микропроцессора i8086 содержит 20 линий, что соответствует адресному пространству 220=1 Мбайт. Для того, чтобы с помощью 16-разрядных адресов можно было обращаться в любую точку 20-разрядного адресного пространства, в микропроцессоре предусмотрена сегментная адресация памяти, реализуемая с помощью четырех сегментных регистров.

Суть сегментной адресации заключается в следующем: исполнительный 20–разрядный адрес любой ячейки памяти вычисляется процессором путем сложения начального адреса сегмента памяти, в котором располагается эта ячейка, со смещением к ней (в байтах) от начала сегмента, которое обычно называют относительным адресом Сегментный адрес без четырех младших бит, т. е деленный на 16, хранится в одном из сегментных регистров. При вычислении исполнительного адреса процессор умножает содержимое сегментного регистра на 16 (путем сдвига влево на 4 двоичных разряда) и прибавляет к полученному 20-разрядному адресу относительный адрес.

Умножение базового адреса на 16 увеличивает диапазон адресуемых ячеек до величины 64 Кбайт*16 =1Мбайт

Микропроцессор i80286, используемый как центральный процессор компьютеров IBM PC/AT, является усовершенствованным вариантом i8086, дополненным схемами управления памятью и ее защиты. Микропроцессор i80286 работает с 16-разрядными операндами, но имеет 24-разрядную адресную шину, что соответствует адресному пространству 224=16 Мбайт.

Однако описанный выше способ сегментной адресации памяти не позволяет выйти за пределы 1 Мбайт. Для преодоления этого ограничения в микропроцессоре i80286 (так же, как и в микропроцессоре i80386) используются два режима работы: реального адреса и виртуального защищенного адреса, или просто защищенный режим. В реальном режиме микропроцессор i80286 функционирует фактически также, как микропроцессор i8086 с повышенным быстродействием и может обращаться лишь к 1 Мбайт адресного пространства. Оставшиеся 15 Мбайт памяти, даже если они установлены в компьютере, использоваться не могут.

(12)

В защищенном режиме по-прежнему используются сегменты и смещения в них, однако начальные адреса не вычисляются путем умножения на 16 содержимого сегментных регистров, а извлекаются из таблиц сегментных дескрипторов, индексируемых теми же сегментными регистрами.

Каждый сегментный дескриптор занимает 6 байтов, из которых 3 байта (24 двоичных разряда) отводятся подсегментный адрес. Тем самым обеспечивая полное использование 24-разрядного адресного пространства.

В каждом сегментном регистре под индекс таблицы сегментных дескрипторов отводится 14 двоичных разрядов. Полный логический адрес адресуемой ячейки состоит из 14- разрядного индекса номера сегмента и 16- разрядного относительного адреса. Это позволяет каждой программе использовать до 230=1 Гбайт логического, или виртуального пространства, которое таким образом, в 64 раза превышает максимально возможный объем физической памяти. Операционная система виртуальной памяти хранит все сегменты выполняемых программ в большом дисковом пространстве, автоматически загружая в оперативную память те или иные сегменты по мере необходимости.

Микропроцессоры i80386 и i80486 являются высокопроизводительными процессорами с 32-разрядными шинами данных и адресов и 32-разрядной внутренней архитектурой. Последнее означает, что внутренние регистры этих процессоров, в отличии от процессоров ранних моделей, имеют длину 31- бита. Поэтому максимальное целое число, с которым может работать микропроцессор, составляет 232-1 = 4294967296 (4Гбайт). Во многих случаях использование 32-битовых операндов позволяет существенно упростить и ускорить вычисления. Помимо этого, в микропроцессорах i80386 и i80486 расширен состав регистров, что также предоставляет программисту значительные удобства. Наконец, в новых моделях процессоров имеются встроенные средства поддержки многозадачного режима, а также мультипроцессорных систем. Естественно, что эти процессоры, как и микропроцессор i80286, могут работать в реальном и защищенном режимах. В последнем случае микропроцессор позволяет адресовать до 232=4 Гбайта физической памяти и 246=64 Гбайт виртуальной. При этом следует подчеркнуть, что разработчиками обеспечена полная совместимость новых моделей процессоров со старым, в том смысле, что программы, написанные для процессоров i8086 - i80286, т.е с использованием 16-битовых операндов, выполняются на новых процессорах без всяких исправлений.

Лекция №3. Жизненный цикл программы на ассемблере. Структура программы на ассемблере.

Цель лекции: изучить этапы разработки программы на ассемблере.

Содержание лекции: ввод, трансляция, редактирование и выполнение программы.

(13)

Язык ассемблер относится к классу машинно-ориентированных языков.

Программа на этом языке управляет процессом, уровень абстракции которого соответствует архитектуре ЭВМ, с которой он работает:

- принципом управления процессом обработки информации, формой представления программы и правилами ее исполнения, множеством операций, выполняемых ЭВМ;

- формой представления данных, способами адресации данных в программах;

- организацией обмена информацией между ЭВМ и внешней средой, способами синхронизации процессов управления работой ЭВМ.

При работе с программами на языке ассемблер, необходимо знать процессы ассемблирования, компоновки и выполнения программы.

Ввод исходного текста программы

Для ввода исходного текста программы используется любой стандартный текстовый редактор, при этом исходный модуль должен иметь расширение asm. Например, можно использовать NORTON EDITOR.

Shift+F4

Имя - программы. asm

Программа может набираться строчными или прописными буквами.

Между полями операторов необходимо оставлять хотя бы один пробел. Для удобства чтения листинга программы необходимо записывать метки, команды, операнды и комментарии, выровненными в колонки. Использование комментариев в программе улучшает ее ясность. Комментарий всегда начинается на любой строке исходного модуля с символа «точка с запятой»

(;). Комментарий может занимать всю строку или следовать за командой на той или иной строке.

Трансляция программы

Для ввода исходной программы необходимо проделать два основных шага, прежде чем программу можно будет выполнить. Сначала необходимо ассемблировать программу, а затем выполнить компоновку. Шаг ассемблирования включает в себя трансляцию исходного модуля в машинный объектный код и генерацию OBJ-модуля. На этом шаге формулируется объектный модуль, который включают в себя представление исходной программы в машинных кодах, а также информацию ,необходимую для отладки и компоновки его с другими модулями.

Формат командной строки для запуска TASM.EXE следующий:

TASM.EXE имя исходного файла. asm На экране появится:

(14)

1) source filename (.ASM): c:имя файла [ENTER];

2) object filename (filename.OBJ): c: [ENTER];

3) source listing (NUL.LST): c: [ENTER];

4) cross-reference (NUL.CRF): c: [ENTER].

Файл с расширением LST показывает сгенерированный машинный код и номера строк.Программа с расширением CRF-это файл перекрестных ссылок показывающий, какие команды ссылаются на какие поля данных.

Кроме того, ассемблер генерирует в LST-файле номера строк, которые используются в CRF файле.

Содержание листинга выдается в виде трех столбцов:

1 столбец – четырехзначное шестнадцатеричное значение смещения адреса от начала каждого сегмента;

2 столбец – содержит объектный код каждой команды. Для сегмента стека и данных – это шестнадцатеричные значения соответствующих констан;.

3 столбец – текст исходной программы.

Компоновка программы

Формат OBJ – модуля уже более приближен к исполнительной форме, но еще не готов к выполнению. Шаг компоновки включает преобразование OBJ – модуля в ЕХЕ (исполнимый) модуль.

Формат командной строки для запуска TLINK.EXE TLINK.EXE_имя программы. obj

Запрос компоновщика Ответ

Object Modules (.OBJ) C: имя-программы Run file (имя-прогр.EXE) C:

List file (NUL.MAP): CON Libraries (.LIB) [ENTER]

Файл с расширением MAP содержит таблицу имен и размеров сегментов, а также ошибки, которые обнаружит TLINK.

Выполнение программы

Чтобы запустить программу на выполнение, достаточно вызвать загрузочный модуль:

имя - программы.exe

Синтаксис ассемблера. Предложения, составляющие программу, могут представлять собой синтаксическую конструкцию, соответствующую команде, макрокоманде, директиве или комментарию. Для того, чтобы транслятор ассемблера мог распознавать их, они должны формироваться по

(15)

определенным синтаксическим правилам. Общее описание языка ассемблера.

Типы данных. Оформление программ. Формат записи команд.

Ассемблер - машинно-ориентированный язык, имеющий два основных достоинства:

1) Позволяет писать программы на уровне команд процессора.

2) Не требует знания этих команд, каждая из них заменяется удобной для запоминания мнемоникой - сокращением английских слов. Транслятор переводит мнемоники в их числовые эквиваленты. Элементы языка:

операторы (команды ассемблера + псевдооператоры макроассемблера), операнды, выражения, константы, метки, комментарии. Собственно команды ассемблера процессора - могут быть без операндов, с одним или двумя операндами, использовать различные типы адресации Псевдооператоры - 5 групп: определение идентификаторов (EQU), данных (DB), внешние ссылки (PUBLIC, EXTRN), определение сегментов и подпрограмм (SEGMENT, PROC), управление трансляцией (END).

Константы - могут быть числовые и литералы (последовательность букв, заключенных в апострофы).

Комментарии - начинаются с символа и предназначены для улучшения читаемости программы.

Метки - предназначены для организации переходов в программе. Могут быть локальные и глобальные. Типы данных языка. Целые типы.

BYTE - байт (однобайтовое целое число, код символа, элемент строки).

WORD - слово (целое число со знаком или без знака).

DWORD - двойное слово, длинное целое.

Указатели Полный 32-битовый указатель или 16-битовое смещение.

Вещественные типы (типы мат.сопроцессора) - действительные числа длиной 32, 64, 80 бит. Массивы. В ассемблере возможно объявление массивов чисел.

Перичислимые и составные типы ENUM - набор значений, заним.

определенное кол-во бит.

RECORD - запись с битовыми полями, каждое из которых имеет длину опр. количество бит и инициализируется некоторыми значениями.

STRUC - структура, элемент содержащий 1 или более типов данных, называемых членами структуры.

UNION (объединение) - то же самое, что и структура, за исключением того, что все члены объединеия занимают 1 и тот же участок памяти.

Формат команды языка:

[Метка:] мнемокод [операнд] [;комментарий]

По умолчанию заглавные и строчные буквы в языке не различаются.

Оформление программ:

; Укажем соответствие сегментных регистров сегментам assume CS:code, DS:data

; Опишем сегмент кода

; Откроем сегмент кода

(16)

code segment begin:

; Настроим DS на сегмент данных mov AX, data

mov DS, AX

; Тут вставляется тело вашей программы

; Завершить программу

; Функция DOS завершения программы mov AX, 4C00h

; Вызов прерывания DOS int 21h

code ends

; Опишем сегмент данных

; Откроем сегмент данных data segment

; Тут добавляются данные

; Закроем сегмент данных data ends

; Опишем сегмент стека

; Откроем сегмент стека Stak segment stack

; Отводим под стек 256 байт db 256 dup (?)

; Закроем сегмент стека stak ends

; Конец программы с точкой входа end begin

Константы, метки, условная компиляция. Константы - могут быть числовые (десятичные, двоичные, шестадцатеричные) ten EQU 10, antiten EQU - 10, bitmask EQU 10001001b, video EQU 0A000h, и литералы - символьные, EQU ‘string data'.

Метки - служат для присваивания имени команде языка ассемблера.

Предназначены для организации переходов в программе. Метка может содержать следующие символы:

- буквы от A до Z и a до z;

- цифры от 0 до 9;

- специальные символы ?; точка (.); подчеркивание(_); коммерческое эт (@); знак доллара ($).

Глобальные метки действуют во всей программе. Локальные - только внутри подпрограммы. Директивы условной трансляции предназначены для обозначения блока программного кода, который включается в объектный файл только тогда, когда выполняется заданное условие. Cинтаксис: Ifxxx операторы, помещаемые в файл при выполнении условия ELSE ;операторы, помещаемые в файл, если условие не выполнено ENDIF.

(17)

Лекция №4. Структура и образ памяти программы .EXE и . COM Цель лекции: изучение структуры программы

Содержание лекции: структура типичной программы типа .EXE и . COM, операнды директивы SEGMENT.

Программы, выполняемые под управлением MS-DOS,могут принадлежать к одному из двух типов: .COM и .EXE. В программах типа .EXE код программы, данных и стек занимают отдельные сегменты, а в .COM – один сегмент.

Таким образом, размер программы типа .COM не может превысить 64Кбайт, а размер программы типа EXE практически неограничен, так как в нее может входить любое число сегментов программы и данных.

При загрузке в программы сегменты размещаются в памяти, как показано в таблице 2.1

Образ программы в памяти начинается с префикса программного сегмента (Program Segment Prefics, PSP), образуемого и заполняемого системой.

PSP всегда имеет размер 256 байтов содержит таблицы и поля данных, используемые системой в процессе выполнения программы. Вслед за PSP располагаются сегменты программы. Сегментные регистры автоматически инициализируются следующим образом: ES и DS указывают на начало PSP, CS- на начало сегмента команд, а SS- на начало сегмента стека. В указатель команд IP загружается относительный адрес точки входа в программу (из операнда директивы END), а указатель стека SP- смещение конца сегмента стека. Таким образом после загрузки программы в память адресуемыми оказываются все сегменты, кроме сегмента данных. Инициализация регистра DS в первых строках программы позволяет сделать адресуемым и этот сегмент

Таблица 2.1 - Образ памяти программы . EXE ES,DS--- PSP (256 байтов)

CS--- Сегмент команд IP Сегмент данных

SS Сегмент стека

---SP Структура и образ памяти программы . COM

Программа типа . COM отличается от программы типа .EXE тем, что содержит лишь один сегмент, включающий все компоненты программы: PSP, программный код (т.е оттранслированные в машинные коды программные строки), данные и стек. Структура типичной программы типа . COM на языке ассемблера выглядит следующим образом: (таблица 2.2)

Таблица 2.2

title Программа Типа .COM

text segment 'code'

assume CS: text, DS:tex t

org 100h

(18)

Myproc proc

... ;Текст программы

Myproc Endp

... ;Определения

данных

text Ends

End Myproc

Программа содержит единственный сегмент text, которому присвоен класс 'CODE '. В операторе ASSUME указано, что сегментные регистры CS и DS будут указывать а этот единственный сегмент

Оператор ORG 100h резервирует 256 байтов для PSP. Заполнять PSP будет по- прежнему система, но место под него в начале сегмента должен отвести программист. В программе нет необходимости инициализировать сегментный регистр DS, поскольку его, как и остальные сегментные регистры, инициализирует система. Данные можно разместить после программной процедуры ( как это показано на рисунке), или внутри нее, или даже перед ней. Следует только иметь ввиду, что при загрузке программы типа . COM регистр IP всегда инициализируется числом 100 h, поэтому сразу вслед за оператором ORGI 100h должна стоять первая выполнимая строка программы.

Если данные желательно расположить в начале программы, перед ними следует поместить оператор перехода на реальную точку входа, например JMP Entry.

Образ памяти программы типа .COM показан в таблице 2.3 После загрузки программы все сегментные регистры указывают на начало единственного сегмента, т.е фактически на начало PSP. Указатель стека автоматически инициализируется числом FFFEh. Таким образом, независимо от фактического размера программы ей выделяется 64 Кбайт адресного пространства, всю нижнюю часть которого занимает стек.

Таблица 2.3 - Образ памяти программы . COM CS, DS, ES, SS  PSP (256 байтов)

Программа и данные  IP Стек

 SP = FFFEh

Синтаксическое описание сегмента на ассемблере представляет собой конструкцию, изображенную на рисунке 2. Важно отметить, что функциональное назначение сегмента несколько шире, чем простое разбиение программы на блоки кода, данных и стека. Сегментация является частью более общего механизма, связанного с концепцией модульного программирования. Она предполагает унификацию оформления объектных модулей, создаваемых компилятором, в том числе с разных языков программирования. Это позволяет объединять программы, написанные на

(19)

разных языках. Именно для различных вариантов такого объединения и предназначены операнды в директиве SEGMENT. Рассмотрим их подробнее:

Атрибут выравнивания сегмента ( тип выравнивания ) сообщает компоновщику о том, что нужно обеспечить размещение начало сегмента на заданной границе. Это важно, поскольку при правильном выравнивания доступ к данным процессорах i80x86 выполняется быстрее. Допустимые значения этого атрибута следующие:

 BYTE- уравнивания не выполняется сегмент может начинаться с любого адреса памяти;

 WORD-сегмент начинается по адресу, кратному двум, то есть последний ( младший ) значащий бит физического адреса равен 0 ( выравнивание на границу слова );

 DWORD- сегмент начинается по адресу кратному четырём, то есть два последних ( младших ) значащих бита равны 0 (выравнивание на границу двойного слова ) ;

 PARA-сегмент начинается по адресу кратному 16, то есть последнему шестнадцатеричная цифра адреса должна быть oh ( выравнивание на границе параграфа ) ;

 PAGE- сегмент начинается по адресу кратному 256, то есть две последние шестнадцатеричные цифры должны быть ooh ( выравнивание на границу страницы размерам 256 байт );

 MEMPAGE-- сегмент начинается по адресу кратному 4 Кбайт, то есть три последние цифры должны быть oooh ( адрес следующей страницы

 памяти размером 4 Кбайт)

Рисунок 2 - Синтаксис описания сегмента

Имя сегмента

SEGME NT

Тип выр- авниван ия

Тип комби- нирования

Класс сегмен та

Тип размера сегмента

Директива ассемблера Команда ассемблера

Макрокоманда ассемблера Строка комментария

Имя сегмента

END S

(20)

По умолчанию тип выравнивания имеет значение PARA

Атрибут комбинирования сегментов (комбинаторный тип) сообщает компоновщику, как нужно комбинировать сегменты различных модулей, имеющие одно и то же имя. По умолчанию атрибут комбинирования принимать значение PRIVATE. Значениями атрибута комбинирования сегмента могут быть:

 PRIVATE-сегмент не будет объединяться с другими сегментами с тем же именем вне данного модуля;

 PUBLIC- заставлять компоновщик соединить все сегменты с одинаковым именем. Новый объединенной сегмент будет целым и непрерывным. Все адреса ( смещения ) объектов, а это могут быть в зависимости от типа сегмента, команды или данные, будут вычисляться относительно начала этого нового сегмента;

 COMMON- располагает все сегменты с одним и тем же именем по одному адресу. Все сегменты с данным именем будут перекрываться и совместно использовать память. Размер полученного в результате сегмента будет равен размеру самого большого сегмента;

 STACK- определение сегмента стека. Заставляет компоновщик соединить все одноименные сегменты и вычислять адреса в этих сегментах относительно регистра ss. Комбинированный тип STACK

( стек ) аналогичен комбинированному типу PUBLIC, за исключением того, что регистр ss является стандартным сегментным регистром для сегментов стека. Если не указана ни одного сегмента сетка, компоновщик выдаст предупреждение, что стековый сегмент не найден. Если сегмент стека создан , а комбинированный тип STACK не используется программист должен явно загрузить в регистр ss адрес сегмента ( подобно тому, как это делается для регистра ds ).

Атрибут класса сегмента ( тип класса )-это заключенная в кавычки строка, помогающая компоновщику определить соответствующий порядок следования сегментов при сборке программы из сегментов нескольких модулей . Компоновщик объединяет вместе в памяти все сегменты с одним и тем же именем класса ( имя класса, в общем случае, может быть любым, но лучше, если оно будет отражать функциональное назначение сегмента ).

Типичным примером использования имени класса является объединение в группу всех сегментов кода программы (обычно для этого используется класс

<< code>> ). С помощью механизма типизации класса можно группировать также сегменты инициализированных и неинициализированных данных.

5 Лекция №5. Программно доступные элементы машины Цель лекции: изучение регистров IBM PC XT

Содержание лекции: регистры общего назначения, сегментные регистры.

В программах на языке ассемблера регистры используются очень интенсивно. Большинство из них имеет определенное функциональное

Ақпарат көздері

СӘЙКЕС КЕЛЕТІН ҚҰЖАТТАР

 быть стандартизированной и унифицированной системой для эффективного осуществления целенаправленного управления информационными процессами. На сегодняшний

Для создания потоков на Application Definition нужно нажать правую кнопку мыши и выбрать графу Edit Attributes (рисунок 3.8), примерно созданы

1) Тонкий клиент – это компьютер–клиент, который переносит все задачи по обработке информации на сервер. Примером тонкого клиента может служить компьютер

В настоящее время широко используют унифицированные графические ядра, применяемые более чем в одной САПР (ядра Parasolid фирмы EDS Unigraphics и

Рисунок 14.1 – Схема функционирования системы программирования Особым образом написанные программы могут быть преобразованы в абсолютный

Через ОС на входы нейронов поступают сигналы расчетной ошибки и для каждого нейрона сети корректируются значения весовых коэффициентов.. Для наблюдения

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

Опасности, связанные с изменениями климата, существуют на самом деле и уже проявляются во многих природных системах и секторах экономики, включая