- •Шина керування (Control bus)
- •1.Організація однокристальних еом
- •1.3 Організація вводу/виводу інформації
- •1.4. Блок керування
- •1.5. Логічна схема умовних переходів
- •1.6.Режим преривання
- •1.7.Таймер/лічильник
- •2.Повноекраний налагоджувач ассемблерних програм для однокристальних еом кр1816ве48
- •2.2.Команди налагоджувача.
- •2.3.Повноекранне редагування.
- •2.4.Режим Ассемблера.
- •2.5. Робота з точками преривання.
- •3.Система команд оеом кр1816
- •3.1.Група команд пересилки данних
- •Рпзп Програм і
- •Порт р1
- •Порт р2
- •3.2.Група команд арифметичних та логічних операцій
- •3.3.Група команд вводу-виводу інформації.
- •3.4.Група команд передачі керування.
- •3.5.Група команд операцій з таймером
- •3.6.Група команд керування режимом роботи оеом
- •4.Приклади написання програм для оеом кр1816 ве48
- •4.1. Приклади використання команд передачі данних
- •4.2. Приклади використання команд арифметичних операцій.
- •4.3. Приклади використання команд логічних операцій
- •4.4. Приклади використання команд передачі керування і команд керування режимом оеом
3.2.Група команд арифметичних та логічних операцій
Команди групи арифметичних операцій змінюють стан регістра признаків. Для користувача програмно-доступними являються тільки чотири признаки:-перенос, допоміжний перенос, а також признаки F0 та F1, функціональне призначення яких задається програмістом. Признак F0, крім того, доступний через слово стану пргграми.
ADD A,Rr
Прибавити вміст регiстра в аккумулятор.
Код [6Rr]
0
1 1 0 1 r
r r
Алгоритм (A)(A)+(Rr); r=0-7.
ADD A,#d
Прибавити безпосередній операнд до аккумулятора.
При переносі з третього розряду АЛП триггер признаку допоміжного переносу АС встановлюється в стан “1”, при відсутності- в стан “0”.
При переносі з 7-го розряду АЛП триггер признаку переносу С встановлюється в стан “1”, при відсутності переносу- в стан “0”
Код [03]
0 0 0 0 0 0 1 1
d0
–d7
Алгоритм (A)(A)+d
ADD A,@Rr
Прибавити вміст елемента памэяті до аккумулятора.
Вміст елемента внутрішньої памэяті данних, що адресується робочим регістром Rr складається з вмістом аккумулятора. Результат заноситься в аккумулятор. При переносі з третього розряду АЛП триггер признаку допоміжного переносу АС встановлюється встан “1”, при відсутності- в стан “0”.
При переносі з 7-го розряду АЛП тригер признаку переносу С встановлюється в стан “1”, при відсутності переносу- в стан “0”
ADDC A,Rr
Прибавити признак переносу та вміст регістра до аккумулятора.
Код[7Rr]
0 1 1 1 1 r r r
Алгоритм: (A)(A)+(Rr)+(C); r=0-7.
ADDC A,#d
Прибавити признак переносу та безпосередній операнд до аккумулятора.
Код: [13]
0 0 0 1 0 0 1 1
d0
– d7
Алгоритм (A)(A)+(d)+(C).
ADDC A,@Rr
Прибавити признак переносу та вміст пам’яті до аккумулятора.
Код [70] для R0 та [71] для R1.
0 1 1 1 0 0 0 r
Алгоритм (A)(A)+((Rr))+(C).
DA A
Команда десятичної корекції аккумулятора. По цій команді результат двійко-вого складання двійково-десятичних чисел в аккумуляторі перетворюється в двійково-десятичне число слідуючим шляхом. Якщо число в молодших чоти-рьох розрядах аккумулятора більше девяти, або триггер признаку допоміжного переносу АС встановлюється в стан “1”, то до вмісту аккумулятора прибавля-ється число 6. Якщо після цього число в старших чотирьох розрядах аккуму-лятора більше дев’яти або триггер признаку переносу встановлюється в стан “1”, то до вмісту аккумулятора прибавляється число 6 Н. При переносі з 7-го розряду АЛП триггер признаку переносу С встановлюєтьсяв стан “1”, в против-ному випадку-в “0”.
Код: [57]
0 1 0 1 0 1 1 1
INC A
Інкремент вмісту аккумулятора.
Код [17].
0 0 0 1 0 1 1 1
Алгоритм (A)(A)+1.
INC Rr
Інкремент вмісту регістра.
Код [1Rr].
0 0 0 1 1 r r r
Алгоритм (Rr)(Rr)+1; r=0-1.
INC @Rr
Інкремент вмісту елемента пам’яті.
Код:[10] для R0 i [11] для R1.
0 0 0 1 0 0 0 r
Алгоритм: ((Rr))((Rr)+1; r=0-7.
DEC A
Декркмент вмісту аккумулятора.
Код: [07].
0 0 0 0 0 1 1 1
Алгоритм (A)(A)-1.
DEC Rr
Декремент вмісту регістра.
Код [CRr].
1 1 0 0 1 r r r
Алгоритм (Rr)(Rr)-1; r= 0-7.
RL A
Циклічний здвиг вліво.
Код [E7].
1 1 1 0 0 1 1 1
Алгоритм (An+1)(An); (A0)(A7); n=0-7.
RLC A
Циклічний здвиг вліво через перенос.
Код[F7].
1 1 1 1 0 1 1 1
Алгоритм: (An+1)(An); (A0)(C); (C)(A7); n=0-7.
RR A
Циклічний здвиг вправо.
Код: [77].
0 1 1 1 0 1 1 1
Алгоритм: (An) (An+1); (A7) (A0); n=0-7.
RRC A
Циклічний здвиг вправо через перенос.
Код: [67].
0 1 1 0 0 1 1 1
Алгоритм: (An) (An+1); (A7) (C ); (C ) (A0); n=0-7.
Робота команд здвигу іллюструє схема виконання операцій здвигу, що приводиться на рис.7
A7’
‘ ‘ ‘ ‘ ‘ ‘ A0
R
C
C
A7’
‘ ‘ ‘ ‘ ‘ ‘ A0
R LC
C
A7’
‘ ‘ ‘ ‘ ‘ ‘ A0
R R
C
A7’
‘ ‘ ‘ ‘ ‘ ‘ A0
R RC
Рис.7
SWAP A.
Обміняти тетради в аккумуляторі.
Код: [47].
0 1 0 0 0 1 1 1
Алгоритм: (A4-7) (A0-3);
Приклад: десятичні двійково-кодовані цифри в елементах пам’яті 10 та 31 упакувати в елемент пам’яті 10.
PACK: MOV R0,#10 ; завантажити регістр R0
MOV R1,#31 ; завантажити регістр R1
XCHD A,@R0 ; обміняти біти 0-3 аккумулятора та елемента 10
пам’яті
SWAP A ; обміняти тетради в аккумуляторі
XCHD A,@R1 ; обміняти біти 0-3 аккумулятора і елемента 31 і
пам’яті
MOV @R0,A ; переслати А в елемент 10 пам’яті.
ANL A,Rr
Логічне І аккумулятора з маскою в регістрі.
Код:[5Rr].
0 1 0 1 1 r r r
Алгоритм: (A)(A)(Rr); r=0-7;
ANL A,#d
Логічне І аккумулятора з безпосереднім операндом-маскою.
Код: [53].
0 1 0 1 0 0 1 1
d0
– d7
Алгоритм: (A)(A)d.
ANL A,@Rr
Логічне І аккумулятора з маскою в елементі пам’яті
Код [50] для R0 i [51] для R1.
0 1 0 1 0 0 0 r
Алгоритм (A)(A)((Rr)); r=0-7
Приклад: маска 0816 знаходиться в елементі FF пам’яті. Необхідно виділити з вмісту аккумулятора біт 3.
ANDM: MOV R0,#FFH ; завантаження регiстра R0
ANL A,@R0 ; з елемента 63 пам’яті виймається маска
; 00001000 і виконується кон’юнкція з
; аккумулятором.
ORL A,Rr
Логічна операція АБО аккумулятора з маскою в регістрі
Код: [4Rr]
0 1 0 0 1 r r r
Алгоритм: (A)(A)(Rr).
ORL A,#d
Логічна операція АБО аккумулятора з безпосереднім операндом.
Код: [43].
0 1 0 0 0 0 1 1
d0
–
d7
Алгоритм (A) (A) d.
ORL A,@Rr
Логічна операція АБО аккумулятора з маскою в елементі пам’яті
Код: [40] для R0 i [41] для R1.
0 1 0 0 0 0 0 r
Алгоритм: (A) (A) ((Rr)).
XRL A,Rr
Операція “Виключаюче АБО” аккумулятора з маскою в регістрі
Код: [DRr]
1 1 0 1 1 r r r
Алгоритм: (A) (A) (Rr). r=0-7.
XRL A,#d.
Виключаюче АБО аккумулятора з безпосереднім операндом.
Код:[D3].
1 1 0 1 0 0 1 1
d0
–d7
Алгоритм: (A) (A)d.
XRL A,@Rr.
Операція “Виключаюче АБО” аккумулятора з маскою в елементі пам’яті
Код:[D0] для R0 i [D1] для R1.
1 1 0 1 0 0 0 r
Алгоритм: (A) (A) ((Rr)). r=0-7.
CLR A
Очистити аккумулятор
Код: [27].
0 0 1 0 0 1 1 1
Алгоритм: (A) 0.
CLP A
Інвертувати вміст аккумулятора.
Код: [37]
0 0 1 1 0 1 1 1
Алгоритм: (A) (A’).
CLR C.
Очистит признак переносу.
Код: [97].
1 0 0 1 0 1 1 1
Алгоритм (C) 0.
CPL C.
Інвертувати перенос
Код: [A7].
1 0 1 0 0 1 1 1
Алгоритм: (C) (C’).
CLR F0.
Очистити признак F0.
Код: [85].
1 0 0 0 0 1 0 1
Алгоритм: (F0) 0.
CPL F0
Інвертувати признак F0.
Код: [95].
1 0 0 1 0 1 0 1
Алгоритм: ( F0) ( F0’).
CLR F1
Очистити признак F1.
Код: [A5].
1 0 1 0 0 1 0 1
Алгоритм: (F1) 0.
CPL F1.
Інвертувати признак F1.
Код: [B5].
1 0 1 1 0 1 0 1
Алгоритм: (F1) (F1’).
Приклад: Поточне значення признаку F1 невідомо. Необхідно встановити F1=1.
SETF1: CLR F1 ; встановити F1 в нуль
CPL F1 ; встановити F1 в одиницю.