Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_Lab_1.doc
Скачиваний:
3
Добавлен:
18.08.2019
Размер:
361.47 Кб
Скачать

32

О десский национальный морской университет

Кафедра информационных технологий

А. Д. Бодарев,

СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ

И ОПЕРАЦИОННЫЕ СИСТЕМЫ

(НАЧАЛА АССЕМБЛЕРА)

Методические указания и задания

к лабораторным работам

для студентов стационара,

обучающихся по специальностям

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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]