Коды команды: TEQ, TST, CMP и CMN 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Коды команды: TEQ, TST, CMP и CMN



 

Примечание: команды TEQ, TST, CMP и CNM во время выполнения оказывают влияние только на флаги регистра CPSR, и при этом регистр назначения Rd изменению не подвергается.

Команда TEQP (разновидность команды TEQ) использовалась в ранних версиях ARM процессоров и поэтому не должна применяться: вместо этой команды должны быть использованы команды по передаче регистров PSR. Выполнение команды TEQP в ядре ARM7TDMI произведет перенос регистра SPSR_<режим> в регистр CPSR, если процессор находится в привилегированном режиме, в противном случае команда TEQP не выполнит никаких действий (непривилегированный режим).

 

Число машинных тактов выполнения

 

Число машинных тактов выполнения команд обработки данных зависит от типа самой команды.

 

Число машинных тактов при выполнении команд обработки данных

 

Тип команды Тактов
Обычная обработка данных 1S
Обработка данных с числом сдвигом, указанном в регистре 1S + 1I
Обработка данных с записью в регистр PC 2S + 1N
TEQP Обработка данных с числом сдвигом, указанном в регистре, и записью в регистр PC 2S + 1N + 1I

 

S, N и I зависят от типа машинных тактов.

 

Синтаксис в ассемблере

 

1. MOV,MVN (команды с одним операндом)

          <opcode>{cond}{S} Rd,<Op2>

2. CMP,CMN,TEQ,TST (команды без записи результата - без Rd)

<opcode>{cond} Rn,<Op2>

3. AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BIC

          <opcode>>{cond}{S} Rd,Rn,<Op2>

где:

- <Op2> - это Rm{,<shift>} или {,<#выражение>}

- {cond} - двухсимвольная мнемоника условия.

- {S} - разрешить условное выполнение (для команд CMP, CMN, TEQ, TST).

- Rd, Rn и Rm - выражения, результат вычисления которых - номер регистра общего назначения.

- <#выражение> - если это поле используется, то ассемблер попытается сгенерировать команду сдвига 8-битной константы с соответствии с указанным выражением. Если это невозможно, то возникнет ошибка.

- <shift> - <тип_сдвига> <регистр> или <тип_сдвига> #выражение, или RRX (расширенный циклический сдвиг вправо).

- <shiftname> - ASL, LSL, LSR, ASR, ROR. (так как ASL - синоним LSL, то для обеих команд будет сгенерирован одинаковый машинный код).

 

Пример

 

ADDEQ R2,R4,R5         ; Если Z = 1, то R2:=R4+R5

TEQS R4,#3                   ; Проверить R4 на равенство 3

; (ассемблер автоматически установит в единицу бит S)

SUB R4,R5,R7,LSR R2; Логический сдвиг вправо R7 на такое число бит,

; которое указано в старшем байте регистра R2,

; затем вычесть результат из R5 и разместить его в R4.

MOV PC,R14                ; Возврат из подпрограммы.

MOVS PC,R14               ; Возврат из исключения и восстановление CPSR из SPSR_mode.

 

Неопределенная команда (Undefined).

 

Если условие истинно, то будет выполнен переход на обработчик прерывания при попытке выполнения неопределенный команды (undefined instruction). Машинный код команды приведен на рисунке.

 

 

Неопределенная команда

Число машинных тактов

 

Эта команда выполняется за 2S + 1I + 1N, где S, N и I зависят от типа машинных тактов.

Синтаксис в ассемблере

 

Эта команда не имеет никакой мнемоники в ассемблере. И зарезервирована на будущее, поэтому не должна применяться.

 

Примеры применения команд в режиме ARM.

(Выдать в файле ARM.doc)

 

В примерах, приведенных ниже, указаны основные способы для достижения высокой эффективности кода с применением основных команд ядра ARM7TDMI. Все эти примеры в основном оптимизированы по размеру кода, а не по скорости выполнения (хотя некоторые из примеров все же позволяют достичь достаточно большой скорости их выполнения).

 

Использование команд, выполняемых по условиям

Применение условий для логического ИЛИ

 

CMP Rn,#p                    ; Если Rn=p OR Rm=q то перейти на Label.

BEQ Label

CMP Rm,#q

BEQ Label

Эквивалентный код:

CMP Rn,#p

CMPNE     Rm,#q       ; Если условие не выполнено, то провести другой тест.

BEQ Label

 

Абсолютное значение

 

TEQ Rn,#0        ; Проверить знак

RSBMI Rn,Rn,#0; и, если необходимо, дополнить до 2-х.

 

Умножение на 4, 5 или 6

 

MOV Rc,Ra,LSL#2                  ; Умножить на 4,CMP  Rb,#5                              ; проверить значение,ADDCS Rc,Rc,Ra                        ; закончить умножение на 5,

ADDHI     Rc,Rc,Ra              ; закончить умножение на 6.

 



Поделиться:


Последнее изменение этой страницы: 2021-12-07; просмотров: 259; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.38.125 (0.007 с.)