Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Машинно-ориентированное программирование

Покупка
Основная коллекция
Артикул: 695800.01.99
Доступ онлайн
116 ₽
В корзину
Настоящее учебное пособие посвящено изучению основных принципов применения языка программирования Ассемблер. Большое количество наглядных примеров позволит освоить ос-новные принципы составления программ на языке Ассемблер. А комплекс лабораторных работ по изучению основных приемов использования языка Ассемблер будет способствовать закреп-лению изученного материала. Учебное пособие по курсу "Ма-шинно-ориентированное программирование" рассчитано на сту-дентов, магистрантов и аспирантов направлений 10.03.01 «Ин-формационная безопасность», 10.05.02 «Информационная без-опасность телекоммуникационных систем», 10.05.03 «Инфор-мационная безопасность автоматизированных систем». Изучен-ный материал позволит самостоятельно применять полученные знания на практике.
Абрамов, Е. С. Машинно-ориентированное программирование: Учебное пособие / Абрамов Е.С., Сидоров И.Д. - Таганрог:Южный федеральный университет, 2016. - 87 с.: ISBN 978-5-9275-2065-7. - Текст : электронный. - URL: https://znanium.com/catalog/product/991870 (дата обращения: 24.07.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Е.С. Абрамов,   И.Д. Сидоров

МАШИННО-ОРИЕНТИРОВАННОЕ 

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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ 

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ

АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ 

ВЫСШЕГО ОБРАЗОВАНИЯ

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

ИНЖЕНЕРНО-ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ

Е.С. Абрамов,   И.Д. Сидоров

МАШИННО-ОРИЕНТИРОВАННОЕ 

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

Учебное пособие

Таганрог

Издательство Южного федерального университета

2016

УДК  004.431.4(075.8)
ББК 32.973Я73

А161

Печатается по решению редакционно-издательского совета

Южного федерального университета

Рецензенты:

главный научный сотрудник ГНИИИ ПТЗИ ФСТЭК, доктор 

технических наук Ю. К. Язов;

директор ООО «GigitalPro», кандидат технических наук

М. Н. Казарин.

Абрамов, Е.С., Сидоров, И.Д.

Машинно-ориентированное 
программирование
: 

учебное пособие / Е.С. Абрамов, И.Д. Сидоров ; Южный 
федеральный университет. – Таганрог : Издательство
Южного федерального университета, 2016. – 87 с.

ISBN 978-5-9275-2065-7

Настоящее учебное пособие посвящено изучению основных 

принципов применения языка программирования Ассемблер. 
Большое количество наглядных примеров позволит освоить основные принципы составления программ на языке Ассемблер. А 
комплекс лабораторных работ по изучению основных приемов 
использования языка Ассемблер будет способствовать закреплению изученного материала. Учебное пособие по курсу "Машинно-ориентированное программирование" рассчитано на студентов, магистрантов и аспирантов направлений 10.03.01 «Информационная безопасность», 10.05.02 «Информационная безопасность телекоммуникационных систем», 10.05.03 «Информационная безопасность автоматизированных систем». Изученный материал позволит самостоятельно применять полученные 
знания на практике.

ISBN 978-5-9275-2065-7
УДК 004.431.4(075.8)

ББК 32.973Я73

© ЮФУ, 2016
© Абрамов Е.С., Сидоров И.Д., 2016

А161

Содержание

Введение..................................................................................................... 4

1. Устройство микропроцессора i386....................................................... 5

1.1. Основные сведения о микропроцессоре i386................................... 5

1.2. Виды адресации .................................................................................. 7

2. Защищённый режим микропроцессоров i386 ................................... 12

2.1. Общие сведения о защищенном режиме ........................................ 12

2.2. Дескриптор........................................................................................ 13

2.3. Таблицы дескрипторов..................................................................... 16

2.4. Селектор ............................................................................................ 17

2.5. Преобразование логического адреса в линейный.......................... 18

2.6. Сегментный регистр ......................................................................... 20

2.6. Страничная адресация...................................................................... 21

2.7. Каталоги и таблицы страниц ........................................................... 23

2.8 Линейная адресная трансляция (4 кб страницы) ............................ 24

2.9. Линейная адресная трансляция (4 мб страницы)........................... 24

2.10. Элементы каталогов и таблиц страниц......................................... 26

