Кодирование команд

Pointer Registers

The pointer registers are 32-bit EIP, ESP, and EBP registers and corresponding 16-bit right portions IP, SP, and BP. There are three categories of pointer registers −

  • Instruction Pointer (IP) − The 16-bit IP register stores the offset address of the next instruction to be executed. IP in association with the CS register (as CS:IP) gives the complete address of the current instruction in the code segment.

  • Stack Pointer (SP) − The 16-bit SP register provides the offset value within the program stack. SP in association with the SS register (SS:SP) refers to be current position of data or address within the program stack.

  • Base Pointer (BP) − The 16-bit BP register mainly helps in referencing the parameter variables passed to a subroutine. The address in SS register is combined with the offset in BP to get the location of the parameter. BP can also be combined with DI and SI as base register for special addressing.

Сегменты памяти

Модель сегментированной памяти разбивает системную память на группы независимых сегментов, на которые указывают указатели, расположенные в регистрах сегментов. Каждый сегмент используется для хранения данных определённого типа. Один сегмент используется для хранения кода инструкций, второй — для хранения элементов данных, а третий — для программного стека.

Сегменты памяти:

   Сегмент данных (data segment) — представлен секциями .data и .bss. Секция .data используется для объявления области памяти, где хранятся элементы данных для программы. Эта секция не может быть расширена после объявления элементов данных, и она остаётся статической во всей программе. Секция .bss также является секцией статической памяти, которая содержит буферы для данных, которые будут объявлены в программе позже. Эта буферная память заполнена нулями.

   Сегмент кода (code segment) — представлен секцией .text. Он определяет область в памяти, в которой хранятся коды инструкций. Это также фиксированная область.

   Стек (stack) — это сегмент, который содержит значения данных, передаваемые в функции и процедуры в программе.

Регистры-указатели

Регистрами-указателями являются 32-битные регистры EIP, ESP и EBP и соответствующие им 16-битные регистры IP, SP и BP. Есть три категории регистров-указателей:

   Указатель на инструкцию или команду (Instruction Pointer или IP) — 16-битный регистр IP хранит смещение адреса следующей команды, которая должна быть выполнена. IP в сочетании с регистром CS (как CS:IP) предоставляет полный адрес текущей инструкции в сегменте кода.

   Указатель на стек (Stack Pointer или SP) — 16-битный регистр SP обеспечивает значение смещения в программном стеке. SP в сочетании с регистром SS (SS:SP) относится к текущей позиции данных или адреса в программном стеке.

   Базовый указатель (Base Pointer или BP) — 16-битный регистр BP используется в основном при передаче параметров в подпрограммы. Адрес в регистре SS объединяется со смещением в BP, чтобы получить местоположение параметра. BP также можно комбинировать с DI и SI в качестве базового регистра для специальной адресации.

Эмуляция EAX [ править | править код ]

В дополнение к аппаратным устройствам, Creative выпустила драйвера эмуляции EAX для компьютеров со встроенной звуковой картой.

Различия заключаются в комплекте поставки программного обеспечения. Sound Blaster Audigy ADVANCED MB включает Creative Audio Center, Creative MediaSource 5 Проигрыватель/Органайзер, Creative WaveStudio 7, Creative ALchemy; Sound Blaster X-Fi MB включает «Консоль развлечений» (англ. Entertainment Console ), Creative Karaoke Player, Creative MediaSource 5 Player/Organizer, Creative WaveStudio 7, Creative Audio Console, Creative ALchemy.

Sound Blaster Audigy ADVANCED MB

Также известен как Sound Blaster Audigy ADVANCED MB, он похож на Audigy 2 SE, а программное обеспечение поддерживает EAX 3.0, который поддерживает 64-канальные программные таблицы волн с DirectSound ускорением, но без аппаратного ускорения синтеза таблицы волн. ЦАП оценен как 95дБ по отношению сигнал/шум.

Он доступен как встроенная опция для ноутбуков Dell Inspiron, Studio and XPS.

Последняя версия драйверов поддерживает EAX 4.0.

Sound Blaster X-Fi MB

  • Поддержка EAX 4.0 и OpenAL
  • Кристаллизатор
  • CMSS-3D
  • SVM
  • Графический эквалайзер
  • Creative ALchemy (только Windows Vista, дает возможность использовать EAX в Vista)
  • Console Launcher (Entertainment Mode)
  • Audio Console
  • Karaoke Player
  • Creative WaveStudio
  • Creative MediaSource

