
- •Адресация
- •Формирование адреса x86
- •Адреса элементов структур и массивов
- •Обращение к структурам
- •Обращение к элементу структуры
- •Выравнивание
- •Переносимый код
- •Модификаторы параметров вставок
- •Обращение к массивам
- •Элемент 4 байта (нулями): 2, 8 так же; 64
- •Элемент произвольного размера (FPU ), 64
- •Блок (ymm), 64

МИЭТ, СПИНТех, КАИ |
Массивы и структуры |
1 / 18 |
Массивы и структуры
Александра Игоревна Кононова
МИЭТ
19 декабря 2020 г. актуальную версию можно найти на https://gitlab.com/illinc/arch-cs
Адресация Обращение к структурам Обращение к массивам

|
|
МИЭТ, СПИНТех, КАИ |
|
Массивы и структуры |
|
|
|
|
|
|
|
2 / 18 |
||||||||||||||
Команда x86 и её |
операнды (src=dst) |
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Префиксы |
|
|
|
|
ModR=M |
|
SIB |
|
|
Displacement |
|
|
Immediate |
|
||||||||||
|
|
|
Опкод |
|
|
|
|
|
Смещение |
|
|
|
||||||||||||||
|
|
Произвольное |
|
|
|
Адресация |
Указатель на |
|
|
Непосредственный |
|
|||||||||||||||
|
|
Код операции: |
|
|
|
операнда |
|
|
||||||||||||||||||
|
|
количество (от 0) |
|
|
операндов: |
операнд в памяти: |
|
|
операнд: |
|
||||||||||||||||
|
|
1, 2 или 3 байта |
|
|
в памяти: |
|
|
|
||||||||||||||||||
|
|
по 1 байту |
|
|
|
|
0 или 1 байт |
0 или 1 байт |
|
0, 1, 2 или 4 байта |
0, 1, 2 или 4 байта |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Reg= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mod |
продолжение |
|
R=M |
|
|
Scale |
|
Index |
|
|
Base |
|
|||||||||||
|
|
|
|
|
опкода |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
7 |
6 |
5 |
3 |
2 |
0 |
|
7 |
6 |
5 |
3 |
2 |
0 |
|
|
|
|
|
|
|||||||
1 |
Reg регистр (РОН). |
|
|
|
|
|
|
|
|
|
0 |
Регистр в опкоде. |
||||||||||||||
2 |
R=M РОН (при Mod = 11) или указывает на адрес в памяти: |
|||||||||||||||||||||||||
|
|
Base + 2Scale Index + Displacement, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
где Base и Index РОН (Index не может быть sp и r12) или 0; |
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mod = 00 |
||||||||
|
|
rip + Displacement (только в 64-битном режиме, R=M = 101). |
||||||||||||||||||||||||
3 |
Immediate непосредственный операнд (константа, магическое число). |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Адресация |
Команда x86 и её операнды (src=dst) |
Обращение к структурам |
Формирование адреса x86 |
Обращение к массивам |
Адреса элементов структур и массивов |
|
|

МИЭТ, СПИНТех, КАИ |
Массивы и структуры |
3 / 18 |
Формирование адреса x86
Адрес операнда в памяти в общем случае формируется из четырёх компонент (полей SIB и Displacement)
Адрес = Base + Index + Displacement
где Base и Index регистры,
и Displacement числа, = 2Scale (не более 8).
GNU Assembler: байт SIB записывается кортежем (Base; Index; ), смещение Displacement перед ним: Displacement(Base; Index; )
Операнд в памяти не имеет префикса. Любая из компонент может отсутствовать:
0(%rsp) (%rsp) |
rsp (rsp + 0) |
|
|||||||||||||||
8(%rsp) |
(rsp + 8) |
|
|||||||||||||||
(%r11, %rsi, 2) |
(r11 |
+ 2 rsi) |
|
||||||||||||||
(%r11, %rsi, 1) (%r11, %rsi) |
(r11 |
+ rsi) (r11 + 1 rsi) |
|
||||||||||||||
(, %rsi, 4) |
(4 rsi) |
|
|||||||||||||||
-12(%r11, %rsi, 4) |
(r11 |
+ 4 rsi 12) |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Адресация |
Команда x86 и её операнды (src=dst) |
Обращение к структурам |
Формирование адреса x86 |
Обращение к массивам |
Адреса элементов структур и массивов |
|
|

МИЭТ, СПИНТех, КАИ |
Массивы и структуры |
4 / 18 |
Адреса элементов структур и массивов
Элемент структуры M.field: адрес структуры и смещение поля
&(M:field) = &M +
В GNU Assembler: (&M)
Элемент массива M[i]: база, индекс, постоянный размер sizeof(M[0]).
&(M[i]) = &M + sizeof(M[0]) i
В GNU Assembler: (&M; i; sizeof(M[0])) (если элементы 1, 2, 4, 8 байт)
Адресация |
Команда x86 и её операнды (src=dst) |
Обращение к структурам |
Формирование адреса x86 |
Обращение к массивам |
Адреса элементов структур и массивов |
|
|