Методы адресации, команды пересылки и арифметических операций

 

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 +CA ,

Где 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 / BA .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 / BA.B

MOV R1 , A ; AR1

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 ; R1A

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