Страницы

Ярлыки

ДШИ-200 (1) КСВУ-6 (1) ЛЧМ (1) МДР-23 (1) микроконтроллер (1) перенаправление (1) С (1) структуры (1) учебный курс (1) AC/DC (1) ADC (1) ADS1248 (1) Altium (1) Altuim (1) Amolifer (1) ARM (1) assembler (2) Asynchronous (1) at command (3) at#eaddr (1) at#epassw (1) at#esmtp (1) at#euser (1) at#gprs (1) at#selint=2 (1) at#sgact (1) at#tcpatcmdseq (1) ATX (1) AVR (2) bit (1) boost (1) boot (2) bootlloader (1) C (6) C# (7) C++ (1) CMSIS (1) command (1) CP2101 (1) CSD (1) Danfoss (6) DBGMCU (1) debug (1) debug.ini (1) delegate (1) Discovery (1) DMA (1) DRV8805 (1) DWT (1) e-mail (1) email (1) Exel (1) exFAT (1) FC-051 (1) gl868-dual (2) gl868-dual cmux (1) GPIO (2) GSM (1) I2C (1) IAR (1) ID (1) Invoke (1) Keil (3) LabVIEW (1) Linux (1) LMP7721 (1) LoRa (3) mdmread (1) memory (1) MODBUS (1) Operation Amplifer (1) pack (1) printf (2) printf() (1) RCC (1) retargetting (1) RFM95/96/87/98(W) (1) RS232 (4) RS485 (1) RSAPI.DLL (1) RSS (1) RTC (2) send (2) SerialPort (1) Silabs (1) spl (1) standard peripherals library (1) startup (1) stepper (2) STlink (1) STlink/V2 (2) STM32 (10) stm32 stm32f10x (1) STM32DBG.IN (1) STM32F (19) STM32F103 (4) struct (1) Structure (1) system (1) SystemInit (1) Task (1) telit (5) thread (4) TIM (1) Type Cast (1) UART (1) uni-trend (1) USART (6) USB (1) UT61B (1) viewer (1)

суббота, 7 декабря 2013 г.

STM32 Assembler

Арифметические операции
ADDADD R0, R1, Operand2
ADD R0, R1, 12bit const.
Сложение
R0 = R1 + R2
N, Z, C, V S
ADCADC R0, R1, R2
ADC R0, R1, 8bit const
Сложение с учётом переноса
R0 = R1 + R2 + C
N, Z, C, VS
ADDWADD R0, R1, 12bit const.Сложение с 12bit константойN, Z, C, V
SUBSUB R0, R1, R2
SUB R0, R1, 12bit const.
Вычитание
R0 = R1 - R2
N, Z, C, VS
SBCSBC R0, R1, R2
SBC R0, R1, 8bit const.
Вычитание с учётом переноса
R0 = R1 - R2 - C
N, Z, C, VS
SUBWSUB R0, R1, 12bit const.Вычитание с 12bit константойN, Z, C, V
RSBRSB R0, R1, R2
RSB R0, R1, 8bit const.
RSB R0, R1, R2, ASR#23
Вычитание с противоположным порядком
аргументов.
R0 = R2 - R1 или R0 = 8bit const - R1
N, Z, C, VS

Умножение. Деление.
MUL
MLA
MLS
R0 = R1 x R2
R0 = (R1 x R2) + R3
R0 = R3 - (R1 x R2)
Умножение. 32bit результат
Умножение и сложение
Умножение и вычитание
N, ZS
UMULL
UMLAL
SMULL
SMLAL
RLo, RHi = R2 x R3
RLo, RHi += R2 x R3
RLo, RHi = R2 x R3
RLo, RHi += R2 x R3
Умножение. 64bit результат
Умножение и сложение
Умножение со знаком. 64bit результат
Умножение со знаком и сложение
UDIV
SDIV
R0 = R1 / R2
R0 = R1 / R2
Деление без знака
Деление со знаком

