Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Коды операций команд (в порядке возрастания)




 

Таблица 4 – Коды операций команд

00 NOP 40 MOV B,B 80 ADD B C0 RNZ
01 LXI B,XXXX 41 MOV B,C 81 ADD C C1 POP B
02 STAX B 42 MOV B,D 82 ADD D C2 JNZ XXXX
03 INX B 43 MOV B,E 83 ADD E C3 JMP XXXX
04 INR B 44 MOV B,H 84 ADD H C4 CNZ XXXX
05 DCR B 45 MOV B,L 85 ADD L C5 PUSH B
06 MVI B,XX 46 MOV B,M 86 ADD M C6 ADI XX
07 RLC 47 MOV B,A 87 ADD A C7 RST 0
08 - - - - 48 MOV C,B 88 ADC B C8 RZ
09 DAD B 49 MOV C,C 89 ADC C C9 RET
0A LDAX B 4A MOV C,D 8A ADC D CA JZ XXXX
0B DCX B 4B MOV C,E 8B ADC E CB - - - -
0C INR C 4C MOV C,H 8C ADC H CC CZ XXXX
0D DCR C 4D MOV C,L 8D ADC L CD CALL XXXX
0E MVI C,XX 4E MOV C,M 8E ADC M CE ACI XX
0F RRC 4F MOV C,A 8F ADC A CF RST 1
10 - - - - 50 MOV D,B 90 SUB B D0 RNC
11 LXI D,XXXX 51 MOV D,C 91 SUB C D1 POP D
12 STAX D 52 MOV D,D 92 SUB D D2 JNC XXXX
13 INX D 53 MOV D,E 93 SUB E D3 OUT XXXX
14 INR D 54 MOV D,H 94 SUB H D4 CNC XXXX
15 DCR D 55 MOV D,L 95 SUB L D5 PUSH D
16 MVI D,XX 56 MOV D,M 96 SUB M D6 SUI XX
17 RAL 57 MOV D,A 97 SUB A D7 RST 2
18 - - - - 58 MOV E,B 98 SBB B D8 RC
19 DAD D 59 MOV E,C 99 SBB C D9 - - - -
1A LDAX D 5A MOV E,D 9A SBB D DA JC XXXX
1B DCX D 5B MOV E,E 9B SBB E DB IN XX
1C INR E 5C MOV E,H 9C SBB H DC CC XXXX
1D DCR E 5D MOV E,L 9D SBB L DD - - - -
1E MVI E,XX 5E MOV E,M 9E SBB M DE SBI XX
1F RAR 5F MOV E,A 9F SBB A DF RST 3
20 - - - - 60 MOV H,B A0 ANA B E0 RPO
21 LXI H,XXXX 61 MOV H,C A1 ANA C E1 POP H
22 SHLD XXXX 62 MOV H,D A2 ANA D E2 JPO XXXX
23 INX H 63 MOV H,E A3 ANA E E3 XTHL
24 INR H 64 MOV H,H A4 ANA H E4 CPO XXXX
25 DCR H 65 MOV H,L A5 ANA L E5 PUSH H
26 MVI H,XX 66 MOV H,M A6 ANA M E6 ANI XX
27 DAA 67 MOV H,A A7 ANA A E7 RST 4
28 - - - - 68 MOV L,B A8 XRA B E8 RPE
29 DAD H 69 MOV L,C A9 XRA C E9 PCHL
2A LHLD XXXX 6A MOV L,D AA XRA D EA JPE XXXX
2B DCX H 6B MOV L,E AB XRA E EB XCHG
2C INR L 6C MOV L,H AC XRA H EC CPE XXXX
2D DCR L 6D MOV L,L AD XRA L ED - - - -
2E MVI L,XX 6E MOV L,M AE XRA M EE XRI XX
2F CMA 6F MOV L,A AF XRA A EF RST 5
30 - - - - 70 MOV M,B B0 ORA B F0 RP
31 LXI SP,ХХХХ 71 MOV M,C B1 ORA C F1 POP PSW
32 STA XXXX 72 MOV M,D B2 ORA D F2 JP XXXX
33 INX SP 73 MOV M,E B3 ORA E F3 DI
34 INR M 74 MOV M,H B4 ORA H F4 CP XXXX
35 DCR M 75 MOV M,L B5 ORA L F5 PUSH PSW
36 MVI M,XX 76 HLT B6 ORA M F6 ORI XX
37 STC 77 MOV M,A B7 ORA A F7 RST 6
38 - - - - 78 MOV A,B B8 CMP B F8 RM
39 DAD SP 79 MOV A,C B9 CMP C F9 SPHL
3A LHLD XXXX 7A MOV A,D BA CMP D FA JM XXXX
3B DCX SP 7B MOV A,E BB CMP E FB EI
3C INR A 7C MOV A,H BC CMP H FC CM XXXX
3D DCR A 7D MOV A,L BD CMP L FD - - - -
3E MVI A,XX 7E MOV A,M BE CMP M FE CPI XX
3F CMC 7F MOV A,A BF CMP A FF RST 7

 

