
Система команд мікропроцесора кр 580 ик 80.
Дані в МП представляють в виді 8-розрядних (1 байт) кодів, які можуть мати стан 1 або 0. Для ідентифікації окремих розрядів в байті вони нумеруються від D0 до D7 і рахуються зправа наліво. Біт D0 відповідає молодшому розряду, D7 – старшому розряду. Для цілих чисел можна використовувати і двохбайтне і багатобайтне представлення.
Формати команд завжди можуть бути 1, 2 і 3-байтні (див. рис. 1).
D7 |
|
|
|
|
|
|
D0 |
(а)
D7 |
|
|
|
|
|
|
D0 |
D7 |
|
|
|
|
|
|
D0 |
(б)
D7 |
|
|
|
|
|
|
D0 |
D7 |
|
|
|
|
|
|
D0 |
D7 |
|
|
|
|
|
|
D0 |
(в)
Рис. 1. Формати команд
а) однобайтних; б) двобайтних; в) трьохбайтних.
S |
Z |
0 |
C1 |
0 |
P |
1 |
C |
Рис. 2. Формати слова-стану програми.
У стековій пам’яті можна зберігати двобайтні слова переписані з пар ВС, DE, HL чи регістру PSW слова стану МП.
В першому байті команди завжди записується код операції.
Для керування процесом виконання програми використовується слово-стан-програми, формат якого показаний на рис.2.
Старший байт В1 слова-стану представляє вміст акумулятора, а молодший містить прапорці регістру ознак, які визначаються результатом виконання арифметичних і логічних операцій. Встановлення прапорців регістру проводиться при виконанні наступних умов: прапорець знаку S, якщо знаковий біт результату операції рівний 1- число від’ємне, інакше зкидається; прапорець нуля Z, якщо результат операції дорівнює “0”, то Z=1, інакше зкидається; прапорець допоміжного переносу АС при наявності переносу з третього розряду акумулятора в четвертий АС=1, інакше зкидається; прапорець парності Р, якщо результат містить парне число одиниць в акумуляторі, то Р=1, інакше зкидається; прапорець переносу CY при наявності переносу (при додаванні) або позичці (при відніманні) з старшого розряду результату CY=1, інакше зкидається.
В МП використовуються 5 способів адресації даних:
пряма адресація – адреса М комірки пам’яті де розміщується операнд, вказується в другому (молодша частина адреси) і в третьому (старша частина адреси) байтах команди;
регістрова адресація – в команді задається адреса оперативного регістру, або пари регістрів, де знаходяться відповідно 8 або 16-бітовий операнд;
регістрова “неявна” – адреса М комірки пам’яті, де розміщений операнд, визначається вмістом першого регістру, явно або неявно вказаного в команді; при цьому старший байт адреси знаходиться в першому регістрі пари, а молодший в другому;
безпосередня адресація – операнд знаходиться в команді: для двохбайтних команд в другому байті, для трьохбайтних в другому молодша частина операнду і в третьому старша частина операнду;
стекова адресація – адрес комірки пам’яті, яка містить операнд, що знаходиться в вказівнику стеку.
По функціональних ознаках команди МП діляться на 5 груп:
-
команди передачі даних з регістру в регістр або пам’ять і з пам’яті в регістр;
-
арифметичні команди: додавання, віднімання, інкременту, декременту;
-
логічні команди І, АБО, виключне АБО, порівняння, зсув, інвертування;
-
команди керування програмою і стекові (команди переходів)
-
команди керування станом процесора і вводу/виводу.
Система команд включає 111 операції [1].
Розглянемо окремо по групах команди МП.
Команди передачі (пересилання) даних забезпечують двохсторонній обмін інформацією між зовнішньою пам’яттю і блоком регістрів загального призначення (РЗП), або між різними регістрами цього блоку. Група команд містить такі команди:
-
пересилки байту даних MOV між регістрами В, С, Д, Е, Н, L без зміни вмісту регістра-джерела, або між цими регістрами і пам’яттю;
-
безпосереднього завантаження РЗП, або комірок пам’яті MVI;
-
прямого завантаження акумулятора – LDA, або по адресі в парі регістрів ВС, ДЕ – LDAX;
-
прямого запам’ятовування вмісту акумулятора - STA, або по адресі в парі регістрів ВС, ДЕ – STAX;
-
команди загрузки регістрів - LHLD, безпосередньої загрузки регістрових пар - LXI, загрузки вказівника стеку - SPHL, обміну між регістрами - XCHG, XSTHL.
Команди арифметичних операцій дозволяють виконувати операції додавання і віднімання 8-бітових операндів. В цій групі команд адресується тільки один операнд, другий операнд знаходиться в акумуляторі, при цьому результат додавання загружають в акумулятор, а ознаки встановлюються в регістрі ознак. Операції множення і ділення, а також операції з другими форматами даних реалізуються підпрограмами. Група арифметичних команд містить такі команди:
-
додавання вмісту акумулятора з вмістом РЗП – АDD або комірки пам’яті М – ADDM, або з другим байтом команди ADI;
-
додавання з переносом – ADC;
-
віднімання з вмісту акумулятора байту даних - SUB, SUI;
-
віднімання з позичкою SBB, SBІ, що дозволяє реалізувати віднімання багатобайтових чисел;
-
додавання двохбайтових слів – DAD; при цьому сумується вміст регістру HL з вмістом регістрових пар ВС, DE, а результат заноситься в регістр НL і встановлюється біт переносу;
-
інкременту (збільшення)/декременту (зменшення) на одиницю вмісту РЗП – INR/DCR; або регістрової пари ВС, ДЕ, HL, ВС – INX/DCX;
-
команду десяткової корекції акумулятора – DAA.
Команди логічних операцій виконують операції нульової алгебри. При цьому вкзані команди адресують тільки один операнд, другий операнд знаходиться в акумуляторі, туди ж загружають результат операції. По результату операції модифікуються стани всіх признаків регістру, крім признаку переносу С, який завжди зкидується в “0”. Група логічних команд містить такі команди:
-
операції кон’юкції (логічного множення І) над вмістом акумулятора і вмістом одного з РЗП – ANA, або другим байтом команди - ANI; ці команди можна використати для перевірки біта-слова в акумуляторі з допомогою другого слова-маски;
-
операції диз’юнції (логічного додавання АБО) над вмістом акумулятора і вмістом одного з РЗП – ORA, або другим байтом команди – ORI. Ці команди використовують для встановлення визначених бітів слів в акумуляторі з допомогою другого слова-маски, а також для синтезу нового слова з поля других слів;
-
операція виключне АБО (заперечення рівнозначності, сума по модулю 2) над вмістом акумулятора і вмістом одного з РЗП – XRA, або другим байтом команди – XRI. Ці команди використовують для інвертування визначених слів-бітів з допомогою слова-маски, а також для порівняння слів на абсолютну рівність;
-
операція інвертування вмісту акумулятора СМА, або ознаки переносу С – СМС, встановлення переносу С = 1 STC;
-
операції арифметичного порівняння вмісту акумулятора і вмісту одного з РЗП – СМР, або другого байта команди – СРІ, які з вмісту акумулятора віднімають значення адресованого операнду, але не змінюють вміст акумулятора;
-
операції циклічного зсуву вмісту акумулятора на один розряд вліво (вправо) з заповненням ознаки переносу RLC (RRC), або з включенням ознаки переносу в коло зсуву RAL (RAR).
Команди керування (галуження) програмою (команди переходів)дозволяють змінити звичайну послідовність виконання команд програми в залежності від результатів обробки даних. Команди керування програмою (переходів) складаються з трьох байтів. В другому і третьому байтах міститься адреса, по якій вибирається наступна команда другої частини програми. Команди керування програмою складаються з команд безумовного і умовного переходів і використовуються для створення галуження і циклів в програмі.
До команд безумовного переходу відносяться:
-
команда переходу - JMP без повернення, по якій в лічильник команд заноситься нова адреса програми, яка міститься в другому і третьому байтах команди;
-
команда виклику підпрограми – CALL з поверненням, по якій вміст лічильника команд, тобто адрес наступної команди (адреса повернення) зберігається в стеку, а в лічильник команд заноситься адреса переходу ( адреса першої команди підпрограми), при цьому після виконання підпрограми по її останній команді – RET відновлюється вміст лічильника команд, тобто адреса повернення з стеку, адресована вказівником стеку.
Команди стеку забезпечують розміщення в стековій області пам’яті вмісту РЗП при виконанні команд керування програмою і при обробці переривання. До команд стеку відносяться команди:
-
вводу в стек PUSH;
-
виводу з стеку РОР, при цьому вміст вказівника стеку збільшується на одиницю.
Команди керування МП застосовуються для задання режимів роботи МП. Вони містять:
-
команду зупинки – HLT, яка забезпечує зупинку виконання програми і переводить МП в стан зупинки;
-
команди дозволу (заборони) переривання – ЕІ (DI), яка встановлює внутрішній тригер дозволу переривань в стан І (“0”), коли МП реагує (не реагує) на запити переривань, які поступають від зовнішніх пристроїв, ініціюючих обмін даних;
-
команду повторного запуску, тобто переходу на підпрограму обслуговування переривань – RST;
-
холосту команду – NOP, яка не проводить ніяких дій, крім збільшення лічильника команд для переходу до наступної команди і використовується для створення програмних циклів затримки, в яких МП генерує сигнал програмуючої діяльності;
-
команди вводу/виводу – IN/OUT, другий байт цих команд вказує адресу регістрів вводу/виводу, а одержувати дані або бути джерелом даних може тільки акумулятор.