МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

«Харківський політехнічний інститут»

 

В. О. Кравець, О. М. Рисований

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

Асемблер під Win32 АРІ

 

Навчальний посібник для студентів спеціальностей «Системне програмування» і «Комп'ютерні системи та мережі» вищих навчальних закладів

 

Харків НТУ «ХПІ» 2008

ББК 32.973-018.1

          К78

УДК 004.42

Рецензенти:

/. О. Фурман, д-р техн. наук, проф., академік АН Вищої школи України, Ха­рківський національний технічний університет сільського господарства;

Г. Ф. Кривуля, д-р техн. наук, проф., Харківський державний технічний університет радіоелектроніки;

Г. І. Загарій, д-р техн. наук, проф., Українська державна академія залізничного транспорту

Кравець, В. О.

К78     Системне програмування. Асемблер під Win32 АРІ [Текст] : навч. посібник / В. О. Кравець, О. М. Рисований. - Харків : НТУ «ХПІ», 2008.-512 с

 

Розглянуто широке коло питань, починаючи з основ програмування на асемб­лері з використанням базової системи команд та закінчуючи використанням су­часних технологій обробки даних, таких, як ММХ, SSE, SSE2, SSE3. Теоретичний матеріал підкріплено багатою кількістю прикладів проірамного коду від самих коротких програм до програм середньої складності. Всі програми протестовані за допомогою налагоджувана OllyDbg.

Призначено для студентів спеціальностей: 7.091501 «Комп'ютерні системи та мережі», 7.091502 «Системне програмування», 7.091503 «Спеціалізовані комп'ю­терні системи». Також може бути корисним для спеціалістів.

 

ISBN 978-966-593-665-7

 

ЗМІСТ

ВСТУП

1. АРХІТЕКТУРНІ ОСОБЛИВОСТІ 32-РОЗРЯДНОГО  МП INTEL

1.1.Типи даних МП PENTIUM

1.2.Регістри МП PENTIUM

1.3.Організація пам'яті МП PENTIUM

1.4.Способи адресації МП Intel

2. ЕТАПИ СТВОРЕННЯ ПРОГРАМИ НА МОВІ АСЕМБЛЕРУ

2.1.Підготовка тексту програми

2.2.Асемблювання програми

2.3.Компонування програми

2.4.Налагодження програми

3.  ДИРЕКТИВИ І ОПЕРАНДИ АСЕМБЛЕРУ

3.1. Директиви асемблеру

3.1.1.Директиви MODEL, DATA, CONST, STACK, CODE

3.1.2.Директиви SEGMENT та ENDS

3.1.3.Директиви PROC та ENDP

3.1.4.Директива ASSUME

3.1.5.Директива ORG

3.1.6.Директиви визначення даних DB, DW, DD, DF, DP, DQ, DT

3.1.7.Директиви символьних констант: = , EQU, TEXTEQU

3.1.8.Директива END

3.1.9.Директива LABEL

3.2.Оператори мови асемблеру

3.3.Лабораторна робота "Подання даних"

4. ОПЕРАЦІЇ ПЕРЕСИЛАННЯ ДАНИХ

4.1.Команди пересилання даних загального призначення

4.2.Організація роботи зі стеком

4.3.Команди пересилання, що працюють з акумулятором

4.4.Команди пересилання бітів умов

5. АРИФМЕТИЧНІ ТА ЛОГІЧНІ ОПЕРАЦІЇ

5.1.Арифметичні операції

5.2.Логічні операції

5.3.Лабораторна робота "Програмування арифметичних виразів"

6. ОРГАНІЗАЦІЯ РОЗГАЛУЖЕНЬ В ПРОГРАМАХ

6.1.Команди обробки бітів та байтів

6.2.Команди передачі керування

7. ПРОЦЕДУРИ

7.1.Організація процедур та їх дослідження

7.2.Windows API-подібні процедури

7.3.Непрямий виклик процедур

7.4.Використання загальних змінних у процедурах

7.5.Лабораторна робота "Передача параметрів через таблицю адресів"

7.6.Лабораторна робота "API-подібні процедури "

7.7.Лабораторна робота "Зовнішні процедури"

8. ОРГАНІЗАЦІЯ ВВЕДЕННЯ - ВИВЕДЕННЯ В WIN32

8.1.Загальні відомості

8.2.Набір символів і функції Windows API

8.3.Типи даних Windows

8.4.Дескриптори консолі

8.5.Функції консолі Win32

8.6.Виведення повідомлень

8.7.Виведення чисел

8.8.Введення з консолі

8.9.Лабораторна робота "Масиви"

9. РЯДКИ

9.1.Обробка рядків

9.2.Лабораторна робота "Рядки"

