
- •Лабораторная работа №1
- •Знакомство с Assembler
- •Регистры процессора i8086
- •Представление данных
- •Представление команд
- •Метка: Мнемокод Операнды Комментарий
- •Адресация памяти
- •Запуск программы
- •Структура программы
- •Последовательность создания исполняемого файла
- •Отладка программы
- •Практические задания
- •Вопросы к защите
Лабораторная работа №1
Знакомство с Assembler
Язык ассемблера − тип языка программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком. Язык ассемблера незаменим при оптимизации критических блоков в прикладных программах с целью повышения их быстродействия. Например, многие фрагменты исходных кодов Delphi написаны именно на языке ассемблер, что и определяет их быстродействие. Часто для краткости его называют просто ассемблером, что, строго говоря, не верно (так как ассемблер − это программа-компилятор для языка ассемблера).
Каждая модель процессора имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.
Достоинства языка ассемблера − минимальное количество избыточного кода (то есть использование меньшего количества команд и обращений в память), низкоуровневый доступ к компьютеру, максимальная гибкость и максимальный доступ к ресурсам компьютера и ОС.
Недостатки языка ассемблера − большие объёмы кода и большое число дополнительных мелких задач, повышенный риск совершения ошибок, непереносимость на другие платформы, отсутствие библиотечных подпрограмм.
Применение языка ассемблера. Поскольку большие программы на ассемблере писать крайне неудобно, их пишут на языках высокого уровня. На ассемблере же пишут небольшие фрагменты или модули, для которых критически важны: быстродействие (драйверы); размер кода (загрузочные сектора, программное обеспечение для микроконтроллеров и процессоров с ограниченными ресурсами, вирусы, программные защиты); специальные возможности: работа напрямую с аппаратурой или машинным кодом, то есть загрузчики операционных систем, драйверы, вирусы, системы защиты.
Ассемблер (от англ. assembler − рабочий-сборщик) − компьютерная программа, компилятор исходного текста программы написанной на языке ассемблера, в программу на машинном коде.
Как и сам язык, ассемблеры специфичны конкретной архитектуре, операционной системе и варианту синтаксиса языка. Вместе с тем существуют, мультиплатформенные ассемблеры, которые могут работать на разных платформах и операционных системах.
Для операционной системы DOS наиболее известные ассемблеры − Borland Turbo Assembler (TASM), Microsoft Macro Assembler (MASM), и Watcom Assembler (WASM).
В состав операционной системы GNU входит компилятор gcc, включающий в себя ассемблер gas (GNU Assembler).
Под различные операционные системы имеет свои версии (открытый проект) ассемблер NASM (Netwide Assembler).
Регистры процессора i8086
Среди устройств и узлов, входящих в состав компьютера, наиболее важными для выполнения любой программы катаются оперативная память и процессор. В оперативной памяти хранится выполняемая программа вместе с принадлежащими ей данными; процессор выполняет вычисления и другие действия, описанные в программе.
Регистры процессора − это сверхбыстрая память внутри процессора, предназначенная для хранения промежуточных результатов вычисления или содержащая данные, необходимые для работы процессора. Доступ к значениям, хранящимся в регистрах в несколько раз быстрее, чем доступ к ячейкам оперативной памяти.
Ниже будут рассмотрены регистры процессора i8086. Несмотря на то, что в современных процессорах регистров значительно больше, представленных сведений будет вполне достаточно для выполнения заданий.
Регистры процессора i8086 делятся на пять групп:
1. регистры общего назначения (РОН) могут использоваться по усмотрению пользователя; разделяются на младшую и старшую половины:
2. регистры указатели и индексные регистры:
3. сегментные регистры:
4. регистр командного указателя:
5. регистр состояния флагов содержит результаты выполнения различных команд и операций (флаги будут рассмотрены по ходу изложения):
Итак, регистры процессора i8086 являются 16-битовыми. При этом регистры общего назначения делятся на половинки по 8 бит каждая.
Современные процессоры имеют 32- или 64-разрядные регистры, но обязательно включают регистры процессора i8086.