В отличие от своего предшественника, Audigy Advanced MB, X-Fi MB не включает в себя программный синтезатор SoundFont. Другое отличие состоит в том, что она имеет возможность участвовать в 30-дневном испытательном режиме.

Сегментные регистры

Сегменты — это специфические части программы, которые содержат данные, код и стек. Есть три основных сегмента:

   Сегмент кода (Code Segment или CS) — содержит все команды и инструкции, которые должны быть выполнены. 16-битный регистр сегмента кода или регистр CS хранит начальный адрес сегмента кода.

   Сегмент данных (Data Segment или DS) — содержит данные, константы и рабочие области. 16-битный регистр сегмента данных или регистр DS хранит начальный адрес сегмента данных.

   Сегмент стека (Stack Segment или SS) — содержит данные и возвращаемые адреса процедур или подпрограмм. Он представлен в виде структуры данных «Стек». Регистр сегмента стека или регистр SS хранит начальный адрес стека.

Кроме регистров CS, DS и SS существуют и другие регистры дополнительных сегментов (Extra Segment или ES), FS и GS, которые предоставляют дополнительные сегменты для хранения данных.

При написании программ на ассемблере, программе необходим доступ к ячейкам памяти. Все области памяти в сегменте относятся к начальному адресу сегмента. Сегмент начинается с адреса, равномерно делимого на десятичное 16 или на шестнадцатеричное 10. Таким образом, крайняя правая шестнадцатеричная цифра во всех таких адресах памяти равна 0, что обычно не сохраняется в сегментных регистрах.

Сегментные регистры хранят начальные адреса сегмента. Чтобы получить точное местоположение данных или команды в сегменте, требуется значение смещения. Чтобы сослаться на любую ячейку памяти в сегменте, процессор объединяет адрес сегмента в сегментном регистре со значением смещения местоположения.

Segment Registers

Segments are specific areas defined in a program for containing data, code and stack. There are three main segments −

  • Code Segment − It contains all the instructions to be executed. A 16-bit Code Segment register or CS register stores the starting address of the code segment.

  • Data Segment − It contains data, constants and work areas. A 16-bit Data Segment register or DS register stores the starting address of the data segment.

  • Stack Segment − It contains data and return addresses of procedures or subroutines. It is implemented as a ‘stack’ data structure. The Stack Segment register or SS register stores the starting address of the stack.

Apart from the DS, CS and SS registers, there are other extra segment registers — ES (extra segment), FS and GS, which provide additional segments for storing data.

In assembly programming, a program needs to access the memory locations. All memory locations within a segment are relative to the starting address of the segment. A segment begins in an address evenly divisible by 16 or hexadecimal 10. So, the rightmost hex digit in all such memory addresses is 0, which is not generally stored in the segment registers.

The segment registers stores the starting addresses of a segment. To get the exact location of data or instruction within a segment, an offset value (or displacement) is required. To reference any memory location in a segment, the processor combines the segment address in the segment register with the offset value of the location.

Адресация прямого смещения

Этот режим адресации использует арифметические операторы для изменения адреса. Например, следующие определения определяют таблицы данных:

BYTE_TABLE DB 14, 15, 22, 45 ; таблица байтов
WORD_TABLE DW 134, 345, 564, 123 ; таблица слов

1
2

BYTE_TABLEDB14,15,22,45; таблица байтов

WORD_TABLEDW134,345,564,123; таблица слов

Следующие операции получают доступ к данным из таблиц в памяти в регистры:

MOV CL, BYTE_TABLE ; получаем 3-й элемент из BYTE_TABLE
MOV CL, BYTE_TABLE + 2 ; получаем 3-й элемент из BYTE_TABLE
MOV CX, WORD_TABLE ; получаем 4-й элемент из WORD_TABLE
MOV CX, WORD_TABLE + 3 ; получаем 4-й элемент из WORD_TABLE

1
2
3
4

MOVCL,BYTE_TABLE2; получаем 3-й элемент из BYTE_TABLE

MOVCL,BYTE_TABLE+2; получаем 3-й элемент из BYTE_TABLE

MOVCX,WORD_TABLE3; получаем 4-й элемент из WORD_TABLE

MOVCX,WORD_TABLE+3; получаем 4-й элемент из WORD_TABLE

Режимы адресации

Большинство инструкций на языке ассемблера требуют обработки операндов. Адрес операнда предоставляет место, где хранятся данные, подлежащие обработке. Некоторые инструкции не требуют операнда, в то время как другие могут требовать один, два или три операнда. В тех случаях, кода инструкции требуется два операнда, то первый операнд обычно является местом назначения, содержащий данные в регистре или в ячейке памяти, а второй — исходником. Исходник содержит либо данные для доставки (немедленная адресация), либо адрес (в регистре или в памяти) данных. Как правило, исходные данные остаются неизменными после операции.