10. ЛОГІЧНІ СТРУКТУРИ ВИСОКОГО РІВНЯ

10.1.Директива IF

10.2.Логічні структури   REPEAT та .WHILE

10.3.Лабораторна робота "Директиви умовного асемблювання"

10.4.Лабораторна робота "Двовимірні масиви"

11.  МАКРОВИЗНАЧЕННЯ

11.1.Введення в макровизначення

11.2.Булеві вирази

11.3.Оператори в макровизначеннях

11.4.Оператор заміни

11.5.Оператор виразу

11.6.Оператор виділення тексту

11.7.Оператор виділення символу

11.8.Додаткові макровизначення і директиви

11.9.Лабораторна робота "Макроси"

12. ФАЙЛИ

12.1.Створення файлів

12.2.Лабораторна робота "Файли"

13. СТРУКТУРИ

13.1.Організація структур

13.2.Лабораторна робота "Структури"

14. ДИНАМІЧНІ БІБЛІОТЕКИ

14.1.Створення динамічних бібліотек та їх використання

14.2.Угорська нотація

14.3.Лабораторна робота "Dll-файли"

15. СПІВПРОЦЕСОР ТА ЙОГО ВИКОРИСТАННЯ

15.1.Типи даних співпроцесора

15.2.Архітектура співпроцесора

15.3.Система команд математичного співпроцесора

15.3.1.Команди передачі даних

15.3.2.Команди порівняння

15.3.3.Арифметичні команди

15.3.4.Трансцендентні команди

15.3.5.Команди маніпуляції константами

15.3.6.Команди керування

15.4. Лабораторна робота "Обробка даних у співпроцесорі"

16. ММХ-РОЗШИРЕННЯ

16.1.ММХ-команди передачі даних

16.2.Арифметичні ММХ-команди

16.2.1.Команди додавання

16.2.2.Команди віднімання

16.2.3.Команди множення

16.3.ММХ-команди пакування та розпакування даних

16.4.ММХ-команди порівняння

16.5.Логічні ММХ-команди

16.6.Команди зсуву

16.7.ММХ-команди в Pentium III

16.8.ММХ-команди в Pentium IV

16.9.Лабораторна робота "ММХ-команди"

17. SSE-РОЗШИРЕННЯ

17.1.Команди пересилання даних

17.2.Арифметичні команди

17.2.1.Команди додавання

17.2.2.Команди віднімання

17.2.3.Команди паралельного і скалярного множення

17.2.4.Команди паралельного і скалярного ділення

17.2.5.Додаткові арифметичні команди

17.3.Команди порівняння

17.4.Команди перетворення

17.5.Логічні команди

17.6.Команди керування станом

17.7.Команди розпаковування даних

17.8.Команди керування кешуванням

17.9.Лабораторна робота "SSE-команди"

18. SSE2-P03LUHPEHHfl

18.1. Команди передавання даних

18.1.1.Обмін 128-bit кодами між оперативною пам'яттю (ОЗП) та регістрами xmm

18.1.2.Обмін 64-розрядними кодами між ОЗП і регістрами xmm

18.1.3.Використання масок

18.2. Арифметичні операції

18.2.1.Паралельні операції з упакованими числами

18.2.2.Арифметичні операції зі скалярними числами

18.3. Команди порівняння

18.3.1.Порівняння без зміни стану розрядів EFLAGS

18.3.2.Команди порівняння, які змінюють регістр EFLAGS

18.4.Логічні операції

18.5.Команди розпаковування і розподілення даних .

18.6.Команди перетворення форматів даних

18.6.1.Групові перетворення форматів даних

18.6.2.Перетворення формату одного числа

18.7.Керуванням кешем

18.8.Операції з цілими числами. Нові можливості інструкцій ММХ

18.9.Лабораторна робота "88Е2-команди"

19. SSE3-P03IIIMPEHHfl

19.1.Перетворення чисел з плаваючою крапкою (х87) в цілі числа

19.2.Дублювання даних

19.3.Завантаження не вирівняних змінних

19.4.Одночасне додавання/віднімання

19.5.Горизонтальне додавання/віднімання

19.6.Синхронізація потоків

19.7.Використання SSE3 в розробці і оптимізації програм

19.7.1.Розрахункові завдання, що використовують х87 FPU

19.7.2.Обчислення з комплексними числами

19.7.3.Кодування відео

19.7.4.Векторні операції

20. ОСНОВИ СТВОРЕННЯ ВІКНА ОС WINDOWS

20.1.Створення вікна

20.2.Обробка повідомлень

20.3.Перемалювання вікна

20.4.Меню

20.5.Управління кольором

ДОДАТКИ

Додаток 1. Система базових команд МП платформи х86

Додаток 2. API-функції, які часто використовуються

ЛІТЕРАТУРА