Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
20110319_Лабораторная работа№1.doc
Скачиваний:
8
Добавлен:
14.11.2019
Размер:
175.1 Кб
Скачать

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

  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 .

  1. Прямая байтовая адресация используется для обращения к ячейкам памяти или к регистрам специальных функций. Если в регистре используется прямой адрес ячейки памяти или регистра специальной функции, то такая адресация называется прямой байтовой адресацией.

Рассмотрим команды с этим методом адресации:

Команды пересылки:

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

Порядок отладки программ

Задание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