Скачиваний:
66
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

3. Подробное описание команд микроконтроллера lpc2000 на базе arm-ядра

Далее рассматривается каждая команда ядра в отдельности. Приведен синтаксис в ассемблере, действие команды, ее использование, приведены примеры.

ADС – ARM

Команда сложения с переносом (Addition with carry)

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

ADC{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

Формат команды представлен на рис. 1.

Описание

<cond> – поле условия (см. таблицу 1).

S– устанавливаетS-бит ­– бит условия (см. таблицу 1).

<Rd> – регистр результата (см. таблицу 1).

<Rn> – регистр первого операнда (см. таблицу 1).

<shifter_operand> – второй операнд (см. таблицу 3).

Команда ADC(addwithcarry) добавляет значение регистра <shifter_operand> и флаг переноса к значению регистра <Rn> и записывает результат в регистре <Rd>. В зависимости от результата иS-бита происходит обновление флагов полей условия (см. таблицу 4).

Действие

Если условие (<cond>) выполнено, то (Rd) = (Rn) + (shifter_operand) + (Сarry). Далее, еслиS= 1 иR15 задействован какRd, тогдаCPSR=SPSR, иначе (S= 1,R15 не задействован какRd) тогда формируются флагиN,Z,C,V.

Использование

Команда ADCиспользуется для сложения значений более чем двух операндов.

Примеры

ADС R7, R4, R12

(R7) = (R4) + (R12) + (Carry)

ADDEQ R2,R4,R5

Если Z = 1, то (R2)=(R4)+(R5)+(Carry).

ADCRd,PC, #Imm

Используется для добавления смещения, заданного в #Imm, к содержимому регистраPC. Результат записывается в регистрRd.

(Rd) = (PC) + #Imm+(Carry)

ADCTHUMB

Команда сложения с переносом (Addition with carry)

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

ADC <Rd>, <Rm>

Формат команды представлен на рис. 2.

Описание

<Rd> - Первый операнд команды сложения, сюда же помещается результат операции (см. таблицу 1).

<Rm> - Определяет регистр второго операнда операции (см. таблицу 1).

Содержимое регистра Rm добавляется к содержимому регистра Rd. Сложение осуществляется с учетом текущего значения флага переноса. Регистр флагов модифицируется в зависимости от результата операции.

N flag = Rd[31]

Z flag = if (Rd) == 0 then 1 else 0

C flag = CarryFrom( (Rd) + (Rm) + C Flag )

V flag = OverflowFrom( (Rd) + (Rm) + C Flag )

Пример

;необходимо сложить два длинных операнда,                                     ;содержащихся

;в регистрах R0, R1 и R2, R3.

ADD R1, R0 ; складываем младшие слова операнда

ADC R3, R2 ; складываем старшие слова операнда с учетом флага                                          ;  переноса

ADDARM

Команда сложения (Addition)

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

ADD{<cond>}{S} <Rd>, <Rn>, <shifter_operand>

Формат команды представлен на рис. 1.

Описание

<cond> – поле условия (см. таблицу 1).

S– устанавливаетS-бит ­– бит условия (см. таблицу 1).

<Rd> – регистр результата (см. таблицу 1).

<Rn> – регистр первого операнда (см. таблицу 1).

<shifter_operand> – второй операнд (см. таблицу 3).

Команда ADDдобавляет значение <shifter_operand> к значению регистра <Rn> и записывает результат в регистре <Rd>. В зависимости от результата иS-бита происходит обновление флагов полей условия (см. таблицу 4).

Действие

Если условие (<cond>) выполнено, то (Rd) = (Rn) + (shifter_operand). Далее, еслиS= 1 иR15 задействован какRd, тогдаCPSR=SPSR, иначе (S= 1,R15 не задействован какRd) тогда формируются флагиN,Z,C,V.

Использование

Команда ADDиспользуется когда необходимо произвести сложение двух значений.

Примеры

ADDR7,R4,R12

В регистр R7 записывается значение результата сложения регистровR4 иR12.

ADDRx,Rx, #1

Используется для увеличения значения регистра Rxна 1.

ADDEQR2,R4,R5

Если Z= 1, то (R2)=(R4)+(R5).

ADDRd,PC, #Imm

Используется для добавления смещения, заданного в #Imm, к содержимому регистраPC. Результат записывается в регистрRd.

ADD(1) – THUMB