3. Механизмы защиты ............................................................................. 30

Лабораторная работа № 1 ....................................................................... 36

Лабораторная работа № 2 ....................................................................... 43

Лабораторная работа № 3 ....................................................................... 46

Лабораторная работа № 4 ....................................................................... 52

Лабораторная работа № 5 ....................................................................... 56

Лабораторная работа № 6 ....................................................................... 60

Лабораторная работа № 7 ....................................................................... 66

Лабораторная работа № 8 ....................................................................... 73

Введение

Данное учебное пособие предназначено для теоретической 

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

В учебном пособии приведен комплекс лабораторных ра
бот, направленных на изучение студентами различных аспектов 
программирования на языке ассемблера, таких как: работа с 
арифметическими и логическими командами, командами передачи управления.

Учебное пособие  ориентировано на студентов, магистран
тов и аспирантов Института компьютерных технологий и информационной безопасности Южного федерального университета, обучающихся по направлениям 10.03.01 «Информационная 
безопасность», 10.05.02 «Информационная безопасность телекоммуникационных систем», 10.05.03 «Информационная безопасность автоматизированных систем». Изученный материал
позволит самостоятельно применять полученные знания на 
практике.

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

1. УСТРОЙСТВО МИКРОПРОЦЕССОРА I386
1.1. Основные сведения о микропроцессоре i386
В ходе изучения данного курса мы будем работать с Ассем
блером процессора Intel 386, а также процессоров, совместимых 
с ним. Выбор 32-разрядного процессора обусловлен тем, что 16разрядные процессоры на сегодняшний день сильно устарели, а 
для 64-разрядных нет бесплатных инструментов разработчика, 
удобных для работы студентов. Программная архитектура процессора Intel 386 представлена на рис. 1.

Рис.1. Программная архитектура процессора Intel 386

С точки зрения программиста на Ассемблере, центральный 

процессор представляет собой устройство, интерпретирующее и 
выполняющее поток команд, а также ячейки памяти, называемые регистрами. Микропроцессор Intel 386 имеет в своем составе:

 регистры общего назначения (EAX, EBX, ECX, EDX) 

– предназначены для хранения операндов и промежуточных результатов выполняемых операций;

 регистры-указатели стека (ESP, EBP) и индексные ре
гистры (ESI, EDI) – используются для хранения базовых адресов и индексов при реализации некоторых способов адресации 
сложных структур данных;

 указатель команд (EIP);
 регистр признаков (EFLAGS) – содержит признаки ре
зультата выполненной операции и флаги управления.

Название регистров зависит от их назначения:
EAX/AX/AH/AL (accumulator register) – аккумулятор, ис
пользуется для обмена информацией с внешними устройствами;

EBX/BX/BH/BL (base register) – регистр базы, используется 

для косвенной адресации;

ECX/CX/CH/CL (counter register) – счётчик, используется в 

командах организации циклов;

EDX/DX/DH/DL (data register) – регистр данных, использу
ется для расширения целых чисел в командах умножения и деления;

ESI/SI (source index register) – индекс источника, использу
ется для косвенной адресации и в строковых (цепочечных) командах;

EDI/DI (destination index register) – индекс приёмника (по
лучателя), используется для косвенной адресации и в строковых 
(цепочечных) командах;

ESP/SP (stack pointer register) – регистр указателя стека, ука
зывает на первый заполненный байт в стеке;

EBP/BP (base pointer register) – регистр указателя базы кадра 

стека, используется для организации кадра стека в процедурах/функциях на языках высокого уровня.

Также модель процессора включает в себя сегментные ре
гистры – CS,SS,DD,ES,FS,GS. Они не используются при выполнении лабораторных работ, так как за их заполнение отвечает 
операционная система Windows или Linux.

Показанные на рис. 1 регистры EIP (указатель на текущую 

выполняемую команду) и EFLAGS (флаги) не могут быть непо
средственно использованы в командах ассемблера. Доступ к 
ним возможен косвенным образом.

1.2. Виды адресации
Все имеющиеся способы адресации можно условно разде
лить на три группы: регистровая, непосредственная и с указанием адреса в памяти. При этом адрес в памяти можно задавать поразному: прямым указанием символического обозначения ячейки памяти, указанием регистра, в котором хранится требуемый 
адрес, или и того и другого. Таким образом, третья группа 
включает, в сущности, целый ряд способов адресации. Они 
обычно носят названия: прямая, базовая, индексная, базовоиндексная, а также базовая, индексная или базово-индексная со 
смещением [6].

