Методы адресации, команды пересылки и арифметических операций
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 |