Правительство Российской Федерации Федеральное государственное автономное образовательное учреждение высшего профессионального образования "Национальный исследовательский университет "Высшая школа экономики" Московский институт электроники и математики Национального исследовательского университета "Высшая школа экономики" Факультет прикладной математики и кибернетики Программа дисциплины Языки Ассемблера для специальности 090102 «Компьютерная безопасность» подготовки специалиста Автор программы: Лавренов С.М., к.т.н., доцент Одобрена на заседании кафедры Кибернетика Зав. кафедрой Афанасьев В.Н. «___»____________ 20 г Рекомендована секцией УМС Председатель «___»____________ 20 г Утверждена УС факультета Ученый секретарь «___»_____________20 г. Москва – 2012 г. 2 1. Цели и задачи дисциплины. Дисциплина "Языки Ассемблера" имеет целью обучить студентов программированию на языке Ассемблера. Задачи дисциплины — дать основы: принципов организации ЭВМ; системы команд ЭВМ; языка Ассемблера; 2. Требования к уровню освоения содержания дисциплины. В результате изучения дисциплины студенты должны: иметь представление о принципах организации вычислительных систем; знать: систему команд центрального процессора; иерархию памяти; принципы взаимодействия с внешними устройствами; уметь: программировать на языке Ассемблера; осуществлять вставки на языке Ассемблера в программы, написанные на языке Си; иметь навыки: разработки программ на языке Ассемблера; использования отладчиков. 3. Объем дисциплины и виды учебной работы (часы). Вид учебной работы Общая трудоемкость дисциплины Аудиторные занятия Лекции (Л) Практические занятия (ПЗ) Семинары (С) Лабораторные работы (ЛР) И (или) другие виды аудиторных занятий Самостоятельная работа Курсовой проект (работа) Расчетно-графические работы Реферат И (или) другие виды самостоятельной работы Вид итогового контроля (зачет, экзамен) Семестры 6 7 250 114 85 34 51 51 34 17 65 51 34 2 к/р, 2 д/з экзамен 2 к/р, 1 д/з экзамен Всего часов 3 4. Содержание дисциплины. 4.1. Разделы дисциплины и виды занятий № Раздел дисциплины п/п 1 Кодирование информации 2 Основы архитектуры семейства 80x86 3 Команды ЦП: пересылки, арифметические, перехода. Кодирование команд 4 Стек, подпрограммы, программные прерывания 5 Средства языков Ассемблера 6 Команды ЦП: битовые, строковые 7 Модульное программирование 8 Работа с внешними устройствами 9 Развитие семейства 80x86 Аудиторные занятия Лекции ПЗ ЛР * * * * * * * * * * * * * * * 4.2. Содержание разделов дисциплины Р а з д е л 1. Кодирование информации (4 часа) Структура ячейки памяти: биты, байты, слова. Системы счисления: двоичная, 16-ричная. Целые числа: знаковые и беззнаковые. Диапазоны целых. Сложение и вычитание целых. Примеры программ на языке Си для изучения эффекта переполнения. Кодирование символов. Код ASCII. Расширения кода ASCII: кодировка IBM, альтернативная кодировка ГОСТа, UNICODE. Р а з д е л 2. Основы архитектуры семейства 80x86 (6 часов) Общие сведения о семействе процессоров 80x86. Общая шина. Память: ОЗУ и ПЗУ. Кэшпамять. Адресное пространство. Сегмент и смещение, параграф. Нормализованный адрес. Распределение памяти персональной ЭВМ: обычная память, видеобуфер, ROM BIOS, дополнительная (expanded) и расширенная (extended) память, область верхней памяти (UMA – upper memory area). Команды отладчика debug для просмотра ячеек памяти. Сегментные регистры. Структура центрального процессора: исполнительный блок и шинный интерфейс. Конвейеризация. Очередь команд. Регистры центрального процессора: HLрегистры, PI-регистры, счетчик команд, регистр флагов. Назначение битов регистра флагов. Работа с отладчиком debug: запуск отладчика, пример сеанса работы с отладчиком, команды отладчика, сгруппированные по функциональному признаку. Р а з д е л 3. Команды ЦП: пересылки, арифметические, перехода. Кодирование команд (10 часов) Методы адресации: регистровый и непосредственный. Структура описания команд. Команды пересылки. Арифметические команды: сложение, вычитание. Длинные целые. Операнды различной длины. Арифметические команды: умножение, деление. Десятичная арифметика. Условные переходы. Команды безусловных переходов. Индексная адресация. Команды организации циклов. Косвенная адресация. Команды косвенного перехода. Кодирование команд: однооперандные команды, непосредственный операнд, двухоперандные команды. Префикс замены сегмента. Команды загрузки исполнительного адреса. 4 Р а з д е л 4. Стек, подпрограммы, программные прерывания. (8 часов) Стек. Команды работы со стеком. Использование стека для организации вложенных циклов. Стековый кадр. Подпрограммы. Передача параметров: через стек и через регистры. Возвращение результата через флаг CF. Команды изменения флага CF. Вложенные подпрограммы. Использование Turbo Debugger для отладки программ. Прерывания: их классификация. Команды запрета и разрешения внешних прерываний. Программные прерывания. Векторы прерываний. Команды прерываний. Пример программы обработки прерывания: определение размера доступной памяти. Однобайтная команда INT и ее применение при трассировке программ. Структура программного обеспечения IBM PC. Таблица векторов прерываний. Прерывания BIOS (примеры). Прерывания DOS (примеры). Трассировка подпрограмм и прерываний в отладчиках. Прерывание INTO. Операции с сегментными регистрами. Организация прерывания посредством дальнего косвенного вызова. Реализация прерываний в Си. Р а з д е л 5. Средства языков Ассемблера (6 часов) Язык Ассемблера. Определение данных. Пример программы на языке Ассемблера. Этапы создания программы: ассемблирование, компоновка, выполнение. Листинг. Сообщения TASM. Различия в диагностике ошибок TASM и MASM. Карта памяти. Подпрограммы. Макросы. Вложенные макросы. Условное ассемблирование. Локальные метки. Блоки повторений. Включаемые файлы. Использование кода завершения в командных файлах. Директивы определения идентификаторов. Командный файл для ассемблирования, компоновки и отладки программ, содержащихся в одном файле. Р а з д е л 6. Команды ЦП: битовые, строковые (6 часов) Битовые команды: булевские, линейные и циклические сдвиги. Битовые операции на этапе ассемблирования. Локальный счетчик адреса. Строковые команды: пересылка строк. Флаг направления. Префикс повторения. Команды сравнения. Команды загрузки адресов. Пример применения битовых и строковых команд: заполнение экрана в текстовом режиме. Команда табличного преобразования. Р а з д е л 7. Модульное программирование. (8 часов) Директивы связи. Сегментные директивы. Директива ASSUME. Параметры директивы SEGMENT. Сегментные группы. Взаимоотношение упрощенных и стандартных сегментных директив. Модели памяти. Исполняемые файлы в COM-формате. Отладка COM-программ. Встроенный ассемблерный код (inline). Стыковка модулей, написанных на языках Си и Ассемблера. Передача параметров в Си. Примеры программ для разных моделей памяти. Директивы, упрощающие стыковку модулей. Р а з д е л 8. Работа с внешними устройствами. (10 часов) Контроллеры. Порты. Команды работы с портами. Пример: получение звука. Режимы работы контроллеров: синхронный, асинхронный, по прерываниям. Пример работы в режиме опроса флага: программирование параллельного адаптера (принтер). Программируемый контроллер прерываний. Таймер. Клавиатура. Примеры резидентных программ. 5 Р а з д е л 9. Развитие семейства 80x86 (10 часов) Форматы данных для плавающих чисел. Регистры сопроцессора. Примеры программ с использованием сопроцессора. Особые значения. 32-разрядная архитектура. Регистры. Новые методы адресации. Пример программы использованием возможностей 32-разрядной платформы. Защищенный режим. Страничная организация памяти. MMX-технология. Новые типы данных. Обзор команд. Пример программы. 4.3 Понедельный план проведения занятий: лекционных и практических. Неделя 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Вид занятий лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция лекция Тема Системы счисления. Целые числа. Сложение. Кодирование символов. Семейство микропроцессоров 80x86. Общая шина. Типы памяти. Распределение памяти. Центральный процессор. Регистры. Методы адресации. Команды пересылки. Арифметические команды. Условные и безусловные переходы. Организация циклов. Кодирование команд Стек. Стековый кадр. Подпрограммы. Передача параметров. Прерывания. Программные прерывания. Прерывания в BIOS и DOS. Язык Ассемблера. Определение данных. Ассемблирование, компоновка, выполнение. Макросредства. Битовые операции. Битовые операции на этапе ассемблирования. Строковые операции. Директивы связи. Сегментные директивы. com-файлы. Ассемблер и Си. Контроллеры. Порты Асинхронный режим. Принтер. Программируемый контроллер прерываний. Таймер. Клавиатура. Резидентные программы. Плавающие числа. Программирование сопроцессора 32-разрядная архитектура. Защищенный режим. MMX-технология. Контрольные точки 1-я к/р 2-я к/р 3-я к/р 1-е д/з 4-я к/р 2-е д/з 3-е д/з 6 5. Лабораторный практикум. № № раздела Наименование лабораторных работ п/п дисциплины 1 3 Написание и отладка с использованием отладчика debug.exe программы вычисления рациональной функции с исходными данными различной длины. 2 3 Написание и отладка с использованием отладчика debug.exe программы изменения строки из трех цифр в соответствии с заданием, предусматривающим использование условных и безусловных переходов. 3 3 Написание и отладка с использованием отладчика Turbo Debugger программы обработки массивов байтов и слов 4 5,6 Написание программы на языке Ассемблера с использованием макросредств Turbo Assembler. Задание предусматривает битовые операции над массивом байтов и слов. 5 6,7 Написание главной программы на языке Си и подпрограммы на языке Ассемблера. Обязательно использование строковых операций. 6. Учебно-методическое обеспечение дисциплины. 6.1. Рекомендуемая литература а) основная литература: 1. Ирвин К. Язык Ассемблера для процессоров Intel. — М.: Издательский дом "Вильямс", 2002. — 616 с. 2. Лавренов С.М. Решение задач на языке Ассемблера. — М.: Изд.МГИЭМ, 2000. — 96 с. 3. Пильщиков В.Н. Программирование на языке ассемблера IBM PC. — М.: "ДИАЛОГМИФИ", 1994. — 288 с. 4. Юров В. Assembler. — СПб: "Питер", 2000 — 624 с. 5. Юров В. Assembler: специальный справочник. — СПб: "Питер", 2000 — 496 с. б) дополнительная литература: 1. Рудаков П.И., Финогенов К.Г. Программируем на языке Ассемблера IBM PC. — Обнинск: Изд-во "Принтер", 1999. — 495 с. 2. Таненбаум Э. Архитектура компьютера. — СПб.: Питер, 2003. — 704 с. 6.2. Средства обеспечения дисциплины. Программное обеспечение: Turbo Assembler, MASM, Visual C++. 7. Материально-техническое обеспечение дисциплины. Класс ПЭВМ на базе процессора Intel (не ниже Pentium MMX). 8. Методические рекомендации по организации изучения дисциплины. Тематика контрольных работ. 1. Перевод числа, представленного в десятичной системе счисления, в 16-ричную и двоичную системы. 2. Интерпретация содержимого байта как символа в коде ASCII, а также как знакового и как беззнакового чисел. 3. Дешифровка кодов команд. 4. Битовые операции на этапе ассемблирования. Тематика домашних заданий 1. Использование средств адресации 386 процессора. 7 2. Написание программы в формате .com. 3. Ассемблерные вставки (inline) в программе на языке Си. Рабочая программа составлена в соответствии с Государственным образовательным стандартом высшего профессионального образования по специальности 090102 «Компьютерная безопасность».