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