Есть три основных режима адресации:

   Регистровая адресация

   Прямая (или ещё «непосредственная») адресация

   Адресация памяти

Control Registers

The 32-bit instruction pointer register and the 32-bit flags register combined are considered as the control registers.

Many instructions involve comparisons and mathematical calculations and change the status of the flags and some other conditional instructions test the value of these status flags to take the control flow to other location.

The common flag bits are:

  • Overflow Flag (OF) − It indicates the overflow of a high-order bit (leftmost bit) of data after a signed arithmetic operation.

  • Direction Flag (DF) − It determines left or right direction for moving or comparing string data. When the DF value is 0, the string operation takes left-to-right direction and when the value is set to 1, the string operation takes right-to-left direction.

  • Interrupt Flag (IF) − It determines whether the external interrupts like keyboard entry, etc., are to be ignored or processed. It disables the external interrupt when the value is 0 and enables interrupts when set to 1.

  • Trap Flag (TF) − It allows setting the operation of the processor in single-step mode. The DEBUG program we used sets the trap flag, so we could step through the execution one instruction at a time.

  • Sign Flag (SF) − It shows the sign of the result of an arithmetic operation. This flag is set according to the sign of a data item following the arithmetic operation. The sign is indicated by the high-order of leftmost bit. A positive result clears the value of SF to 0 and negative result sets it to 1.

  • Zero Flag (ZF) − It indicates the result of an arithmetic or comparison operation. A nonzero result clears the zero flag to 0, and a zero result sets it to 1.

  • Auxiliary Carry Flag (AF) − It contains the carry from bit 3 to bit 4 following an arithmetic operation; used for specialized arithmetic. The AF is set when a 1-byte arithmetic operation causes a carry from bit 3 into bit 4.

  • Parity Flag (PF) − It indicates the total number of 1-bits in the result obtained from an arithmetic operation. An even number of 1-bits clears the parity flag to 0 and an odd number of 1-bits sets the parity flag to 1.

  • Carry Flag (CF) − It contains the carry of 0 or 1 from a high-order bit (leftmost) after an arithmetic operation. It also stores the contents of last bit of a shift or rotate operation.

The following table indicates the position of flag bits in the 16-bit Flags register:

Flag: O D I T S Z A P C
Bit no: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Регистры управления

Регистром управления является объединённый 32-битный регистр инструкций и 32-битный регистр флагов (регистр процессора, отражающий его текущее состояние). Многие инструкции включают в себя операции сравнения и математические вычисления, которые способны изменить состояние флагов, а некоторые другие условные инструкции проверяют значения флагов состояния, чтобы перенести поток управления в другое место.

Распространённые битовые флаги:

   Флаг переполнения (Overflow Flag или OF) — указывает на переполнение старшего бита данных (крайнего левого бита) после signed арифметической операции.

   Флаг направления (Direction Flag или DF) — определяет направление влево или вправо для перемещения или сравнения строковых данных. Если , то строковая операция принимает направление слева направо, а когда , то строковая операция принимает направление справа налево.

   Флаг прерывания (Interrupt Flag или IF) — определяет, будут ли игнорироваться или обрабатываться внешние прерывания (например, ввод с клавиатуры и т.д.). Он отключает внешнее прерывание, когда значение равно 0, и разрешает прерывание, когда установлено значение 1.

   Флаг ловушка (Trap Flag или TF) — позволяет настроить работу процессора в одношаговом режиме.

   Флаг знака (Sign Flag или SF) — показывает знак результата арифметической операции. Этот флаг устанавливается в соответствии со знаком элемента данных после выполнения арифметической операции. Знак определяется по старшему левому биту. Положительный результат сбрасывает значение SF до 0, а отрицательный результат устанавливает его равным 1.

   Нулевой флаг (Zero Flag или ZF) — указывает результат арифметической операции или операции сравнения. Ненулевой результат сбрасывает нулевой флаг до 0, а нулевой результат устанавливает его равным 1.

   Вспомогательный флаг переноса (Auxiliary Carry Flag или AF) — после выполнения арифметической операции содержит перенос с бита 3 на бит 4. Используется для специализированной арифметики. AF устанавливается, когда 1-байтовая арифметическая операция вызывает перенос из бита 3 в бит 4.

   Флаг равенства (Parity Flag или PF) — указывает общее количество 1-бит в результате, полученном после выполнения арифметической операции. Чётное число 1-бит сбрасывает PF до 0, а нечётное число 1-бит устанавливает PF равным 1.

   Флаг переноса (Carry Flag или CF) — после выполнения арифметической операции содержит перенос 0 или 1 из старшего бита (крайнего слева). Кроме того, хранит содержимое последнего бита операции сдвига или поворота.

