Команды АЛУ
Арифметико-логическое устройство (АЛУ) (англ. 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 и установить флаги условий. |