Справочник по системе команд микроконтроллеров AVR основан на переводе документации от Atmel. Помимо этого сюда добавлено больше примеров из практики, в частности, примеры для ассемблера AVR GCC.
Чтобы быстро перейти к нужной команде достаточно ввести её имя. Также можно выбрать команду из списка внизу.
Справочник будет дополняться по мере появления вопросов.
Логические операции
Арифметические операции
Битовые операции
Операции сравнения
Операции сдвига
Операции пересылки данных
Безусловные переходы
Условные переходы
Управление устройством
Команда:
Введите имя команды в поле выше
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
AND Rd, Rr | Логическое «И» двух регистров | Rd ← Rd and Rr | Z, N, V |
ANDI Rd, K | Логическое «И регистра и константы | Rd ← Rd and K | Z, N, V |
EOR Rd, Rr | Исключающее «ИЛИ» двух регистров | Rd ← Rd xor Rr | Z, N, V |
OR Rd, Rr | Логическое «ИЛИ» двух регистров | Rd ← Rd or Rr | Z, N, V |
ORI Rd, K | Логическое «ИЛИ» регистра и константы | Rd ← Rd or K | Z, N, V |
COM Rd | Перевод в обратный код | Rd ← 0xFF — Rd | Z, C, N, V |
NEG Rd | Перевод в дополнительный код | Rd ← 0 — Rd | Z, C, N, V, H |
CLR Rd | Очистка регистра | Rd ← Rd xor Rd | Z, N, V |
SER Rd | Установка всех разрядов регистра | Rd ← 0xFF | — |
TST Rd | Проверка регистра на отрицательное (нулевое) значение | Rd ← Rd and Rd | Z, N, V |
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
ADD Rd, Rr | Сложение двух регистров | Rd ← Rd + Rr | Z, C, N, V, H |
ADC Rd, Rr | Сложение двух регистров с переносом | Rd ← Rd + Rr + С | Z, C, N, V, H |
SUB Rd, Rr | Вычитание двух регистров | Rd ← Rd — Rr | Z, C, N, V, H |
SBC Rd, Rr | Вычитание двух регистров с заёмом | Rd ← Rd — Rr — С | Z, C, N, V, H |
ADIW Rd, K | Сложение регистровой пары с константой | R(d+1):Rd ← R(d+1):Rd + K | Z, C, N, V, S |
SBIW Rd, K | Вычитание константы из регистровой пары | R(d+1):Rdl ← R(d+1):Rd — K | Z, C, N, V, S |
SUBI Rd, K | Вычитание константы из регистра | Rd ← Rd — K | Z, C, N, V, H |
SBCI Rd, K | Вычитание константы из регистра с заёмом | Rd ← Rd — K — С | Z, C, N, V, H |
INC Rd | Инкремент регистра | Rd ← Rd + 1 | Z, N, V |
DEC Rd | Декремент регистра | Rd ← Rd – 1 | Z, N, V |
MUL Rd, Rr | Умножение чисел без знака | R1:R0 ← Rd * Rr | Z, C |
MULS Rd, Rr | Умножение чисел со знаком | R1:R0 ← Rd * Rr | Z, C |
MULSU Rd, Rr | Умножение числа со знаком с числом без знака | R1:R0 ← Rd * Rr | Z, C |
FMUL Rd, Rr | Умножение дробных чисел без знака | R1:R0 ← (Rd * Rr) << 1 | Z, C |
FMULS Rd, Rr | Умножение дробных чисел со знаком | R1:R0 ← (Rd * Rr) << 1 | Z, C |
FMULSU Rd, Rr | Умножение дробного числа со знаком с числом без знака | R1:R0 ← (Rd * Rr) << 1 | Z, C |
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
CBR Rd, K | Очистка разрядов регистра | Rd ← Rd and (0FFH – K) | Z, N, V |
SBR Rd, K | Установка разрядов регистра | Rd ← Rd or K | Z, N, V |
CBI P, b | Сброс разряда I/O-регистра | P. b ← 0 | — |
SBI P, b | Установка разряда I/O-регистра | P.b ← 1 | — |
BCLR s | Сброс флага SREG | SREG.s ← 0 | SREG.s |
BSET s | Установка флага SREG | SREG.s ← 1 | SREG.s |
BLD Rd, b | Загрузка разряда регистра из флага T | Rd.b ← T | — |
BST Rr, b | Запись разряда регистра во флаг T | T ← Rd.b | T |
CLC | Сброс флага переноса | C ← 0 | C |
SEC | Установка флага переноса | C ← 1 | C |
CLN | Сброс флага отрицательного числа | N ← 0 | N |
SEN | Установка флага отрицательного числа | N ← 1 | N |
CLZ | Сброс флага нуля | Z ← 0 | Z |
SEZ | Установка флага нуля | Z ← 1 | Z |
CLI | Общий запрет прерываний | I ← 0 | I |
SEI | Общее разрешение прерываний | I ← 1 | I |
CLS | Сброс флага знака | S ← 0 | S |
SES | Установка флага знака | S ← 1 | S |
CLV | Сброс флага переполнения дополнительного кода | V ← 0 | V |
SEV | Установка флага переполнения дополнительного кода | V ← 1 | V |
CLT | Сброс пользовательского флага T | T ← 0 | T |
SET | Установка пользовательского флага T | T ← 1 | T |
CLH | Сброс флага половинного переноса | H ← 0 | H |
SEH | Установка флага половинного переноса | H ← 1 | H |
Мнемоника | Операция | Флаги | |
---|---|---|---|
CP Rd, Rr | Сравнение двух регистров | Если (Rd – Rr) | Z, N, V, C, H |
CPC Rd, Rr | Сравнение регистров с учётом переноса | Если (Rd – Rr — C) | Z, N, V, C, H |
CPI Rd, K | Сравнение регистра с константой | Если (Rd – K) | Z, N, V, C, H |
CPSE Rd, Rr | Сравнение регистров и пропуск следующей команды если они равны | Если (Rd = Rr) PC ← PC + 2 (или 3) | — |
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
ASR Rd | Арифметический сдвиг вправо | Rd(i) ← Rd(i+1) (n=0. .6), C ← Rd(0) | Z, C, N, V |
LSL Rd | Логический сдвиг влево | Rd(i+1) ← Rd(i), Rd(0) ← 0, C ← Rd(7) | Z, C, N, V |
LSR Rd | Логический сдвиг вправо | Rd(i) ← Rd(i+1), Rd(7) ← 0, C ← Rd(0) | Z, C, N, V |
ROL Rd | Сдвиг влево через перенос | Rd(i+1) ← Rd(i), Rd(0) ← C, C ← Rd(7) | Z, C, N, V |
ROR Rd | Сдвиг вправо через перенос | Rd(i) ← Rd(i+1), Rd(7) ← C, C ← Rd(0) | Z, C, N, V |
SWAP Rd | Обмен местами тетрад | Rd(3..0) ↔ Rd(7..4) | — |
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
MOV Rd, Rr | Пересылка между регистрами | Rd ← Rr | — |
MOVW Rd, Rr | Пересылка между парами регистров | R(d +1):Rd ← R(r+1):Rr | — |
LDI Rd, K | Загрузка константы в регистр | Rd ← K | — |
LD Rd, X | Косвенное чтение | Rd ← [X] | — |
LD Rd, X+ | Косвенное чтение с пост-инкрементом | Rd ← [X], X ← X + 1 | — |
LD Rd, -X | Косвенное чтение с пред-декрементом | X ← X — 1, Rd ← [X] | — |
LD Rd, Y | Косвенное чтение | Rd ← [Y] | — |
LD Rd, Y+ | Косвенное чтение с пост-инкрементом | Rd ← [Y], Y ← Y + 1 | — |
LD Rd, -Y | Косвенное чтение с пред-декрементом | Y ← Y — 1, Rd ← [Y] | — |
LDD Rd, Y+q | Косвенное чтение со смещением | Rd ← [Y+q] | — |
LD Rd, Z | Косвенное чтение | Rd ← [Z] | — |
LD Rd, Z+ | Косвенное чтение с пост-инкрементом | Rd ← [Z], Z ← Z + 1 | — |
LD Rd, -Z | Косвенное чтение с пред-декрементом | Z ← Z — 1, Rd ← [Z] | — |
LDD Rd, Z+q | Косвенное чтение со смещением | Rd ← [Z+q] | — |
LDS Rd, A | Непосредственное чтение из ОЗУ | Rd ← [A] | — |
ST X, Rr | Косвенная запись | [X] ← Rr | — |
ST X+, Rr | Косвенная запись с пост-инкрементом | [X] ← Rr, X ← X + 1 | — |
ST -X, Rr | Косвенная запись с пред-декрементом | X ← X — 1, [X] ← Rr | — |
ST Y, Rr | Косвенная запись | [Y] ← Rr | — |
ST Y+, Rr | Косвенная запись с пост-инкрементом | [Y] ← Rr, Y ← Y + 1 | — |
ST -Y, Rr | Косвенная запись с пред-декрементом | Y ← Y — 1, [Y] ← Rr | — |
STD Y+q, Rr | Косвенная запись со смещением | [Y+q] ← Rr | — |
ST Z, Rr | Косвенная запись | [Z] ← Rr | — |
ST Z+, Rr | Косвенная запись с пост-инкрементом | [Z] ← Rr, Z ← Z + 1 | — |
ST -Z, Rr | Косвенная запись с пред-декрементом | Z ← Z — 1, [Z] ← Rr | — |
STD Z+q, Rr | Косвенная запись со смещением | [Z+q] ← Rr | — |
STS A, Rr | Непосредственная запись в ОЗУ | [A] ← Rr | — |
LPM | Загрузка данных из памяти программы | R0 ← {Z} | — |
LPM Rd, Z | Загрузка данных из памяти программы в регистр | Rd ← {Z} | — |
LPM Rd, Z+ | Загрузка данных из памяти программы с пост-инкрементом Z | Rd ← {Z}, Z ← Z + 1 | — |
ELPM | Расширенная загрузка данных из памяти программы | R0 ← {RAMPZ:Z} | — |
ELPM Rd, Z | Расширенная загрузка данных из памяти программы в регистр | Rd ← {RAMPZ:Z} | — |
ELPM Rd, Z+ | Расширенная загрузка данных из памяти программы с пост-инкрементом Z | Rd ← {RAMPZ:Z}, Z ← Z + 1 | — |
SPM | Запись в программную память | {Z} ← R1:R0 | — |
IN Rd, P | Пересылка из I/O-регистра в регистр | Rd ← P | — |
OUT P, Rr | Пересылка из регистра в I/O-регистр | P ← Rr | — |
PUSH Rr | Сохранение регистра в стеке | STACK ← Rr | — |
POP Rd | Извлечение регистра из стека | Rd ← STACK | — |
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
RJMP A | Относительный безусловный переход | PC ← PC + A + 1 | — |
JMP A | Длинный безусловный переход | PC ← A | — |
IJMP | Непрямой безусловный переход | PC ← Z | — |
EIJMP | Расширенный непрямой безусловный переход | PC ← Z:EIND | — |
RCALL A | Относительный вызов подпрограммы | PC ← PC + A + 1 | — |
CALL A | Длинный вызов подпрограммы | PC ← A | — |
ICALL | Непрямой вызов подпрограммы | PC ← Z | — |
EICALL | Расширенный непрямой вызов подпрограммы | PC ← Z:EIND | — |
RET | Возврат из подпрограммы | PC ← STACK | — |
RETI | Возврат из подпрограммы обработки прерываний | PC ← STACK | I |
Все команды этой группы выполняют переход (PC ← PC + A + 1) при разных условиях.
Мнемоника | Описание | Условие | Флаги |
---|---|---|---|
BRBC s, A | Переход если флаг S сброшен | Если SREG(S) = 0 | — |
BRBS s, A | Переход если флаг S установлен | Если SREG(S) = 1 | — |
BRCS A | Переход по переносу | Если C = 1 | — |
BRCC A | Переход если нет переноса | Если C = 0 | — |
BREQ A | Переход если равно | Если Z = 1 | — |
BRNE A | Переход если не равно | Если Z = 0 | — |
BRSH A | Переход если больше или равно | Если C = 0 | — |
BRLO A | Переход если меньше | Если C = 1 | — |
BRMI A | Переход если отрицательное значение | Если N = 1 | — |
BRPL A | Переход если положительное значение | Если N = 0 | — |
BRGE A | Переход если больше или равно (со знаком) | Если (N и V) = 0 | — |
BRLT A | Переход если меньше (со знаком) | Если (N или V) = 1 | — |
BRHS A | Переход по половинному переносу | Если H = 1 | — |
BRHC A | Переход если нет половинного переноса | Если H = 0 | — |
BRTS A | Переход если флаг T установлен | Если T = 1 | — |
BRTC A | Переход если флаг T сброшен | Если T = 0 | — |
BRVS A | Переход по переполнению дополнительного кода | Если V = 1 | — |
BRVC A | Переход если нет переполнения дополнительного кода | Если V = 0 | — |
BRID A | Переход если прерывания запрещены | Если I = 0 | — |
BRIE A | Переход если прерывания разрешены | Если I = 1 | — |
SBRC Rd, K | Пропустить следующую команду если бит в регистре очищен | Если Rd[K] = 0 | — |
SBRS Rd, K | Пропустить следующую команду если бит в регистре установлен | Если Rd[K] = 1 | — |
SBIC A, b | Пропустить следующую команду если бит в регистре ввода/вывода очищен | Если I/O(A, b) = 0 | — |
SBIS A, b | Пропустить следующую команду если бит в регистре ввода/вывода установлен | Если I/O(A, b) = 1 | — |
Мнемоника | Описание | Операция | Флаги |
---|---|---|---|
NOP | Нет операции | — | — |
SLEEP | Переход в «спящий» режим | — | — |
WDR | Сброс сторожевого таймера | — | — |
BREAK | Приостановка программы (используется отладчиком) | — | — |
Первоначально эта информация была помещена на странице Пояснения к основным таблицам. Но затем было решено, что эти длинные общие рассуждения лучше вынести на отдельную страницу. Однако, после такого переноса эти рассуждения еще немножко выросли. Теперь, пожалуй, они годятся только для раздела «Разные заметки» … Команды ассемблера и машинные командыПрежде всего нужно не забывать, что команды на языке ассемблера и команды на машинном языке — это две разные вещи. Хотя несомненно, что эти два понятия тесно связаны между собой. Команда ассемблера это некоторое мнемоническое имя. Для процессоров семейства x86 это имя записывается на английском языке. Например, у команды сложения имя ADD, а у команды вычитания имя SUB. В таблицах настоящего справочника в колонке Команда показано имя команды на языке ассемблера. Основой машинной команды является код операции, который является просто некоторым числом. Для процессоров x86 (впрочем, и для других процессоров тоже) принято использовать шестнадцатиричные числа. (Попутно заметим, что для советских ЭЦВМ были приняты восьмеричные числа, с ними было меньше путаницы, поскольку такие числа состоят только из цифр и не содержат букв). В таблицах настоящего справочника в колонке Код показан код операции машинной команды, а в колонке Формат показан формат машинной команды. Можно считать, что количество разных машинных команд у данного процессора равно количеству возможных кодов операции. По формату можно узнать, из каких составных частей состоит данная машинная команда. Разные машинные команды могут иметь разный формат. Код операции машинной команды полностью определяет ее формат. Часто одна ассемблерная команда имеет несколько разных вариантов машинных команд. Причем форматы этих машинных команд могут быть разными для разных вариантов. Например, ассемблерная команда ADD имеет десять вариантов машинных команд с разными кодами операций. Но разных форматов оказывается меньше, только три. И каждый из этих трех форматов требует свои типы операндов при записи команды на языке ассемблера. См. страницу Основные команды арифметики. Здесь важно обратить внимание, что все эти десять машинных команд выполняют одну и ту же элементарную операцию, которая на языке ассемблера называется ADD. И, значит, получается, что вроде бы можно рассуждать так: процессор может выполнять столько разных элементарных операций, сколько есть разных команд ассемблера. Однако, этот простой принцип все равно нуждается в оговорках и примечаниях. Так как у части ассемблерных команд бывают еще и синонимы. Общий список всех команд процессора можно построить разными способами, выбирая разный порядок расположения команд. Основные два способа такие. Способ (1). Взять за основу команды языка ассемблера и расположить команды по алфавиту. Тогда могут получиться вот такие таблицы. Способ (2). Взять за основу код операции машинной команды и расположить команды в порядке кодов операций. При этом будет лучше, если общий список разделить на две части, сделать отдельные списки для команд с однобайтным кодом операции и для команд с двухбайтным кодом операции. Конечно, возможен еще и третий способ, который обычно применяется в учебниках. Разделить все команды на группы по смыслу и изучать их по группам, начиная с более простых. Основной байт кода операцииВ системе команд x86 одного байта (256 разных комбинаций) оказалось недостаточно для кодирования всех команд. Поэтому код операции в машинной команде занимает либо один байт, либо два байта. Если первый байт содержит код 0F, то код операции состоит из двух байтов. Если в машинной команде код операции состоит из одного байта, то этот единственный байт и является основным байтом кода операции. И содержимое этого байта определяет, что это за операция. Если в машинной команде код операции состоит из двух байт, то уже не первый, а второй байт будет основным и определяющим в коде операции. В таблицах справочника, в которых показано кодирование машинных команд, основной байт кода операции обычно бывает показан дважды, сначала в колонке «Код» в виде шестнадцатиричного числа, а затем в колонке «Формат» в виде условных восьми черточек, на которых отмечены особые биты, если таковые есть в основном байте кода операции. Основные страницы справочника |
||||
Код операции | Инструкция | Оп/Ан | 64-битный режим | Режим совместимости/этапа | Описание |
---|---|---|---|---|---|
04 ib | ДОБАВИТЬ AL, imm8 | я | Действительный | Действительный | Добавить imm8 в AL. |
05 | ДОБАВИТЬ ТОПОР, imm16 | я | Действительно | Действительный | Добавить imm16 в AX. |
05 идентификатор | ДОБАВИТЬ EAX, imm32 | я | Действительный | Действительный | Добавить imm32 в EAX. |
REX.W + 05 идентификатор | ДОБАВИТЬ РАКС, imm32 | я | Действительный | Н.В. | Добавить знак imm32, расширенный до 64 бит, в RAX. |
80 /0 иб | ДОБАВИТЬ р/м8, имм8 | МИ | Действительный | Действительный | Добавьте imm8 к об/м8. |
РЕКС + 80/0 ib | ДОБАВЬТЕ р/м8 * , имм8 | МИ | Действительный | Н. В. | Добавить знак -расширенный imm8 до об/м8. |
81/0 | ДОБАВИТЬ р/м16, имм16 | МИ | Действительный | Действительный | Добавьте imm16 к об/м16. |
81/0 идентификатор | ДОБАВИТЬ об/м32, имм32 | МИ | Действительный | Действительный | Добавьте imm32 к об/м32 . |
REX.W + 81/0 id | ДОБАВИТЬ р/м64, имм32 | МИ | Действительный | Н.В. | Добавить imm32 расширенный знак до 64 бит до r/m64 . |
83/0 иб | ДОБАВИТЬ р/м16, имм8 | МИ | Действительный | Действительный | Добавить знак -расширенный imm8 до об/м16. |
83/0 иб | ДОБАВИТЬ об/м32, имм8 | МИ | Действительный | Действительно | Добавить знак -расширенный imm8 до об/м32. |
REX.W + 83/0 ib | ДОБАВИТЬ р/м64, имм8 | МИ | Действительный | Н.В. | Добавить знак -расширенный imm8 до об/м64. |
00 / р | ДОБАВИТЬ р/м8, р8 | МР | Действительный | Действительный | Добавить r8 до об/м8. |
REX + 00 / р | ДОБАВИТЬ р/м8 * , р8 * | МР | Действительный | Н.В. | Добавьте r8 к об/м8. |
01 / р | ДОБАВИТЬ р/м16, р16 | МР | Действительный | Действительный | Добавьте r16 к об/м16. |
01 / р | ДОБАВИТЬ р/м32, р32 | МР | Действительный | Действительный | Добавьте r32 к об/м32. |
REX.W + 01 / р | ДОБАВИТЬ р/м64, р64 | МР | Действительный | Н.В. | Добавьте r64 к об/м64. |
02 / р | ДОБАВИТЬ r8, r/m8 | ринггитов | Действительный | Действительный | Добавить об/м8 к об/м8. |
REX + 02 / р | ДОБАВЬТЕ р8 * , р/м8 * | ринггитов | Действительный | Н.В. | Добавить об/м8 к об/м8. |
03 / р | ДОБАВИТЬ r16, r/m16 | ринггитов | Действительно | Действительный | Добавить об/м16 к об/м16. |
03 / р | ДОБАВИТЬ r32, об/м32 | ринггитов | Действительный | Действительный | Добавить об/м32 к об/м32. |
REX.W + 03 / р | ДОБАВИТЬ r64, r/m64 | ринггитов | Действительный | Н.В. | Добавить об/м64 к об/м64. |
*В 64-битном режиме r/m8 нельзя закодировать для доступа к следующим байтовым регистрам, если используется префикс REX: AH, BH, CH, DH.
Оп/Р | Операнд 1 | Операнд 2 | Операнд 3 | Операнд 4 |
RM | ModRM:reg (r, w) | ModRM:р/м (р) | нет данных | Нет данных |
МР | ModRM:r/m (r, w) | ModRM:reg (r) | нет данных | NA |
MI | ModRM:r/m (r, w) | имм8/16/32 | нет данных | Н/Д |
I | АЛ/АКС/ЕАКС/РАКС | имм8/16/32 | нет данных | Нет данных |
Складывает операнд назначения (первый операнд) и операнд-источник (второй операнд), а затем сохраняет результат в операнде назначения. Операнд назначения может быть регистром или ячейкой памяти; исходный операнд может быть непосредственным, регистром или ячейкой памяти. (Однако в одной инструкции нельзя использовать два операнда памяти.) Когда непосредственное значение используется в качестве операнда, оно расширяется по знаку до длины формата целевого операнда.
Инструкция ADD выполняет сложение целых чисел. Он оценивает результат для целочисленных операндов со знаком и без знака и устанавливает флаги OF и CF для указания переноса (переполнения) в результате со знаком или без знака соответственно. Флаг SF указывает знак подписанного результата.
Эту инструкцию можно использовать с префиксом LOCK, чтобы позволить выполнение инструкции атомарно.
В 64-битном режиме размер операции инструкции по умолчанию составляет 32 бита. Использование префикса REX в форме REX.R разрешает доступ к дополнительным регистрам (R8-R15). Использование префикса REX в виде REX.W повышает скорость работы до 64 бит. См. сводную таблицу в начале этого раздела для кодирования данных и ограничений.
НАЗНАЧЕНИЕ := НАЗНАЧЕНИЕ + ИСТОЧНИК;
В зависимости от результата устанавливаются флаги OF, SF, ZF, AF, CF и PF.
#GP(0) | Если место назначения находится в недоступном для записи сегменте. |
Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS. | |
Если регистр DS, ES, FS или GS используется для доступа к памяти и содержит селектор сегмента NULL. | |
#СС(0) | Если эффективный адрес операнда памяти выходит за пределы сегмента SS. |
#PF(код неисправности) | Если происходит ошибка страницы. |
#AC(0) | Если включена проверка выравнивания и делается невыровненная ссылка на память, когда текущий уровень привилегий равен 3. |
#UD | Если используется префикс LOCK, но назначение не является операндом памяти. |
#GP | Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS. |
#SS | Если эффективный адрес операнда памяти выходит за пределы сегмента SS. |
#УД | Если используется префикс LOCK, но назначение не является операндом памяти. |
#GP(0) | Если эффективный адрес операнда памяти выходит за пределы сегмента CS, DS, ES, FS или GS. |
#SS(0) | Если эффективный адрес операнда памяти выходит за пределы сегмента SS. |
#PF(код неисправности) | Если происходит ошибка страницы. |
#AC(0) | Если включена проверка выравнивания и делается невыровненная ссылка на память. |
#УД | Если используется префикс LOCK, но назначение не является операндом памяти. |
Те же исключения, что и в защищенном режиме.
#СС(0) | Если адрес памяти, ссылающийся на сегмент SS, имеет неканоническую форму. |
#GP(0) | Если адрес памяти имеет неканоническую форму. |
#PF(код неисправности) | Если происходит ошибка страницы. |
#AC(0) | Если включена проверка выравнивания и выполняется невыровненная ссылка на память, а текущий уровень привилегий равен 3. |
#UD | Если используется префикс LOCK, но назначение не является операндом памяти. |
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
Ассемблер Microsoft ARM, armasm и armasm64 , поддерживает несколько параметров командной строки. По умолчанию armasm ассемблирует язык ассемблера ARMv7 Thumb в реализацию Microsoft общего формата объектных файлов (COFF). Ассемблер armasm64 создает объектный код COFF для целей ARM64 и ARM64EC. Компоновщик может связывать объекты кода COFF, созданные как ассемблером ARM, так и компилятором C/C++. Он может быть связан либо вместе с объектными библиотеками, созданными библиотекарем.
Armasm
[ опции ] исходный_файл объектный_файл
armasm
[ опции ] исходный_файл
ARMASM64
[ Варианты ] Source_file Object_file
ARMASM64
[ ] 202020505050505050505050505050502020202. 10202020202020202020202.020202020202 Параметры
Опции
Комбинация из нуля или более следующих опций:
-16
Доступно только в составе Armasm . Собрать исходный код в виде 16-битных инструкций Thumb. Этот параметр используется по умолчанию.
-32
Доступно только в составе Armasm . Соберите исходный код в виде 32-битных инструкций ARM.
-coff_thumb2_only
Доступно только в armasm . Разрешить только код Thumb-2.
-errorReport:
параметр
Этот параметр устарел. В Windows Vista и более поздних версиях отчеты об ошибках управляются параметрами отчетов об ошибках Windows (WER).
-errors
имя файла
-e
имя файла
Перенаправлять сообщения об ошибках и предупреждения на имя файла . По умолчанию эти сообщения отправляются наstdout
.
-funcOverride:
имя_функции
Доступно только в armasm64 . Выдать функцию переопределения поддержки для имя_функции .
-g
Создание отладочной информации.
-gh:SHA1
Используйте алгоритм криптографического хеширования SHA-1 для создания контрольной суммы каждого исходного файла в отладочной информации. Переопределяет-gh:SHA256
.
-gh:SHA256
Используйте алгоритм криптографического хэширования SHA-256 для создания контрольной суммы каждого исходного файла в отладочной информации. Этот параметр включен по умолчанию в Visual Studio 2022 версии 17.0 и более поздних.
-guard:ehcont
[-
]
Создайте отсортированный список относительных виртуальных адресов (RVA) всех действительных целей продолжения обработки исключений для двоичного файла. Он используется во время выполнения дляNtContinue
иSetThreadContext
Проверка указателя инструкции. По умолчанию-guard:ehcont
выключен и должен быть включен явно. Чтобы явно отключить эту опцию, используйте-guard:ehcont-
. Этот параметр доступен в Visual Studio 2019 версии 16.7 и более поздних. Эта функция поддерживается для 64-битных процессов в 64-битной ОС.
-help
-h
Вывести справочное сообщение командной строки.
-i
каталог [;
каталог ]
Добавить один или несколько указанных каталогов в путь поиска включения. Разделяйте каталоги точкой с запятой (;
).
-игнорировать
warning_number
Отключить указанный номер предупреждения. Возможные значения см. в разделе диагностические сообщения ARM Assembler.
-список
list_file
Создать подробный листинг сгенерированного языка ассемблера в list_file . Параметр list_file является необязательным. Если он опущен, ассемблер добавляет.lst
к базовому имени source_file для создания файла листинга.
-машина
машина
Укажите тип машины для установки в заголовке PE. В armasm возможные значения для машина являются:
- ARM — устанавливает тип машины на
IMAGE_FILE_MACHINE_ARMNT
. Этот параметр используется по умолчанию.- THUMB — Устанавливает тип машины на
IMAGE_FILE_MACHINE_THUMB
.В armasm64 возможные значения:
- ARM64 — устанавливает тип машины
IMAGE_FILE_MACHINE_ARM64
. Этот параметр используется по умолчанию.- ARM64EC — устанавливает тип машины на
IMAGE_FILE_MACHINE_ARM64EC
.
-noesc
-noe
Игнорировать экранированные специальные символы в стиле C, такие как\n
или\t
.
-nologo
Подавить баннер авторских прав.
-nowarn
-now
Отключить все предупреждающие сообщения.
-o
объектный_файл
Укажите имя объектного (выходного) файла. Параметр-o
является необязательным; вместо этого вы можете указать имя объектного файла в качестве последнего элемента командной строки.
-oldit
Доступно только в Armasm . Создавайте ИТ-блоки в стиле ARMv7. По умолчанию генерируются IT-блоки, совместимые с ARMv8.
- предопределить
директива
-pd
директива
Укажите директиву SETA, SETL или SETS для предварительного определения символа.
Пример:armasm.exe -predefine "COUNT SETA 150" source.asm
Дополнительные сведения см. в Справочном руководстве по компилятору ARM.
-sourcelink:
sourcelink_filename
sourcelink_filename указывает файл конфигурации в формате JSON, который содержит простое сопоставление путей локальных файлов с URL-адресами исходных файлов для отображения в отладчике. Дополнительные сведения о формате этого файла см. в разделе Схема исходной ссылки JSON. Source Link — это система, не зависящая от языка и системы управления исходным кодом, которая обеспечивает отладку исходного кода для двоичных файлов. Source Link поддерживается для собственных двоичных файлов, начиная с Visual Studio 2017 версии 15.8. Общие сведения об исходной ссылке см. в разделе Исходная ссылка. Сведения о том, как использовать Source Link в ваших проектах и как создать файл SourceLink как часть вашего проекта, см. в разделе Использование Source Link.
-via
имя файла
Чтение дополнительных аргументов командной строки из имя файла .исходный_файл
Имя исходного файла.object_file
Последний элемент командной строки может указывать имя объектного (выходного) файла. Если он опущен и не указана опция-o
, ассемблер добавляет.obj
к базовому имени 9.0019 source_file для создания объектного файла.В следующем примере показано, как использовать armasm в типичном сценарии. Во-первых, используйте armasm для создания исходного файла на языке ассемблера (.