Непосредственная адресация
В командах непосредственной адресации операнд располагается в байтах, следующих непосредственно за операционным кодом. Байт или байты, следующие за операционным кодом, чаще являются операндами, а не значением адреса. В этом случае действительный адрес команды определяемый знаком # прямо указывает на байт, следующий за операционным кодом. Непосредственное значение ограничивается одним или двумя байтами, в зависимости от размера регистра, связанного с командой. В таблице 4 перечислены команды использующие непосредственную адресацию.
Команды непосредственной адресации, связанные с использованием индексного регистра (H:X), являются трехбайтовыми: один байт - операционный код, два байта содержат непосредственные данные. Нижеследующий пример содержит две непосредственные команды: AIX (сложить непосредственное значение с H:X) и CPHX (сравнить H:X с непосредственным значением). H:X вначале очищается и затем последовательно инкрементируется на 1 до значения $FFFF. По достижении состояния, определяемого CPHX, программа переходит к START и процесс неограниченно повторяется.
Машинный код Метка Операция Операнд Комментарий
5F START CLRX ; X = 0
8C CLRH ; H = 0
AF01 TAG AIX #1 ; (H:X) = (H:X) + 1
65FFFF CPHX #$FFFF ; Сравнение (H:X) с $FFFF
26F9 BNE TAG ; Цикл выполняется до совпадения значений
20F5 BRA START ; Начать сначала
Таблица 4. Команды непосредственной адресации
Мнемоника |
Команда |
ADC |
Сложить непосредственное значение, с переносом, с аккумулятором (Add with Carry Immediate Value to Accumulator) |
ADD |
Сложить непосредственное значение с аккумулятором (Add Immediate Value to Accumulator) |
AIS |
Сложить непосредственное значение, со знаком, с указателем стека (Add Immediate Value (Signed) to Stack Pointer) |
AIX |
Сложить непосредственное значение, со знаком, с индексным регистром (Add Immediate Value (Signed) to Index Register (H:X)) |
AND |
Выполнить логическое AND непосредственного значения с аккумулятором (Logical AND Immediate Value with Accumulator) |
BIT |
Выполнить поразрядное сравнение непосредственного значения с аккумулятором (Bit Test Immediate Value with Accumulator) |
CBEQA |
Сравнить аккумулятор с непосредственным значением и перейти если равно (Compare A with Immediate and Branch if Equal |
CBEQX |
Сравнить младший байт индексного регистра с непосредственным значением и перейти если равно (Compare X (Index Register Low) with Immediate and Branch if Equal) |
CMP |
Сравнить аккумулятор с непосредственным значением (Compare Accumulator with Immediate Value) |
CPHX |
Сравнить индексный регистр с непосредственным значением (Compare Index Register (H:X) with Immediate Value) |
CPX |
Сравнить младший байт индексного регистра с непосредственным значением (Compare X (Index Register Low) with Immediate Value) |
EOR |
Выполнить исключающее OR непосредственного значения с аккумулятором (Exclusive OR Immediate Value with Accumulator) |
LDA |
Загрузить аккумулятор непосредственным значением (Load Accumulator from Immediate Value) |
LDHX |
Загрузить индексный регистр непосредственным значением (Load Index Register (H:X) with Immediate Value) |
LDX |
Загрузить младший байт индексного регистра непосредственным значением (Load X (Index Register Low) from Immediate Value) |
ORA |
Выполнить включающее OR непосредственного значения (Inclusive OR Immediate Value) |
SBC |
Вычесть непосредственное значение с переносом (Subtract with Carry Immediate Value) |
SUB |
Вычесть непосредственное значение (Subtract Immediate Value) |
|