- •НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ 2014 “Харківськийі політехнічнийі і іінститут”
- •1. Програмна структура МП платформи х86
- •Розмір регістрів та їх позначення зведено в табл. 1.4.
- ••CF (Cany Flag) – прапорець переносу (позики) старшого біта в арифметичних операціях.
- •Вплив команд на прапорці
- •2.. Способи адресаціїії 32-розрядного МП Intell
- •7. Масштабована індексна адресація
- •3. Директиви визначення даних
- •4. Виконання арифметичних та логічних операцій
- •; masm 32: ml.exe /c /coff 1_1L.asm
- •к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
- •Множення з урахуванням знака
- •Команди ділення
- •.DATA
- •Вывод результата через функцию MessageBox
- •5. Програмна структура МП платформи X64
- •Наприклад 8b – молодший байт регістра R8 (за аналогією до AL), а R8w
- •RAX - регистр аккумулятор; RBX - базовый регистр; RCX - The count register;
- •Угода щодо викликів на платформі x86-64 схожа на угоду fastcall, що існує в
- •Лістинг 2.4. 64-бітове застосування «Hello, world» під Windows на MASM’е в середовищі Visual
- •6.Настройка середовища Visual Studio 2013
- •З'явилося вікно Win32. У цьому вікні в правій її частині вибираємо значення «Диспетчер
- •4. У меню головного вікна вибрати ПРОЕКТ/ Свойства/ Компоновщик/ Дополнительно.
- •6.У новому вікні вибираємо ім'я програми, наприклад myAsm.asm та визначаємося з директорією її
- •Лекція закінчена
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ 2014 “Харківськийі політехнічнийі і іінститут”
Кафедра “Обчислювальна технікаі та програмування”
Лектор: к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович
RYSOV@rambler.ru
Лекция №1
Вопросы лекции:
1.Програмна структура МП платформи х86
2.Способи адресації 32-розрядного МП Intel
3.Директиви визначення даних
4.Виконання арифметичних та логічних операцій
5.Програмна структура МП платформи X64
6.Настройка середовища Visual Studio 2013
Література:
Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Комп’ютерна інженерія” вищих
1
навчальних закладів. Видання четверте: виправлено та доповнено – Х.: “Слово”, 2014. – 992 с.
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
1. Програмна структура МП платформи х86
Програмна структура МП платформи х86 – пристрої та вузли, до яких програміст має доступ (пам'ять, регістри).
|
|
|
|
|
|
|
РГ сегментів |
|
31 |
16 |
15 |
0 |
|
|
15 |
0 |
|
|
|
АН |
AX AL |
EAX |
Регістри |
|
CS |
Сегмент коду |
|
|
BН |
BX BL |
EBX |
загального |
|
SS |
Сегмент стека |
|
|
CН |
CX CL |
ECX |
призначення |
|
DS |
Сегменти |
|
|
DН |
DX DL |
EDX |
|
|
ES |
|
|
|
|
SI |
ESI |
Індексні Рг |
|
FS |
даних |
|
|
|
|
|
||||
|
|
|
DI |
EDI |
|
GS |
|
|
|
|
|
Вказівник бази |
|
||||
|
|
|
BP |
EBP |
|
|
||
|
|
|
SP |
ESP |
Вказівник стека |
|
|
|
|
|
|
31 |
16 15 |
0 |
|
|
|
|
|
|
|
|
IP |
|
EIP – вказівник інструкцій |
|
|
|
|
|
|
FLAGS |
|
EFLAGS – Рг прапорців |
Рис. 1.2. Загальні Рг 32-розрядного МП
32-розрядні МП платформи х86 мають регістри:
•регістри загального призначення;
•вказівник інструкцій;
•регістр прапорців;
•регістри сегментів;
•системні адресні регістри;
•керуючі регістри;
•регістри налагодження;
•регістри тестування;
•модельно-специфічні (залежні від конкретної моделі МП) регістри.
ММХ -регістри XMM -регістри
2
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
Розмір регістрів та їх позначення зведено в табл. 1.4.
Таблиця 1.4 |
|
|
|
|
|
|
|
|
|
Тип |
Біти |
|
|
|
|
Регістри |
|
|
|
General |
8 |
al |
cl |
dl |
bl |
ah |
ch |
dh |
bh |
|
16 |
ax |
cx |
dx |
bx |
sp |
bp |
si |
di |
|
32 |
eax |
ecx |
edx |
ebx |
esp |
ebp |
esi |
edi |
Segment |
16 |
es |
cs |
ss |
ds |
fs |
gs |
|
|
Control |
32 |
cr0 |
|
cr2 |
cr3 |
cr4 |
|
|
|
Debug |
32 |
dr0 |
dr1 |
dr2 |
dr3 |
|
|
dr6 |
dr7 |
FPU |
80 |
st0 |
st1 |
st2 |
st3 |
st4 |
st5 |
st6 |
st7 |
MMX |
64 |
mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 |
|||||||
SSE |
128 |
хmm0 хmm1 хmm2 хmm3 хmm4 хmm5 хmm6 хmm7 |
3
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
•CF (Cany Flag) – прапорець переносу (позики) старшого біта в арифметичних операціях.
•PF (Parity Flag) – прапорець паритету. Встановлюється при парному числі одиниць результату.
•AF (Auxiliary Flag) – прапорець додаткового переносу (позики) у тетраді для десяткової арифметики.
•ZF (Zero Flag) – прапорець нульового результату.
•SF (Sign Flag) – прапорець знака. Вказує на одиничне значення старшого біта результату — ознаку від’ємного числа.
•DF (Direction Flag) – прапорець керування напрямком у рядкових операціях. Програмно змінюється інструкціями CLD і STD.
4
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
Вплив команд на прапорці
Примітка. "+" – результат операції впливає на прапорець; "–" – не впливає; 1 – встановлює в "1"; 0 – встановлює в "0"; Г – інвертує; ? – не визначений.
5
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
2.. Способи адресаціїії 32-розрядного МП Intell
Спосіб або метод визначення в команді адреси операнда або адреси переходу називається режимом адресації або просто адресацією.
1. Безпосередня адресація.
MOV EAX, 12345678h ; завантаження в ЕАХ const = 1234567816.
2.Регістрова адресація. MOV EAX, ECX
3.Пряма адресація.
MOV EAX, mem1 ; завантаження в ЕAX змінної з іменем mem1
4.Непряма регістрова адресація. MOV EAX, [EBX] ; завантаження в ЕАХ змінної з пам’яті,
;адреса якої знаходиться в регістрі ЕВХ
5. Базова адресація.
lea EBX, meml ; завантаження в ЕВХ адреси пам’яті,
|
; де знаходиться змінна meml |
mov EАХ, [EВХ] ; завантаження в ЕАХ змінної з пам’яті, |
|
6. Індексна адресація. |
; адреса якої знаходиться в регістрі ЕВХ |
|
|
MOV ЕDX, [ЕDI] |
; завантаження в ЕDX змінної з пам’яті, |
; адреса якої знаходиться в регістрі ЕDI
В 32-розрядних МП декілька розмиті
Починаючи з моделі 80386 і вище, МП Intel дозволяють додатково використовувати ЕАХ, ЕВХ, ЕСХ, |
|
EDX, EBP, ESP, ESI і EDI, так само, як і для звичайної непрямої адресації. |
6 |
(к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru )
7. Масштабована індексна адресація
MOV ECX, [EDI*4 + EAX] ; завантаження в ЕCX змінної
;з пам’яті, адреса якої знаходиться як застосування значень
;регістра ЕАХ та перемноження значення регістра EDI на чотири
8.Базово-індексна адресація
MOV EAX, [ЕBX]ALPHA[ЕSI] ; завантаження в ЕAX змінної
;з пам’яті з ім’ям ALPHA, адреса якої знаходиться як застосування
;значень двох регістрів: ЕBX та ESI
9. Масштабована базово-індексна адресація
MOV ECX, [EBX + 4*ESI] ; завантаження в ЕСХ змінної
;з пам’яті, адреса якої знаходиться як застосування значень
;регістра ЕВХ та перемноження значення регістра ESI на чотири
10. Базово-індексна адресація зі зміщенням
MOV EAX, [EBX + ESI + 00ABCDF] ; завантаження в ЕAХ
;змінної з пам’яті, адреса якої знаходиться як застосування
;значень регістрів ЕBX, ESI та константи ABCDF
11.Масштабована базово-індексна адресація зі зміщенням
MOV ECX, [EBX + 36] + [8*ESI] |
7 |
7 |
|
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
|
Структура програми під Win32 може бути такою: |
TITLE <ім’я програми |
|
.386 |
; директива визначення типу мікропроцесора |
.model flat |
; завдання лінійної моделі пам’яті |
.data |
; директива визначення даних |
; дані, які визначені |
|
.data? |
; неініціалізовані дані |
.code |
; директива початку коду програми |
label: |
; мітка початку програми |
<code> ;;; основана частина програми |
|
|
||
ret |
; повернення керування ОС |
|
|
|
end |
label ; закінчення програми .386 |
|
; директива визначення типу мікропроцесора |
|
|
.MODEL flat ; завдання лінійної моделі пам’яті |
|||
|
.DATA |
|
; директива початку сегмента даних |
|
|
X DW 5 ; резервування в пам’яті 2-х байтів для змінної Х |
|||
|
Y |
DW 3 ; резервування в пам’яті 2-х байтів для змінної Y |
||
|
Z |
DW ? ; резервування в пам’яті 2-х байтів для змінної Z |
||
|
.CODE |
; директива початку сегмента команд |
||
|
_start: |
; мітка початку основного тіла програми |
||
|
MOV AX,X |
; завантаження операнда Х |
||
|
ADD AX,Y |
; додавання операндів Х та Y |
||
|
MOV Z,AX |
; збереження результату у пам’яті у комірці з ім’ям Z |
||
|
RET |
|
; вихід із ОС Windows |
|
|
END _start |
; закінчення програми з іменем _start |
-- Чем отличается программист от политика? |
8 |
. |
- |
|
- Программисту платят деньги за работающие программы.
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
3. Директиви визначення даних
Тип |
|
Значення |
|
BYTE |
8-розрядне ціле число без знака |
||
SBYTE |
8-розрядне ціле число зі знаком |
||
WORD |
16-розрядне ціле число без знака |
||
SWORD |
16-розрядне ціле число зі знаком |
||
DWORD |
32-розрядне ціле число без знака |
||
SDWORD |
32-розрядне ціле число зі знаком |
||
FWORD |
48-розрядне |
ціле |
число |
|
(використовується як вказівник) |
||
QWORD |
64-розрядне ціле число |
|
|
TBYTE |
80-розрядне ціле число |
|
|
REAL4 |
32-розрядне коротке дійсне число |
||
REAL8 |
64-розрядне дійсне число |
|
|
REAL10 |
80-розрядне розширене дійсне |
||
|
число |
|
|
db1 DB 5 ; запис у 8-розрядну комірку пам’яті з ім’ям db1 числа 5 db2 DB ‘ABCD’ ; запис у пам’ять з ім’ям db2 8-розрядних літер
db3 DB ?; резервування в пам’яті з ім’ям db3 даних, які не визначені dw1 DW 1234 ; запис у 16-розрядну комірку пам’яті з ім’ям dw1 числа 1234
dw2 DW 5*6; запис у 16-розрядну комірку пам’яті з ім’ям dw2 числа 30 dw4 DW array
dd1 DD 2.7 ; число займає 4 байти (4 х 8 бітів = 32 біта) в пам’яті dd2 DD ‘abcd’ ; резервування комірки пам'яті з іменем dd2 для слова ‘abcd’
dql DQ 123456789; число займає 8 байтів в пам’яті mixl DB 5 DUP(5 DUP(5 DUP(10)))
dt1 DT 56789 ; запис у 80-розрядну комірку пам’яті з ім’ям ; dt1 числа 56789, число займає в пам’яті 10 байтів
9
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
4. Виконання арифметичних та логічних операцій
Команди додавання
ADD приймач, джерело |
Додавання |
|
ADС приймач, джерело |
Додавання з урахуванням перенесення |
|
|
ADD mem/reg1, mem/reg2 |
|
|
ADD [EBX], ECX |
; додати ECX до комірки |
|
пам’яті, |
|
|
; адреса якої міститься у Рг EBX |
|
|
ADD ECX, EDX |
; ECX := ECX + EDX |
|
ADC mem/reg1, mem/reg2 |
|
|
ADС ECX, EDX ; EСX := ECX + EDX + CF, регістр – регістр |
|
|
ADС EDІ, ALPHA |
; EDІ = EDІ + ALPHA + CF – додати |
|
змінну |
|
; з пам’яті з ім’ям ALPHA до Рг EDІ та вміст біта CF
ADC mem/reg, data
ADC ЕAX, 7777H ; ЕAX = ЕAX + 00007777H + CF (прапорець CF)
10
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru