По способу действия над операндами АЛУ делятся на последовательные и параллельные.
В последовательных АЛУ операнды представляются в последовательном коде, а операции производятся последовательно во времени над их отдельными разрядами.
В параллельных АЛУ операнды представляются параллельным кодом и операции совершаются параллельно во времени над всеми разрядами операндов.
По способу представления чисел различают АЛУ:
Арифметико-логическое устройство
- для чисел с фиксированной запятой;
- для чисел с плавающей запятой;
- для десятичных чисел.
По способу реализации работы различают асинхронные и синхронные АЛУ.
В асинхронных АЛУ определяется момент фактического окончания операции, после чего немедленно может начаться следующая операция.
В синхронных АЛУ независимо от фактической продолжительности операции, определяющейся значениями операндов, на выполнение отдельной операции отводится фиксированное время.
По характеру использования элементов и узлов АЛУ делятся на блочные и многофункциональные.
В блочном АЛУ операции над числами с фиксированной и плавающей запятой, десятичными числами и алфавитно-цифровыми полями выполняются в отдельных блоках. При этом повышается скорость работы, т.к. блоки могут параллельно выполнять соответствующие операции, но при этом возрастают затраты на оборудование.
В многофункциональных АЛУ операции для всех форм представления данных выполняются одними и теми же схемами.
Основным элементом АЛУ является сумматор. Сумматор - вычислительная схема, выполняющая процедуру сложения поступающих на ее вход двоичных кодов.
Принцип работы сумматоров — поразрядное сложение с последующими переносами в старшие разряды. Умножение и деление осуществляются многократным сложением или вычитанием с поразрядным сдвигом.
Регистрами в языке ассемблер называют ячейки памяти, расположенные непосредственно на кристалле с АЛУ (процессор). Особенностью этого типа памяти является скорость обращения к ней, которая значительно быстрее оперативной памяти ЭВМ. Она также называется сверхбыстрой оперативной памятью (СОЗУ или SRAM).
Существуют следующие виды регистров:
Технологии повышения производительности процессоров
Регистры общего назначения (РОН).
Флаги.
Указатель команд.
Регистры сегментов.
Есть 8 регистров общего назначения, каждый размером в 32 бита.
Доступ к регистрам EAX, ECX, EDX, EBX может осуществляться в 32-битовом режиме, 16-битовом - AX, BX, CX, DX, а также 8-битовом - AH и AL, BH и BL и т. д.
Буква "E" в названиях регистров означает Extended (расширенный). Сами имена же связаны с их названиями на английском:
Accumulator register (AX) - для арифметических операций.
Counter register (CX) - для сдвигов и циклов.
Data register (DX) - для арифметических операций и операций ввода/вывода.
Base register (BX) - для указателя на данные.
Stack Pointer register (SP) - для указателя вершины стека.
Stack Base Pointer register (BP) - для индикатора основания стека.
Source Index register (SI) - для указателя отправителя (источника).
Destination Index register (DI) - для получателя.
Специализация РОН языка ассемблер является условной. Их можно использовать в любых операциях. Однако некоторые команды способны применять только определенные регистры. Например, команды цикла используют ESX для хранения значения счетчика.
Регистр флагов. Под этим подразумевается байт, который может принимать значения 0 и 1. Совокупность всех флагов (их порядка 30) показывают состояние процессора. Примеры флагов: Carry Flag (CF) - Флаг переноса, Overflow Flag (OF) - переполнения, Nested Flag (NT) - флаг вложенности задач и многие другие. Флаги делятся на 3 группы: состояние, управление и системные.
Указатель команд (EIP - Instruction Pointer). Данный регистр содержит адрес инструкции, которая должна быть выполнена следующей, если нет иных условий.
Регистры сегментов (CS, DS, SS, ES, FS, GS). Их наличие в ассемблере продиктовано особым управлением оперативной памятью, чтобы увеличить ее использование в программах. Благодаря им можно было управлять памятью размером до 4 Гб. В архитектуре Win32 необходимость в сегментах отпала, но названия регистров сохранились и используются по-другому.
Синтаксис команд ассемблера или инструкций ассемблера выглядит следующим образом:
: [;Comment]
Метка (label:) обязательно завершается двоеточием и может располагаться в отдельной строке.
Метки используются для того, чтобы ссылаться на команды внутри программы.
Инструкции указывают операцию, которая должна быть выполнена. В ассемблере операции представлены в виде буквенных сокращений для облегчения понимания. Инструкции также могут называться мнемокодами.
В роли операндов команды могут выступать:
регистры, обращение к которым происходит по их именам;
константы;
адреса.
Адрес может передаваться несколькими способами:
В виде имени переменной, которая в ассемблере является синонимом адреса.
Если переменная является массивом, то обращение к элементу массива происходит через имя его переменной и смещения. Для этого существует 2 формы: [<имя> + <смещение>] и <имя>[<смещение>]. Следует учитывать, что смещение - это не индекс в массиве, а размер в байтах. Программисту самому необходимо понимать, на сколько нужно сделать смещение в байтах, чтобы получить нужный элемент массива.
Можно использовать регистры. Для обращения к памяти, в которой хранится регистр, нужно использовать квадратные скобки: [ebx], [edi].
[] - квадратные скобки допускают применение сложных выражений внутри себя для вычисления адреса: [esi + 2*eax].
В ассемблере адрес передается через квадратные скобки. Ввиду того, что переменная является также адресом, она может использоваться как с квадратными скобками, так и без.