Третья лекция
Содержание:
Повторить представление float
Регистры
- Общего назначения - 8/16/32/64 бит
- Сегментные - 16 бит
- Регистры флагов - 16/32/64 бит
- Счетчик команд - 16/32/64 бит
- Математического сопроцессора
- MMX
- SSE (streaming SIMD extensions)
- отладочные
- MSR
15 8 7 0 16-bit
AH AL AX
BH BL BX
CH CL CX
DH DL DX
BP
SI
DI
SP
- Переполнение - при умножении
- Бит переноса - при сложении
Регистр флагов
- X ID Flag (ID) - проверка на доступность инструкции
- X Virtual Interrupt Pending (VIP) - ожидающее виртуальное прерывание
- X Virtual Interrupt Flag (VIF) - виртуальный флаг разрешения прерывания
- X Alignment Check (AC) - проверка выравнивания
- X Virtual-8086 Mode (VM) - режим виртуального процессора 8086
- X Resume Flag (RF) - флаг возобновления
- X Nested Task (NT) - флаг вложенности задач
- X I/O Privilege Level (IOPL) - уровень приоритета ввода-вывода
- S Overflow Flag (OF) - флаг переполнения
- C Direction Flag (DF) - флаг направления
- X Interrupt Enable Flag (IF) - флаг разрешения прерываний
- X Trap Flag (TF) - флаг трассировки (пошаговое исполнение)
- S Sign Flag (SF) - флаг знака
- S Zero Flag (ZF) - флаг нуля
- S Auxiliary Carry Flag (ACF) - вспомогательный флаг переноса
- S Parity Flag (PF) - флаг четности
- S Carry Flag (CF) - флаг переноса
S - Indicates a Status Flag
C - Indicates a Control Flag
X - Indicates a Sustem Flag
Форматы данных
- Числовые
- целые со знаком
- целые без знака
- с плавающей точкой
- BCD
- Символьные (отдельные символы и строки)
- Адреса и указатели
- Битовые поля
- Packed SIMD
Команды
- General purpose
- x87 FPU
- x87 FPU and SIMD state maangment
- Intel MMX technology
- SSE extensions
- SSE2 extensions
- SSE3 extensions
- SSSE3 extensions
- SSE4 extensions
- AESNI and PCLMULQDQ
- Intel AVX extensions
- F16C, RDRAND, FS/GS base access
- FMA extensions
- Intel AVX2 extensions
- Intel Transactional Synchronization extensions
- System Instructions
- IA-32e mode: 64-bit
-
…
- Пересылка данных
- Двоичная арифметик
- Десятичная арифметика
- Логические операции
- Shift & Rotate
- Работа с битами и байтами
- Передача управления
- Работа со строками
- Ввода-вывода
- Управлени флагами
- …
Формат двоичного кода команды:
- Префикс - 0…5 байт
- Опкод - 1…2 байта
- mod/rm - 1 байт
- sib (расширение mod/rm) - 1 байт
- Смещение - 0, 1, 2, 4 байта
- Непосредственный операнд - 0, 1, 2, 4 байта
Итого максимальная длина команды - 17 байт
Удобно ли процессору декодировать?
ARM - фиксированная длина команды (2 или 4 байта) в зависимости от режима.
Модели памяти
- Tiny - один сегмент на всё
- Small - один сегмент кода и один данных
- Compact - один сегмент кода и несколько данных
- Medium - несколько сегментов кода и один данных
- Large - несколько сегментов кода и данных
- Flat - один 32-битный сегмент на все, делится на секции
Отличие нотаций AT&T и Intel
- Мнемоники регистров (%eax, %rcx, …)
- Локальные метки (1b, 2f, …)
- Непосредственные операнды ($число)
- Шестнадцатеричные числа ($0xff)
- Директивы транслятора (.word, .-x, …)
- Расположение операндов (источника и приемника)
- Язык макрокоманд