Команды АЛУ

Арифметико-логическое устройство (АЛУ) (англ. arithmetic and logic unit, ALU) — блок процессора, который под управлением устройства управления (УУ) служит для выполнения арифметических и логических преобразований (начиная от элементарных) над данными, представляемыми в виде машинных слов, называемыми в этом случае операндами.

 

Арифметическо-логическое устройство в зависимости от выполнения функций можно разделить на две части:
микропрограммное устройство (устройство управления), задающее последовательность микрокоманд (команд);
операционное устройство (АЛУ), в котором реализуется заданная последовательность микрокоманд (команд).

 

Функции регистров, входящих в арифметическо-логическое устройство

  • Рг1 — сумматор (или сумматоры) — главный регистр АЛУ, в котором образуется результат вычислений;
  • Рг2,Рг3 — регистры операндов (слагаемого/сомножителя/делителя/делимого и др.) в зависимости от выполняемой операции;
  • Рг4 — регистр адреса (или адресные регистры), предназначенные для запоминания (бывает что формирования) адреса операндов результата;
  • Рг6 — k индексных регистров, содержимое которых используется для формирования адресов;
  • Рг7 — l вспомогательных регистров, которые по желанию программиста могут быть аккумуляторами, индексными регистрами или использоваться для запоминания промежуточных результатов.

Все выполняемые в АЛУ операции являются логическими операциями (функциями), которые можно разделить на следующие группы:

  • операции двоичной арифметики для чисел с фиксированной точкой;
  • операции двоичной (или шестнадцатеричной) арифметики для чисел с плавающей точкой;
  • операции десятичной арифметики;
  • операции индексной арифметики (при модификации адресов команд);
  • операции специальной арифметики;
  • операции над логическими кодами (логические операции);
  • операции над алфавитно-цифровыми полями.

 

Команды этой группы выполняют АЛУ операции между младшими полусловами регистров. Примечание: все команды этой группы влияют на флаги регистра CPSR.

 

OP THUMB ассемблер ARM эквивалент Действия
AND Rd, Rs ANDS Rd, Rd, Rs Rd:= Rd AND Rs
EOR Rd, Rs EORS Rd, Rd, Rs Rd:= Rd EOR Rs
LSL Rd, Rs MOVS Rd, Rd, LSL Rs Rd := Rd << Rs
LSR Rd, Rs MOVS Rd, Rd, LSR Rs Rd := Rd >> Rs
ASR Rd, Rs MOVS Rd, Rd, ASR Rs Rd := Rd ASR Rs
ADC Rd, Rs ADCS Rd, Rd, Rs Rd := Rd + Rs + Carry
SBC Rd, Rs SBCS Rd, Rd, Rs Rd := Rd - Rs - NOT Carry
ROR Rd, Rs MOVS Rd, Rd, ROR Rs Rd := Rd ROR Rs
TST Rd, Rs TST Rd, Rs Установить флаги регистра CPSR для Rd AND Rs
NEG Rd, Rs RSBS Rd, Rs, #0 Rd = -Rs
CMP Rd, Rs CMP Rd, Rs Установить флаги регистра CPSR для Rd - Rs
CMN Rd, Rs CMN Rd, Rs Установить флаги регистра CPSR для Rd + Rs
ORR Rd, Rs ORRS Rd, Rd, Rs Rd := Rd OR Rs
MUL Rd, Rs MULS Rd, Rs, Rd Rd := Rs * Rd
BIC Rd, Rs BICS Rd, Rd, Rs Rd := Rd AND NOT Rs
MVN Rd, Rs MVNS Rd, Rs Rd := NOT Rs

 

Все команды этого формата эквивалентны командам в режиме ARM согласно таблице 15. Число машинных тактов выполнения этих команд в режиме THUMB идентично с числом тактов выполнения ее в режиме ARM.

Примеры

 

EOR R3, R4 ; R3 := R3 EOR R4 и установить флаги условий.
ROR R1, R0 ; Сдвиг R1 вправо на число бит, указанное в R0,
  ; результат поместить в R1 и установить флаги условий.
NEG R5, R3 ; Вычесть содержимое R3 из нуля, разместить результат в регистре R5
  ; и установить флаги условий. Т.е. R5 = -R3.
CMP R2, R6 ; Установить флаги условий в зависимости от результата R2 - R6.
MUL R0, R7 ; R0 := R7 * R0 и установить флаги условий.