В таблице ниже указано положение битовых флагов в 16-битном регистре флагов:

Флаг: O D I T S Z A P C
Бит №: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Версии EAX [ править | править код ]

EAX имеет много итераций при разработке, каждая из которых добавляла всё больше функций. Ниже приведён обзор имеющихся в настоящее время версий EAX и их функции по отношению к предыдущей версии.

EAX 1.0

EAX 1.0 представлен в звуковых картах Sound Blaster Live!.

  • Аппаратная поддержка 8 одновременно звучащих каналов.
  • Аппаратная поддержка 32 индивидуальных каналов.
  • Аппаратный DSP Rendering.
  • Поддерживает изменение места в игре реверберации и отражений.
  • Имеет большое количество пресетов.
  • Позволяет (ограниченно) изменять реверберацию окружения.
  • Позволяет автоматически изменять интенсивность реверберации, в зависимости от положения источника звука относительно слушателя.

EAX 1.0 строит звуковую сцену на основе заранее созданных пресетов, учитывая дистанцию между источниками звука и слушателем. Соответственно, EAX 1.0 предоставляет большой набор пресетов «на все случаи жизни». Также имеется возможность изменять параметры поздней реверберации (дэмпинг, уровень) и автоматическое изменение уровня в зависимости от расстояния. Благодаря этому происходит улучшенное восприятие расстояния до источника.

EAX 2.0

  • Обновлена реверберационная модель.
  • Добавлены эффекты звуковых преград (Obstructions) и поглощений (Occlusions).
  • Отдельное управление начальными отражениями и поздними реверберациями. Непрерывный контроль размеров помещений. Улучшенная дистанционная модель для автоматического управления реверберациями и начальными отражениями, основанными на местоположении источника звука относительно слушателя.
  • Возможность учитывать звуковые свойства воздуха (поглощение звука).
  • Теперь для использования эффектов Environmental Audio не требуется описание геометрии помещения.

EAX 2.0 построен на возможностях первой версии и создаёт ещё более реалистичные эффекты за счёт поддержки преграждения и отражения звука, а также на улучшенной технологии определения направления звука.

EAX 3.0

  • Аппаратная поддержка 64 индивидуальных каналов.
  • Контроль за ранними реверберациями и отражениями для каждого источника звука.
  • Динамический переход между окружающими моделями.
  • Улучшенная дистанционная модель для автоматического управления реверберацией и начальными отражениями в зависимости от положения источников звука относительно слушателя.
  • Расчёты Ray-Tracing (отражение лучей) для получения параметров отражения для каждого источника звука.
  • Отдельные отражения для дальних эхо.
  • Улучшенное дистанционное представление, призванное заменить статические реверберационные модели.

EAX 3.0 совмещает вторую версию с более мощными возможностями. Новый уровень реализма достигается за счёт поддержки местных отражений, изолированных отражений, «бесшовных» переходов между звуковыми сценами и другими особенностями.

EAX 4.0

EAX 4.0 представлен в звуковых картах Sound Blaster Audigy 2.

  • Аппаратные эффекты реального времени
  • Множество одновременных окружений
  • Flange (Флэнжер)
  • Echo (Эхо)
  • Distortion (Дисторшн)
  • Ring modulation effects (Эффект кольцевой модуляции)

EAX 5.0

EAX 5.0 представлен в звуковых картах Sound Blaster X-Fi и ASUS ROG Xonar Phoebus.

  • Аппаратная поддержка 128 индивидуальных каналов по 4 эффекта на каждый канал.
  • EAX Voice (обработка входящего сигнала микрофона).
  • EAX PurePath (повышение точности позиционирования виртуальных источников звука).
  • Environment FlexiFX (4 слота для эффектов на каждый канал).
  • EAX MacroFX (реалистичные эффекты позиционирования на близком расстоянии).
  • Environment Occlusion (эффект создаёт впечатление, что источник звука находится в другом месте, за стеной).

Будущее

Согласно спецификации OpenAL 1.1 компании Creative, EAX должен считаться устаревшим. Новые разработки должны использовать интерфейс OpenAL EFX, который более плотно интегрирован со всей средой OpenAL.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector