1) Регистровый метод адресации используется для указания на операнды, расположенные в регистре. Если в команде содержится имя регистра (R0, R1, R2, …, R7,А,В), то такая команда принадлежит регистровому методу адресации.
Рассмотрим команды с этим методом адресации:
Команды пересылки:
Формат команд пересылки- MOV <приемник>, <источник>
MOV A, Rn;(Rn) → A
где Rn – регистры R0, R1, R2, …, R7.
MOV Rn, A;A → Rn
MOV Rn, A;A → Rn
ХСН А, Rn;А ↔ Rn
Примеры:
MOV R3, A;A → R3
ХСН А, R5;А ↔ R5
Команды сложения:
ADD A, Rn;A + Rn→ A,
где Rn – регистры R0, R1, R2, …, R7.
ADDC A, Rn;A + Rn +C→A,
Где C – бит заёма /переноса.
Примеры:
ADD A, R2;A + R2→ A;
Команды вычитания:
SUBB A, Rn; A - Rn - C →A
Примеры:
SUBB A, R5; A - R5 - C → A,
Команды умножения и деления:
MUL AB; A * B→ BA,
В – старший байт, А – младший байт результата
DIV AB; A / B→A.B,
В – остаток, который не делится нацело (не десятичная дробь), А – целая часть результата.
Отметьте, что эти команды в качестве операндов используют только регистры А и В
Команды инкремента и декремента:
INC Rn; Rn + 1 → Rn,
DEC Rn; Rn - 1→ Rn.
Примеры:
INC R1; R1 + 1→ R1,
DEC R0;R0 - 1 → R0.
2) Прямая байтовая адресация используется для обращения к ячейкам памяти или к регистрам специальных функций. Если в регистре используется прямой адрес ячейки памяти или регистра специальной функции, то такая адресация называется прямой байтовой адресацией.
Рассмотрим команды с этим методом адресации:
Команды пересылки:
MOV Rn, ad; (ad) → Rn
где (ad) – адрес ячейки (однобайтный).
MOV ad, Rn;Rn → (ad)
MOV A, ad;(ad)→ A
MOV ad, A;A → (ad)
MOV add, ads;(ads) → (add)
ХСН А, ad;А ↔ (ad)
Примеры:
MOV 2FH, R2;R2 → (2FH)
Команды сложения:
ADD A, ad; A + (ad) → A,
где (ad) – адрес ячейки (однобайтный).
ADDC A, ad;A + (ad)+C → A,
Пример:
ADD A, 20H;A + (20H) → A;
Команда вычитания:
SUBB A, ad;A - (ad) - C → A.
Команды инкремента и декремента:
INC ad;(ad) + 1→ (ad),
DEC ad;(ad) - 1→ (ad).
3) Прямая побитовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках памяти с адресами от 20Н до 2FH и к отдельно адресуемым битам регистров специальных функций.
Рассмотрим команды с этим методом адресации:
CLR bit;bit = 0,
где bit – однобайтный адрес бита.
SETB bit;bit = 1
MOV C, bit;(bit) → (С)
MOV bit, C;(С) → (bit)
Примеры:
CLR 05H; (05H) = 0
SETB 10H; (10H) = 1.
4) Непосредственная адресация использует константы, которые явно указаны в команде. Признак константы в команде- значёк #.
Рассмотрим команды с этим методом адресации:
Команда пересылки однобайтного числа:
MOV A, #d8;d8 → A
где #d8- однобайтная константа,
MOV Rn,#d8; d8→ Rn
MOV ad, #d8;d8 → (ad)
Пример:
MOV A, #34H;34H → A
Команда пересылки двухбайтного числа:
MOV DPTR, #d16; d16 → (DPTR),
где #d16- двухбайтная константа, DPTR- 16-разрядный регистр – указатель данных.
Пример:
MOV DPTR, #2100H; 2100H →(DPTR)
Команды сложения:
ADD A, #d8; A + d8 →A,
# - признак константы; d8 – однобайтное число.
Пример:
ADD A, #15Н; A + 15Н → A
ADDC A, #d8;A + #d8 + (C) → A
Команда вычитания:
SUBB A, #d8; A – d8 - C → A
Пример:
SUBB A, #3DH; A - 3DH - C → A
5) Косвенно – регистровая адресация используется для обращения к ячейкам памяти ОЗУ, адрес которых указан в регистре – указателе. Как правило, этими регистрами – указателями являются R0 и R1.
Рассмотрим команды с этим методом адресации:
Команда пересылки:
MOV A, @Ri;((Ri)) → A,
где @Ri- это содержимое ячейки памяти, адрес которой находится в регистре Ri(R0 или R1)
MOV ad, @Ri;((Ri)) → (ad)
MOV @Ri, A;А → ((Ri))
MOV @Ri, ad;(ad) → ((Ri))
MOV @Ri, #d8;d8 → ((Ri))
ХСН А, @Ri;А ↔ ((Ri))
ХСНD А, @Ri;(А 0-3) ↔ ((Ri)0-3)
Обмен младшей тетроды аккумулятора с младшей тетрадой байта косвенно адресуемой ячейки.
Пример:
MOV A, @R1;((R1)) → A,
Команда пересылки с участием внешних ячеек памяти:
Для обращения ко внешним ячейкам памяти используется 16-разрядный регистр – указатель данных DPTR.Этот регистр может быть использован для обращения к любой ячейке памяти в адресном пространстве до 64 килобайт.
MOVX A, @DPTR; ((DPTR)) →A
MOVX @DPTR, A; A → ((DPTR))
Команды сложения:
ADD A, @Ri; A +((Ri)) →A,
где @Ri- это содержимое ячейки памяти, адрес которой находится в регистре Ri(R0 или R1)
ADDC A, @Ri; A + ((Ri)) + C→ A
Пример:
ADD A, @R1; A + ((R1)) → A
Команда вычитания:
SUBB A, @Ri; A –((Ri)) - C→ A
Пример:
SUBB A, @R1; A – ((R1)) - C →A
Команды инкремента и декремента:
INC @Ri;(Ri) + 1 → (Ri)
DEC @Ri;Ri – 1 → (Ri)
6) Косвенная адресация по сумме базового и индексного регистров очень похожа на косвенно – регистровую адресацию. При этом адрес получается по сумме базового и индексного регистров. Любой байт памяти может быть выбран по сумме содержимого DPTR или счётчика команд PC + содержимое аккумулятора.
MOVC A, @A + DPTR;((A)+ (DPTR)) → A
MOVC A, @A + PC;((A)+ (PC)) → A
Рассмотрим пример решения задания с применением команд с различыми методами адресации:
Задание1: Решить математическое выражение без использования косвенно-регистровой адресации(Листинг решения приведён ниже)
[(20H)*10H – (21H)/07H] → (22H)
ORG 0
MOV A, 20H; (20H) → A
MOV B,#10H; 10H→ B
MUL AB; AB→ BA
MOV R0, A; A→ R0
MOV A, 21H; (21H) →A
MOV B, #07H; 07H→ B
DIV AB; A / B→A.B
MOV R1, A; A→R1
MOV A, R0; R0 → A
CLR C; C = 0
SUBB A, R1; A – R1 - C→ A
MOV 22H, A; A→(22H)
L1: JMP L1;переход на метку L1(зацикливание на этом месте)
END
Порядок отладки программ рассмотрен в п.п. 6 этих методических указаний.
Задание2: Решть математическое выражение с использования косвенно-регистровой адресации.(Листинг решения приведён ниже)
[(20H)*10H – (21H)/07H] → (22H)
ORG 0
MOV R0, #20H; 20H→ R0
MOV A, @ R0; ((R0)) → A
MOV B,#10H; 10H→ B
MUL AB; A*B→ BA
MOV R1, A; A → R1
INC R0; R0 + 1→ R0
MOV A, @R0; ((R0)) →A
MOV B, #07H; 07H→ B
DIV AB; A / B→ A.B
MOV R2, A; A→ R2
MOV A, R1; R1→A
CLR C; C = 0
SUBB A, R2; A – R2 - C→ A
INC R0; R0 + 1 →R0
MOV @R0, A; A→ ((R0))
L1: JMP L1;переход на метку L1(зацикливание на этом месте)
END
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
1) Логическое «И», логическое умножение, «/\»
Принцип операции: если будет хотя-бы один 0, то и результат будет 0. Этот принцип иллюстрирует следующий пример из электротехники:
X1 X2 Y
При приложенном напряжении ток приходит в точку Y, если включены (включены –1, выключены -0) все выключатели.
Далее приводится таблица истинности для этой операции:
X1 | X2 | Y |
Далее приведены команды операции логическое умножение с различными методами адресации:
1. Регистровый метод:
ANL A, Rn; A /\ Rn →A
2. Непосредственная адресация:
ANL A, #d8; A /\ d8→ A
3. Прямая адресация
ANL A, ad; A /\ (ad) →A
ANL ad, A; (ad) /\ A→(ad)
ANL ad, #d8; (ad) /\ d8→ (ad)
4. Косвенно – регистровая адресация:
ANL A, @Ri; A /\ ((Ri)) → A
5. Прямая битовая адресация:
ANL C, bit;(С) /\ (bit) → (С)
ANL C, /bit;(С) /\ (bit) → (С)
Операции логического умножения используют для маскирования информации, а также сброса определённых битов в регистрах, ячейках памяти, портах.
Анализ состояния младшего бита
X | X | X | X | X | X | X | X |
A(аккумулятор)
Маска с «1» в младшем бите
_________________________________________
X |