Большинство команд прямой адресации всего двумя байтами способны обращаться к любым первым 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) |