1 лекция по СП / L01_SP14_Rysovany
.pdfНАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ “Харківський політехнічний інститут”
Кафедра “Обчислювальна техніка та програмування”
Лектор: к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович
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-розрядного МП Intel
Спосіб або метод визначення в команді адреси операнда або адреси переходу називається режимом адресації або просто адресацією.
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ВХ] ; завантаження в ЕАХ змінної з пам’яті, |
В 32-розрядних МП |
||
|
; адреса якої знаходиться в регістрі ЕВХ |
||
6. Індексна адресація. |
|
||
|
декілька розмиті |
||
MOV ЕDX, [ЕDI] |
; завантаження в ЕDX змінної з пам’яті, |
||
|
; адреса якої знаходиться в регістрі ЕDI
Починаючи з моделі 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 |
|
к.т.н., проф. НТУ ХПІ Рисований Олександр Миколайович, RYSOV@rambler.ru
|
Структура програми під Win32 може бути такою: |
TITLE <ім’я програми |
|
.386 |
; директива визначення типу мікропроцесора |
.model flat |
; завдання лінійної моделі пам’яті |
.data |
; директива визначення даних |
; дані, які визначені |
|
.data? |
; неініціалізовані дані |
.code |
; директива початку коду програми |
label: |
; мітка початку програми |
<code> ;;; основана частина програми
ret |
; повернення керування ОС |
|
end |
label ; закінчення програми .386 |
; директива визначення типу мікропроцесора |
|
.MODEL flat ; завдання лінійної моделі пам’яті |
|
|
.DATA |
; директива початку сегмента даних |
XDW 5 ; резервування в пам’яті 2-х байтів для змінної Х
YDW 3 ; резервування в пам’яті 2-х байтів для змінної Y
ZDW ? ; резервування в пам’яті 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