- •О десский национальный морской университет
- •7.080401 "Информационные управляющие системы и технологии",
- •7.080402 "Информационные технологии проектирования"
- •Введение
- •Лабораторная работа №1 структура ехе-программы на ассемблере. Подготовка к выполнению Теоретические сведения
- •Задание
- •Лабораторная работа №2 использование служебных подпрограмм. Циклы. Формирование и вывод на экран строки ascii- символов Теоретические сведения
- •Inc al ; увеличиваем al (код символа) на 1
- •Задание
- •Лабораторная работа №3 управление курсором при выводе. Вложенные циклы. Формирование и вывод на экран таблицы символов ascii Теоретические сведения
- •Задание
- •Лабораторная работа №4 посимвольный ввод с клавиатуры. Анализ нажатия функциональных клавиш и комбинаций Теоретические сведения
- •Задание
- •Лабораторная работа №5 ввод с клавиатуры и обработка символьных строк (пароль) Теоретические сведения
- •Задание
- •Лабораторная работа №6 процедуры. Табличная трансляция. Перевод двоичных данных в символьную форму Теоретические сведения
- •Задание
- •Лабораторная работа №7 работа с файлами Теоретические сведения
- •Задание
О десский национальный морской университет
Кафедра информационных технологий
А. Д. Бодарев,
СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ
И ОПЕРАЦИОННЫЕ СИСТЕМЫ
(НАЧАЛА АССЕМБЛЕРА)
Методические указания и задания
к лабораторным работам
для студентов стационара,
обучающихся по специальностям
7.080401 "Информационные управляющие системы и технологии",
7.080402 "Информационные технологии проектирования"
2-й курс, 2-й семестр
Одесса 2010
ПРЕДИСЛОВИЕ
Цель выполнения заданий по данным лабораторным работам — закрепление теоретических знаний курса практическими примерами и приобретение навыков программирования на языке ассемблера.
В каждой работе рассматривается одно из средств системного программирования на ассемблере для IBM PC и с помощью него решается какая-либо практическая задача. В качестве инструмента для выполнения работ используется пакет TASM фирмы Borland, примеры приводятся в соответствии с режимом компиляции MASM данного пакета.
Данный курс во многом основывается на дисциплине "Архитектура ЭВМ", который, впрочем, не входит в программу указанных специальностей. Ниже во введении среди прочих приводятся общие сведения из этой дисциплины, знание которых весьма желательно.
Выполнение каждой лабораторной работы включает в себя следующие этапы: ознакомление с кратким теоретическим материалом; выбор варианта задания; продумывание путей его решения; воплощение алгоритма посредством блок-схемы или программы на псевдоязыке; построение ключевых фрагментов ассемблерной программы на черновике; полная реализация программы на рабочем месте, включая комментирование, настройку и отладку; оформление протокола, содержащего задание и текст программы; защита протокола в указанный срок.
Введение
Системное программирование, как правило, осуществляется на языке низкого уровня. Одним из языков низкого уровня является язык ассемблера (ассемблер). В его основе лежит непосредственное использование команд центрального процессора для создания программ. Кроме того, структура программы и процедура подготовки ее к выполнению приближены к архитектурным особенностям операционной системы и, таким образом, реализуют низкий уровень доступа к ресурсам. В результате системный программист получает наиболее полный контроль над процессами, происходящими как при подготовке программы к выполнению, так и при ее выполнении.
Команды процессора соответствуют отдельным мнемоническим инструкциям языка ассемблера. Большинство из них ориентировано на обработку двоичных данных, хранящихся в регистрах внутри процессора или в ячейках основной памяти. В соответствии с характером обработки выделяют группы команд: пересылки, арифметические, логические, сдвига, передачи управления и другие. Типы обрабатываемых данных чаще связываются с размерами двоичных ячеек, отводимых для их хранения, и реже — с их смысловым значением (числа, символы, адреса, команды). Ассемблер на уровне инструкций определения данных поддерживает типы "байт", "слово" (2 байта), "двойное слово" (4 байта) и другие. При программировании в реальном режиме процессора (соответствующем процессору 8086) основным типом является 16-битное слово.
Регистры процессора — его внутренние двухбайтовые ячейки — используются в основном для кратковременного хранения обрабатываемых данных небольшого размера. Использование регистров при обработке данных предпочтительно в связи с быстрым к ним доступом. Обращение к регистрам осуществляется по именам. Наиболее свободный доступ обеспечивается к регистрам общего назначения: AX, BX, CX, DX, SI, DI, SP и BP.
Для продолжительного размещения массивов данных и команд программы служит основная (оперативная) память, представляющая собой совокупность байтовых ячеек. Обращение к ячейкам памяти производится по уникальным номерам ячеек — адресам. Язык ассемблера позволяет присваивать адресам данных и команд имена. Современные реализации ассемблеров (в том числе TASM) позволяют именовать также участки исходного теста программы и потому являются макроассемблерами.
При обращении к памяти используются сегменты — участки памяти с относительной 16-битной адресацией. Полный адрес ячейки определяется в виде пары 16-битных адресов: сегментного адреса, определяющего положение сегмента в памяти, и относительного адреса, определяющего положение ячейки внутри сегмента. Сегментные адреса содержатся в сегментных регистрах CS, DS, ES и SS и указывают соответственно на сегменты команд, данных, дополнительных данных и стека. Относительные адреса указываются в соответствии с режимами адресации памяти. В случае прямой адресации относительный адрес указывается в виде константы, помещаемой в код машинной команды. В случае косвенной адресации относительный адрес определяется с помощью одного или двух регистров общего назначения (в 8086 — только BX, BP, SI или DI). Полные адреса записываются в виде адресных пар "сегментный регистр:относительный адрес". В большинстве случаев сегментный регистр не указывается, подразумеваясь по умолчанию.
Кроме регистров общего назначения и сегментных процессор 8086 имеет два специальных регистра: флагов (Flags) и указатель команд (IP). Указатель команд всегда содержит относительный адрес команды (в сегменте команд), подлежащей выполнению. Флаги представляют собой отдельные биты, которые могут быть установлены (= 1) или сброшены (= 0), индицируя тем самым определенное состояние результата некоторого действия (флаги CF, AF, OF, ZF, PF, SF) или задавая режим работы процессора (флаги DF, IF, TF).