Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
23.11.2024
Размер:
384.31 Кб
Скачать

МИЭТ, СПИНТех, КАИ

Массивы и структуры

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

Обращение к массивам

Адреса элементов структур и массивов

 

 

Соседние файлы в папке АВС