Большинство команд прямой адресации всего двумя байтами способны обращаться к любым первым 256 адресам памяти. Первый байт является операционным кодом и второй байт является младшим байтом адреса операнда. Значение старшего байта действительного адреса принимается равным $00 и не включается в байты команды, что сокращает пространство памяти программ и время выполнения команды. Таким образом прямая адресация ограничивается использованием области памяти с адресами $0000 - $00FF, называемой прямой страницей, или страницей 0.
Команды прямой адресации занимают в пространстве памяти программ на один байт меньше, чем эквивалентные команды расширенной адресации. За счет исключения дополнительного обращения к памяти время выполнения команды сокращается на один цикл - что дает существенную экономию в случае длинных программ. Большинство микроконтроллеров занимают под RAM не всю область $0000 - $00FF, что позволяет разработчикам использовать свободные ячейки этой области для размещения наиболее часто используемых переменных, что также сокращает время выполнения команд.
Команды BRSET и BRCLR являются трехбайтовыми командами, использующими прямую адресацию для обращения к операндам и относительную адресацию для определения пункта назначения перехода.
Команды CPHX, STHX и LDHX являются двухбайтовыми командами, выбирающими 16-разрядные операнды. Старшие байты выбираются прямой адресацией; младшие байты выбираются прямой адресацией + 1
В таблице 5 перечислены команды использующие прямую адресацию.
Нижеследующий пример кодов содержит две команды прямой адресации: STHX (сохранить H:X в памяти) и CPHX (сравнить H:X с памятью). Первая команда (STHX) инициализирует установку TEMP ячейки RAM в нулевое состояние и вторая команда (STHX) загружает в ячейку TEMP состояние $5555. Команда CPHX сравнивает содержимое H:X с значением RAM:(RAM + 1). В данном примере RAM:(RAM + 1) = TEMP = $50:$51 = $5555.
Таблица 5. Команды прямой адресации
| Мнемоника |
Команда |
| ADC |
Сложить память и перенос с аккумулятором (Add Memory and Carry to Accumulator) |
| ADD |
Сложить память с аккумулятором (Add Memory and Accumulator) |
| AND |
Выполнить логическое AND памяти с аккумулятором (Logical AND of Memory and Accumulator) |
| ASL* |
Арифметически сдвинуть память влево (Arithmetic Shift Left Memory) |
| ASR |
Арифметически сдвинуть память вправо (Arithmetic Shift Right Memory) |
| BCLR |
Очистить бит в памяти (Clear Bit in Memory) |
| BIT |
Поразрядно сравнить память с аккумулятором (Bit Test Memory with Accumulator) |
| BRCLR |
Перейти, если бит n памяти очищен (Branch if Bit n in Memory Clear) |
| BRSET |
Перейти, если бит n памяти установлен (Branch if Bit n in Memory Set) |
| BSET |
Установить бит в памяти (Set Bit in Memory) |
| CBEQ |
Сравнить содержимое прямого адреса с аккумулятором и перейти, если равно (Compare Direct with Accumulator and Branch if Equal) |
| CLR |
Очистить память (Clear Memory) |
| CMP |
Сравнить аккумулятор с памятью (Compare Accumulator with Memory) |
| COM |
Выполнить дополнение до двух содержимого памяти (Complement Memory) |
| CPHX |
Сравнить индексный регистр с памятью (Compare Index Register (H:X) with Memory) |
| CPX |
Сравнить младший байт индексного регистра с памятью (Compare X (Index Register Low) with Memory) |
| DBNZ |
Декрементировать память и перейти, если не равно ($00) (Decrement Memory and Branch if Not Equal ($00)) |
| DEC |
Декрементировать память (Decrement Memory) |
| EOR |
Выполнить исключающее OR памяти и аккумулятора (Exclusive OR Memory with Accumulator) |
| INC |
Инкрементировать память (Increment Memory) |
| JMP |
Выполнить переход (Jump) |
| JSR |
Выполнить переход в подпрограмму (Jump to Subroutine) |
| LDA |
Загрузить аккумулятор содержимым памяти (Load Accumulator from Memory) |
| LDHX |
Загрузить индексный регистр содержимым памяти (Load Index Register (H:X) from Memory) |
| LDX |
Загрузить младший байт индексного регистра содержимым памяти (Load X (Index Register Low) from Memory) |
| LSL* |
Выполнить логический сдвиг памяти влево (Logical Shift Left Memory) |
| LSR |
Выполнить логический сдвиг памяти вправо (Logical Shift Right Memory) |
| NEG |
Выполнить дополнение до двух содержимого памяти (Negate Memory) |
| ORA |
Выполнить включающее OR содержимого аккумулятора и памяти (Inclusive OR Accumulator and Memory) |
| ROL |
Выполнить вращение памяти влево через перенос (Rotate Memory Left through Carry) |
| ROR |
Выполнить вращение памяти вправо через перенос (Rotate Memory Right through Carry) |
| SBC |
Вычесть память и перенос из аккумулятора (Subtract Memory and Carry from Accumulator) |
| STA |
Сохранить аккумулятор в памяти (Store Accumulator in Memory) |
| STHX |
Сохранить индексный регистр в памяти (Store Index Register (H:X) in Memory) |
| STX |
Сохранить младший байт индексного регистра в памяти (Store X (Index Register Low) in Memory) |
| SUB |
Вычесть память из аккумулятора (Subtract Memory from Accumulator) |
| TST |
Проверить память на отрицательное значение или ноль (Test Memory for Negative or Zero) |