Доступ к памяти
ADRADR R0, label +/- 12bit
ADR.W R0, label +/- 32bit
Загрузка адреса метки в регистр.
LDR
STR
LDR R0, [R1, #8bit const.]! - прединкремент
LDR R0, [R1], #8bit const. - постинкремент
LDRB R0, [R1] - без инкремента
STRB R0, [R1], #1
Загрузка/сохранение регистра в режиме
адресации со смещением.
B=байт, SB=байт со знаком (только загрузка)
H=полуслово, SH=полуслово со знаком (только загрузка)
LDR
STR
LDR R0, [R1, R2, {LSL#0..3}]
STR R0, [R1, R2, {LSL#0..3}]
Смещение задаётся третьим регистром.
B, SB, H, SH работают аналогично
LDR
LDRD
LDR R0, label
LDRD R0, R1, label
Смещение задаётся адресом метки.
B, SB, H, SH работают аналогично
Невозможно применить к STR/STRD.
LDRT
STRT
Непривилегированный доступ.
Аналогичны простому LDR/STR.
LDRD
STRD
LDRD R0, R1, [R2, #10bit const.]! - прединкремент
LDRD R0, R1, [R2], #10bit const. - постинкремент
LDRD R0, R1, [R2] - без инкремента
STRD R0, R1, [R2]
Загрузка/сохранение двух регистров в режиме
адресации со смещением.
Константа должна быть кратна 4.
LDM
STM
LDM R0, {R1-R3}
LDM R0!, {R1-R3} - постинкремент R0
IA, DB, FD, EA - см. описание
Загрузка/сохранение множества регистров.
IA - с увеличением адреса
DB - с уменьшением адреса.
PUSH
POP
PUSH {R0, R2-R7, R12}
POP {R0, R2-R7, R12}
Загрузка/чтение из стека
LDREX
STREX
LDREX R1, [R2, #10bit const.]
STREX R0, R1, [R2, #10bit const.]
Эксклюзивное чтение/запись регистра.
B=байт, H=полуслово.
CLREXCLREX (без параметров)Сброс признака эксклюзивного доступа.

Перемещение и обработка данных
MOV
MVN
MOV R0, R1
MOV R0, 16bit const.
MVN R0, R1
Загрузка/перемещение регистров
Загрузка 16-бит в мл. полуслово, сброс старшего
Перемещение регистра с инверсией
N, Z, C, VS
MOVTMOVT R0, 16bit const.Загр. 16bit в старшее полуслово. Младш. остаётся без изменений.
CMP
CMN
CMP R0, R1
CMN R0, R1
Сравнение
Сравнение с противоположным знаком
N, Z, C, VS
TSTTST R0, Operand2Проверить значение битов по маскеN, Z, CS
TEQTEQ R0, Operand2Проверить равенство двух величинN, ZS
REV
REV16
REVSH
RBIT
REV R0, R1Изменение порядка битов или байтов в слове
CLZCLZ R0, R1Подсчет количества ведущих нулей

Логические операции
AND
ORR
EOR
BIC
ORN
И
ИЛИ
Исключающее ИЛИ
Сброс битов по маске. И-НЕ
ИЛИ-НЕ
0 в маске сбрасывает биты. Второй Operand2 для всех команд
1 в маске устанавливает биты
1 в маске инвертирует биты
1 в маске сбрасывает биты
0 в маске устанавливает биты
N, Z, CS

Операции сдвига
ASR
LSL
LSR
ROR
RRX
Арифметический сдвиг вправо
Логический сдвиг влево
Логический сдвиг вправо
Циклический сдвиг вправо
Сдвиг вправо на 1 позицию через перенос



N, Z, CS

Ветвление. Подпрограммы.
BB labelПереход к метке
BXBX R0Переход по адресу в регистре
BLBL labelВыполнить подпрограмму label
BLXBLX R0Выполнить подпрограмму по адресу в регистре
BX LRBX LRВозврат из подпрограммы
CBZ
CBNZ
CBZ R0, label
CBNZ R0, label
Переход, если R0 = 0
Переход, если R0 != 0
TBB
TBH
TBB [R0, R1]
TBH [R0, R1, LSL #1]
Табличный переход по индексу. Короткий переход.
Длиннй переход
ITIT{x{y{z}}} condБлок условно исполняемых инструкций

Работа с битовыми полями
BFCBFC R0, #lsb, #widthСброс поля в ноль
BFIBFI R0, R1, #lsb, #widthКопирует младшие биты R1 в поле R0
UBFXUBFX R0, R1, #lsb, #widthКопирует поле R1 в мл. биты R0 с заполнением нулями
SBFXSBFX R0, R1, #lsb, #widthКопирует поле R1 в мл. биты R0 с расширением знака
UXTB
UXTH
UXTB R0, R1 {, ROR #8,16,24}Преобразование байта с заполнением нулями
Преобразование полуслова
SXTB
SXTH
SXTB R0, R1 {, ROR #8,16,24}Преобразование байта с расширением знака
Преобразование полуслова

Преобразование данных с насыщением
SSAT
USAT
SSAT Rd, #n, Rm {, shift #s}
USAT Rd, #n, Rm {, shift #s}
Число со знаком в число со знаком,
Число со знаком в число без знака
Q

Управление системой
MRS
MSR
MRS R0, PSR
MSR PSR, R0
Чтение/запись специальных регистров.
CPSIE
CPSID
Разрешение/запрет прерываний
WFEWFEОжидать событие
WFIWFIОжидать прерывание
BKPTТочка останова
DMB
DSB
DMBБарьер синхронизации доступа к ОЗУ
ISBISBСброс конвейера
SEVSEVДёрнуть ножкой события для внешних камней
SVCSVC 8bit const.Вызов системного сервиса
NOPNOP

Суффиксы условного исполнения
EQZ = 1Равенство
NEZ = 0Неравенство
CS, HSC = 1Больше или равно, беззнаковое сравнение
CC, LOC = 0Меньше, беззнаковое сравнение
MIN = 1Отрицательное значение, меньше нуля
PLN = 0Положительное значение, больше или равно нулю
VSV = 1Переполнение
V = 0Нет переполнения
HIC = 1 и Z=0Больше, беззнаковое сравнение
LSC = 0 или Z=1Меньше или равно, беззнаковое сравнение
GEN = VБольше или равно, знаковое сравнение
LTN != VМеньше, знаковое сравнение
GTZ = 0 и N = VБольше, знаковое сравнение
LEZ = 1 и N != VМеньше или равно, знаковое сравнение
AL1Безусловное исполнение

Встроенные псевдоинструкции компиллятора
MOV32MOV32 R0, 32bit const. (label)Загрузить слово в регистр.
LDRLDR R0, =labelЗагрузить 32bit адрес метки или #число
ADRLADRL R0, labelЗагрузить 32bit адрес метки

1 комментарий:

  1. Этого материала хватило для написания собственной ос на ассемблере.
    Результаты работы тут http://forum.ixbt.com/topic.cgi?id=48:11735

    ОтветитьУдалить

ваше мнение...