Регистровая адресация
Операнд (байт или слово) находится в регистре. Способ 

применим ко всем программно-адресуемым регистрам процессора [6]. 

Примеры:
push DS; Сохранение DS в стеке
mov BP,SP; Пересылка содержимого SP в ВР

Непосредственная адресация
Операнд (байт или слово) может быть представлен в виде 

числа, адреса, кода ASCII, а также иметь символьное обозначение. 

Примеры:
mov AX, 4C00h; Операнд – 16-ричное число
mov DX, offset mas; Смещение массива mas заносится в DX
mov DL,'!'; Операнд – код ASCII символа '!'
num=9; Число 9 получает обозначение num
mov CX, num; Число, обозначенное тип, загружается в СХ

Прямая адресация памяти

В команде указывается символическое обозначение ячейки 

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

Пример:
movDL, meml; Содержимое байта памяти с символиче
ским именем meml пересылается в DL

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

Пример:
mov AX, 0; Настроим сегментный регистр ES на
mov ES,AX; самое начало памяти (адрес 0)
mov 
AX,ES:[0];
АХ=содержимое
слова 
с 
адресом 

0000h:0000h

mov 
DX,ES:[2];
ОХ=содержимое 
слова 
с 
адресом 

0000h:0002h

Заметим, что в этом случае сегментный регистр надо ука
зывать обязательно. Все остальные способы адресации относятся к группе косвенной адресации памяти.

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

обозначение которого заключается в квадратные скобки. При 
использовании регистров ВХ или ВР адресацию называют базовой, при использовании регистров SI или DI – индексной. При 
адресации через регистры ВХ, SI или DI в качестве сегментного 
регистра подразумевается DS; при адресации через ВР – регистр 
SS. Таким образом, косвенная адресация через регистр ВР предназначена для работы со стеком. Однако при необходимости
можно явно указать требуемый сегментный регистр. Еще раз 
отметим, что во всех базовых и индексных способах адресации 
операндом является содержимое ячейки памяти, адрес которой 
находится в том или ином регистре или вычисляется сложением 
содержимого двух регистров [6].

Примеры:

mov AL, [ВХ]; Сегментный адрес предполагается в DS, 

смещение в ВХ

mov DL,ES:[ВХ]; Сегментный адрес в ES, смещение в ВХ
mov DX,[ВР]; Сегментный адрес в SS, смещение в ВР
mov AL, [DI]; Сегментный адрес в DS, смещение в DI

Базовая и индексная адресации памяти со смещением
Относительный адрес операнда определяется суммой со
держимого регистра (ВХ, ВР, SI или DI) и указанного в команде 
числа, которое называют смещением [6].

Пример:
mas db 1,2,5,3,7,9,8,3,4;Массив символов
mov BX,2;ВХ=индекс элемента в массиве
mov DL,mas[BX];В DL заносится третий элемент массива
В этом примере относительный адрес адресуемого элемента 

массива mas вычисляется как сумма содержимого ВХ (т.е. содержимое ВХ равно 2) и значения символического обозначения 
mas, которое совпадает с относительным адресом начала массива mas. В результате в регистр DL будет загружен элемент массива mas с индексом 2, т.е. число 5. Предполагается, что базовый адрес сегмента, в который входит массив mas, загружен в 
DS. Такой же результат даст такая последовательность команд
[6]:

mov BX, offset mas; ВХ=относительный адрес ячейки mas 
mov DL, 2[BX]
Здесь относительный адрес адресуемого элемента массива 

mas вычисляется как сумма содержимого регистра ВХ и дополнительного смещения, задаваемого константой 2. Последняя 
команда может быть записана в следующем виде [6]:

mov DL, [BX+2]
mov DL, [ВХ]+2
Адресация с помощью регистров SI и DI осуществляется 

аналогично. При использовании регистра ВР следует помнить, 
что в качестве сегментного регистра по умолчанию подразумевается регистр SS [6].

Базово-индексная адресация памяти

Доступ онлайн
116 ₽
В корзину