Условные обозначения:

ХХХХ – адрес ячейки памяти или данные

XX – адрес порта или данные

- - - - – код операции не используется

 

 

2 Некоторые приемы программирования в кодах

 

Ниже будут рассмотрены фрагменты программ, реализующие наиболее распространенные, часто встречающиеся приемы обработки данных. Хотя речь идет о программах в машинных кодах, мы будем пользоваться записью команд в мнемоническом изображении, принятом на языке ассемблера для данного типа микропроцессора. Кроме мнемоники кодов операций для упрощения записи вместо конкретных числовых адресов команд мы воспользуемся метками (также принятыми в языке ассемблера).

 

Перемещение данных

 

В системе машинных команд (раздел 1) отсутствуют команды перемещения байта непосредственно из одной ячейки памяти в другую. Такую пересылку приходится реализовывать несколькими командами. Усложним эту задачу условием – поменять местами содержимое двух различных ячеек памяти. Для определенности адреса обменивающихся ячеек возьмем равными 5000H и 5001H. (Буква Н здесь и далее обозначает шестнадцатеричную систему счисления, принятую для нумерации ячеек).

LXI H, 5000H; засылка адреса первого числа в пару HL
LXI B, 5001H; засылка адреса второго числа в пару BC
MOV D,M; копирование первого числа в регистр D
LDAX B; копирование второго числа в аккумулятор
MOV M,A; перемещение второго числа в ячейку 5000H
MOV A,D; перезапись первого числа в аккумулятор
STAX B; ... запись содержимого аккумулятора в ячейку 5001H  

 

Организация цикла

 

Наиболее рациональный способ организации цикла (многократного повтора одного участка программы) – это создание в одном из регистров процессов счетчика, работающего на вычитание

Перед «телом» цикла счетчик загружается константой числа шагов, а в конце «тела» производится вычитание единицы (дек­ремент) и проверка флага нулевого результата ко­мандой условного перехода. Пусть требуется просуммировать массив из 10 целых однобайтных чисел без знака записанных с адреса 5100Н.

MVI B, 0AH; начальная загрузка счетчика В числом 10

ХRА А; «очистка» (обнуление) аккумулятора

LXI Н, 5100Н; засылка в пару НL адреса 1-го числа

М1: АDD М; A + ячейка [HL] → A

INX H; продвижение адреса HL + 1 → HL

DCR B; уменьшение содержимого счетчика

JNZ M1; переход к метке М1 по флагу Z=0

HLT; останов

 

Использование подпрограмм

 

Если в какой-либо программе требуется многократно и на разных ее участках выполнить одни и те же действия, целесообразно оформить их в виде подпрограммы. Пусть необходимо просуммировать соответс­твующие элементы двух массивов из пяти двухбайтных целых чисел без знака. (В младшем байте содержатся младшие разряда числа). Начальные адреса массивов слагаемых 5000Н и 5001Н, а массив сумм располагается с ячейки 5300Н.

 

Подпрограмма:

SB: PUSH PSW; сохранение в стеке содержимого аккумулятора и флагов

LDАХ В; загрузка в А младшего байта 1-го слагаемого (адрес в паре ВС)

АDD М; сложение А с младшим байтом 2-го слагаемого (адрес в паре

;НL)

SТАХ В; запись результата в ОЗУ по адресу из пары DЕ

INХ В; переход по адресам

INХ Н; к старшим частям слагаемых

INX D; и результата

STAХ D; загрузка в А старшего байта второго слагаемого

АDС М; сложение старших байтов с учетом флага переноса СY

SТАХ D; запись старшего байта результата

РОР РSW; восстановление аккумулятора и флагов

RET; возврат

 

Основная программа:

LXI SP,8000Н; создание стека программы

LXI В,5000Н; адрес массива 1-х слагаемых в пару ВС

LXI H,5100Н; адрес массива 2-х слагаемых в пару НL

LXI D,5300Н; адрес массива результатов в пару DE

МVI А,05; создание счетчика в А на 5 шагов

М1: САLL SВ; вызов подпрограммы сложения

INX В; продвижение адресов

INX H; на следующую пару слагаемых

INX D; и ячейку результата

DCR А; уменьшение счётчика на 1

JNZ M1; возврат на М1 до исчерпания счетчика

HLT; останов (рекомендуется выход в Монитор JMP 40h)

 

Следует обратить внимание в приведенном выше примере на использование стековой памяти для временного сохранения текущего значения счетчика, зарезервированного в аккумуляторе, на период работы подпрограммы. Данный приём используется часто для сохранения значения и других регистров общего назначения при их "нехватке" по ходу реализации сложного алгоритма.

 





Поделиться с друзьями:


Дата добавления: 2015-10-27; Мы поможем в написании ваших работ!; просмотров: 517 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2313 - | 2041 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.