Используемая микропроцессором система команд.




Под командой микропроцессора понимается двоичное слово, заставляющее МП выполнять определённые действия. Длина команды обычно равна 1 байту. Однако для данного типа МП могут использоваться двух- и трёхбайтовые команды, записываемые в регистр команд в течении цикла выбора. В течении следующего за ним цикла выполнения МП дешифрирует команды и генерирует сигналы управления процессором, выполнения предусмотренных данной командой операций. Любая команда должна нести в себе информацию двух видов: указывать заглавными МП, что делать; указывать местоположение обрабатываемых данных. Поэтому команда состоит из двух частей: кода операции (КОП) и адреса. Число команд МП значительно больше, чем число различных кодов операций, так как при формировании команды один и тот же КОП может использоваться при различных способах адресации. Для сокращённой записи названия команды используется её мнемоническое обозначение. В качестве его обычно используются три буквы названия операции, выполняемой команды. Если команда оперирует с числовыми данными или адресами областей памяти, то мнемоническое обозначение команды дополняется цифрами или буквами, указывающими на важные им адреса помещения операндов, мнемоническая запись команд является не только удобной формой представления КОП, но и составной частью команды при использовании языка Ассемблер. Мнемоническое обозначение команд МП КП 580 БМ 80 и соответствующее каждой команде двоичные и шестнадцатеричные коды операций представлены в табл. 1.2, 1.3.

 

Мнемоника Код команды Содержание команды Флажки: CY Z S P AC
       
I. ПЕРЕМЕЩЕНИЕ:
1. Пересылка:
MOV R,r 01RRRrrr R <= r - - - - -
MOV R,M 01RRR110 R <= M(HL) - - - - -
MOV M,r 01110rrr M(HL) <= r - - - - -
MVI R,d 00RRR110 R <= d - - - - -
MVI M,d   M(HL) <= d - - - - -
SPHL F9 SP <= HL - - - - -
2. Загрузка:
LXI RP,dd 00RP0001 RP <= dd - - - - -
LDAX B 0A A <= M(BC) - - - - -
LDAX D 1A A <= M(DE) - - - - -
LDA aa 3A L <= M(aa)  
LHLD aa 2A H <= M(aa+1) - - - - -
3. Запись:
STAX B   M(BC) <= A - - - - -
STAX D   M(DE) <= A - - - - -
STA aa   M(aa) <= A - - - - -
SHLD aa   M(aa) <= L - - - - -
M(aa+1) <= H
4. Обмен:
XCHG EB DE <=> HL - - - - -
XTHL E3 HL <=> SP - - - - -
5. Операция со стеком:
PUSH B C5 M(-SP) <= BC - - - - -
PUSH D D5 M(-SP) <= DE - - - - -
PUSH H E5 M(-SP) <= HL - - - - -
PUSH PSW F5 M(-SP) <= AF - - - - -
POP B C1 BC <= M(SP+) - - - - -
POP D D1 DE <= M(SP+) - - - - -
POP H E1 HL <= M(SP+) - - - - -
POP PSW F1 AF <= M(SP+) - - - - -
II. ЛОГИЧЕСКИЕ ОПЕРАЦИИ
1. Коньюнкция:
ANA R 10100rrr A <= A and r 0 + + + 0
ANA M   A <=A and M(HL) 0 + + + 0
ANI d E6 A <= A and d 0 + + + 0
2. Исключающее ИЛИ:
XRA R 10101rrr A <= A xor r 0 + + + 0
XRA M   A <=A xor M(HL) 0 + + + 0
XRI d EE A <= A xor d 0 + + + 0
3. Дизьюнкция:
ORA R 10110rrr A <= A or r 0 + + + 0
ORA M   A <= A or M(HL) 0 + + + 0
ORI d F6 A <= A or d 0 + + + 0
4. Сдвиги:
RLC   A7 <= A6 <= … + - - - -
… <= A0 <= A7.
CY <= A7
RRC 0F A0 <= A1 <= … + - - - -
… <= A7 <= A0.
CY <= A0
RAL   A7 <= A6 <= … + - - - -
… <= A0 <= CY
<= A7
RAR 0F A0 <= A1 <= … + - - - -
… <= A7 <= CY
<= A7
5. Инверсия:
CMA 2E A <= not A - - - - -
CMC 3F CY <= not CY + - - - -
6. Установка:
STC   CY <= 1 1 - - - -
III. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ:
1. Сложение:
ADD R 10000rrr A <= A + r + + + + +
ADD M   A <= A + M(HL) + + + + +
ADI d C6 A <= A + d + + + + +
ADC R 10001rrr A <= A + r + CY + + + + +
ADC M   A <= A + M(HL) + CY + + + + +
ADC d CE A <= A + d + CY + + + + +
DAD RP 00RP1001 HL <= HL + BC + - - - -
2. Вычитание:
SUB R 10010rrr A <= A - r + + + + +
SUB M   A <= A - M(HL) + + + + +
SUI d D6 A <= A - d + + + + +
SBB R 10011rrr A <= A - r - CY + + + + +
SBB M   A <= A - M(HL) - CY + + + + +
SBI d DE A <= A - d - CY + + + + +
3. Увеличение:
INR R 00RRR100 R <= R + 1 - + + + +
INR M   M(HL) <= M(HL) + 1 - + + + +
INX RP 00RP0011 RP <= RP + 1 - - - - -
4. Уменьшение
DCR R 00RRR101 R <= R - 1 - + + + +
DCR M   M(HL) <= M(HL) - 1 - + + + +
DCX RP 00RP1011 RP <= RP - 1 - - - - -
5. Сравнение:
CMP R 10111rrr A - R + + + + +
CMP M   A - M(HL) + + + + +
CPI d FE A - d + + + + +
6. Коррекция:
DAA   A <= A(2/10) + + + + +
IV. ПЕРЕДАЧА УПРАВЛЕНИЯ:
1. Безусловный переход:
JMP aa 11000011 (C3) PC <= aa - - - - -
PCHL E9 PC <= HL - - - - -
2. Переход по условию:
JKK aa 11KKK010 PC <= aa, если KK истинно - - - - -
3. Обращение к подпрограмме:
CALL aa 11001101 (CD) M(-SP) <= PC <= aa - - - - -
RST n 11nnn111 M(-SP) <= PC <= 8n - - - - -
4. Обращение к подпрограмме по условию:
CKK aa 11KKK100 M(-SP) <= PC <= aa, если KK истинно - - - - -
5. Возврат из подпрограммы:
RET 11001001 (C9) PC <= M(SP+) - - - - -
6. Возврат из подпрограммы по условию:
RKK aa 11KKK000 PC <= M(SP+), если KK истинно - - - - -
V. УПРАВЛЕНИЕ:
IN p DB A <= (p) - - - - -
OUT p D3 (p) <= A - - - - -
EI FB разрешение прерываний - - - - -
DI F3 запрет прерываний - - - - -
HLT   остановка - - - - -
NOP   нет операций - - - - -

 

Примечание.

 

1. Поле операндов: d – байт данных (08H, 1AH и т.д.);

dd – 2 байта данных (2435H, 0AD4H и т.д.);

аа – двухбайтовый адрес;

p – байт номера порта BB;

n – целое число в диапазоне от 0 до 7;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

 

2. Поле комментариев: R – один из регистров A, B, C, D, E, H, L, или его содержимое, если регистр является приёмником результата;

r – то же, если регистр – источник данных;

RP – одна из регистровых пар B, D, HL, SP, или её содержимое;

М – косвенный регистр;

M(RP) – ячейка памяти с адресом, хранящимся в регистровой паре RP;

M(aa) – ячейка памяти с адресом aa.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

 

3. Циклы: N – число циклов выполнения команды;

[N] – то же, но при доступе в память (когда R = M);

(N) – число циклов, если условие не выполнено.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

 

4. Коды регистров: и регистровых пар:

R: RRR или rrr RP: RP

B 000

C 001 B 00

D 010

E 011 D 01

H 100

L 101 H 10

M 110

A 111 SP и PSW 11

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

 

5. Коды условий: KK: KKK

NZ 000 - Z=0 (не нуль)

Z 001 - Z=1 (нуль)

NC 010 - CY=0 (нет переноса)

C 011 - CY=1 (есть перенос)

P0 100 - P=0 (нечётность)

PE 101 - P=1 (чётность)

P 110 - S=0 (плюс)

M 111 - S=1 (минус)

 

Пример 1. Сложить регистр B (содержимое 02H) с регистром С (содержимое 30H), результат записать в ячейку памяти по адресу 1090H, после чего осуществить переход на адрес 10AAH, где произвести остановку процессора.

 

Адрес OBJ Метка КОП Операнды Комментарий:
1000H     MOV A, B : A <= B
1001H     ADD C : A <= A + C
1002H     STA 1090H : M(1090) <= A
1003H          
1004H          
1005H C3   JMP 10AAH : PC <= 10AAH
1006H AA        
1007H          

 

Вход программы в УМК:

Действия: Клавиатура Дисплей
1. Включить УМК и осуществить сброс вкл. 8, 8, 8, 8, 8, 8,-
< СБ >  
2. Ввод директивы П просмотра и изменения содержимого ячеек памяти ОЗУ < П >  
   
3. Набор адреса 100H 10,00  
4. Ввод набранного адреса < > 1000 хх
5. Набор данных 78   1000 78
6. Ввод набранных данных < > -
10. Набор следующих данных 81   1000 81
11. Ввод набранных данных ВП  
и т.д.    

 

Теперь следует опять с помощью директивы аналогичным образом проверить содержимое ячеек памяти с адреса 1000H по адрес 1007H, и если при вводе объектного кода программы была допущена ошибка, то исправить её.

 

Ввод кода команды остановки процессора по адресу перехода 10AAH:

Действия: Клавиатура Дисплей
1. Ввод директивы П просмотра и изменения содержимого ячеек памяти ОЗУ П  
3. Набор адреса 10ААH 1, 0, А, А 10АА
4. Ввод набранного адреса < > 10АА хх
5. Набор данных 76H 7, 6 10АА 76
6. Ввод набранных данных ВП -

 

Загрузка HEX числа в регистры B – 02H и C – 30H

Действия: Клавиатура Дисплей
1. Ввод директивы РГ просмотра и изменения содержимого ячеек регистров МП РГ -
2. Ввод регистра В В b - xx
3. Набор HEX числа 02H 0, 2 b - 02
4. Ввод набранного числа в регистр B ВП -
5. Ввод директивы РГ РГ  
6. Ввод регистра C С c - xx
7. Набор HEX числа 30H 3, 0 c - 30
8. Ввод набранного числа в регистр C ВП -

 

 

Запуск программы на выполнение:

 

Действия: Клавиатура Дисплей
1. Ввод директивы СТ старта программы СТ  
2. Набор адреса старта 1000H 1, 0, 0, 0  
3. Запуск программы ВП  

 

Программа выполняется мгновенно, поэтому можно сразу же приступить к просмотру содержимого ячейки памяти с адресом 1090H.

Просмотр содержимого ячейки памяти с адресом 1090H:

Действия: Клавиатура Дисплей
1. Сброс СБ -
2. Ввод директивы П П  
3. Набор адреса 1090H 1, 0, 9, 0  
4. Ввод набранного адреса ВП 1090 12

 

HEX число 32H и есть сумма чисел 02H и 30H.

Далее осуществим выполнение программы на уровне машинных циклов:

Действия: Клавиатура Дисплей
1. Сброс СБ -
2. Переключение УМК в режим пошагового выполнения программы, при этом произойдёт подключение индикации. РБ/ШГ в нижнее положение -
3. Переключение УМК в поцикловый режим работы. КМ/ЦК в нижнее положение -
4. Вышеописанным образом с помощью директивы П восстанавливаются исходные значения регистров: B - 02H и C - 30H.    
5. Ввод директивы СТ старта программы. СТ -
6. Набор адреса старта 1000H. 1, 0, 0, 0  
7. Запуск программы. ВП  

 

Выполнение программы будет осуществляться по циклам и должно сопровождаться нажатием клавиши ШГ после каждого цикла.

 

Пример 2. Загрузить в регистровую пару DE число 0F35H и записать его в ячейку памяти по адресу 1008H. После чего остановить процессор.

 

Адрес OBJ Метка КОП Операнды Комментарий:
           
1000H     LXI D, 0F35H : DE <= 0F35H
1001H          
1002H 0F        
1003H EB   XCHG   : HL <=> DE
1004H     SHLD 0908H : M (1008H) <= L
1005H         : M (1009H) <= H
1006H          
1007H     HLT   : остановить процессор

 

Вышеописанным образом произвести ввод объектного кода в ячейки памяти УМК, после чего проверить содержимое ячеек памяти с адреса 1000Н по адрес 1007Н.

Директивой СТ 1000 осуществить запуск программы на исполнение. После остановки процессора (потухший дисплей) произвести сброс клавишей СБ и проверить при помощи директивы П содержимое ячеек памяти по адресам 1008Н и 1009Н, там должны находиться числа 35Н и 0FН соответственно.

Далее осуществляется выполнение программы на уровне машинных циклов. Для этого УМК переключается в шаговый режим (клавишей РБ/ШГ в нижнее положение) выполнения программы и в поцикловый режим работы (клавиша КМ/ЦК в нижнее положение).

Директивой СТ 1000 осуществляется запуск программы на исполнение и выполнение машинного цикла осуществляется нажатием клавиши ШГ.

 

Пример 3. Записать в стек содержимое регистровой пары DE (5687H), считать его в регистровую пару BC и осуществить вызов подпрограммы остановки процессора по адресу 1032H.

 

Программа имеет вид:

 

Адрес OBJ Метка КОП Операнды Комментарий:
1000H D5   PUSH D : -(SP) <= DE
1001H C1   POP B : BC <= (SP)+
1002H CD   CALL 1032H : -(SP) <= PC <= 1032H
1003H          
1004H          

Вышеописанным образом произвести ввод объектного кода ячейки памяти УМК, после чего проверить содержимое ячеек памяти с адреса 1000H по адрес 1004Н. В ячейку памяти по адресу 1032Н директивой П 1032 занести код остановки процессора 76Н. В регистровую пару DE директивой РГ П поместить число 5687Н.

Далее УМК переключаться в шаговый режим (клавиша РБ/ШГ в нижнее положение) выполнения программы и в поцикловый режим работы (клавиша КМ/ЦК в нижнее положение).

Директивой СТ 1000 осуществляется запуск программы на исполнение и выполнение каждого машинного цикла осуществляется нажатием клавиши ШГ.

 

Варианты заданий.

Написать программу, ввести объектный код в УМК и осуществить выполнение по циклам.

 

Задание 1. Сложить два числа СЕН и 21Н, хранящиеся в ячейках памяти по адресам 1020Н и 1021Н соответственно, записать полученную сумму в ячейку памяти по адресу 1022Н и остановить процессор.

 

Задание 2. Из числа EFH, хранящегося в ячейке памяти по адресу 0A00H, вычесть 45Н, записать разность в ячейку памяти по адресу 09FFH и остановить процессор.

 

Задание 3. Произвести логическое сложение чисел 01Н и F2H, записать результат в ячейку памяти по адресу 1088Н и остановить процессор.

 

Задание 4. Обменять содержимое ячеек памяти с адресами 1091Н и 1092Н и остановить процессор.

 

Задание 5. Инвертировать содержимое ячеек памяти с адресами 1056Н и 1079Н и остановить процессор.

 

Задание 6. Из содержимого регистра B вычесть содержимое регистра С, записать разность в ячейку памяти по адресу 1088Н. Осуществить переход на адрес 10А0Н, где произвести остановку процессора.

 

Задание 7. Осуществить логическое сложение чисел 90Н (записано в ячейку памяти по адресу 1030Н) и 0FН и перейти по адресу 1080Н для остановки процессора, если число единиц а результате чётно.

 

Задание 8. Обнулить аккумулятор. перейти по адресу 1077Н по условию, что А=0, где произвести загрузку в аккумулятор число 03Н и осуществить операцию логического сложения по модулю 2 с числом 38Н, результат сдвинуть на один разряд вправо и остановить процессор.

 

Задание 9. Загрузить в аккумулятор число 1СН. Сдвигать содержимое аккумулятора влево до появления признака переноса (CY=1), по которому осуществить переход на адрес 1075Н, где произвести очистку аккумулятора, сброс признака переноса и остановку процессора.

 

Задание 10. Загрузить в аккумулятор число 08Н. Выделить третий разряд аккумулятора а3 и, если он не равен нулю, осуществить переход на адрес 109АН, где поместить содержимое аккумулятора в ячейку памяти по адресу 1032Н и остановить процессор.

 

Задание 11. Сохранить в стеке содержимое регистровой пары PSW, загрузить в аккумулятор число 0BH и переслать его в регистровую пару HL. Вернуть содержимое регистровой паре PSW из стека и остановить процессор.

 

Задание 12. Загрузить в стек содержимое регистровых пар PSW, DE, HL и остановить процессор.

 

Задание 13. Загрузить в стек содержимое ячеек памяти с адресами 1090Н и 1091Н.

Задание 14. Загрузить в стек числа 1234Н и 5678Н и остановить процессор.

 

Задание 15. Сохранить значение вершины стека в регистровой паре DE. Установит значение вершины стека 10BBH и остановить процессор.

 

Задание 16. Перейти на подпрограмму по адресу 1045Н для инвертирования содержимого аккумулятора, вернуться из подпрограммы и остановить процессор.

 

Задание 17. Перейти на подпрограмму по адресу 1000Н, по которой из содержимого ячейки памяти с адресом 1056Н вычесть число 0FFH и выйти из подпрограммы, если результат окажется отрицательным, в обоих случаях остановить процессор.

 

Задание 18. наращивать содержимое аккумулятора на 40Н до появления признака переноса, по которому осуществить переход на подпрограмму обнуления регистровой пары HL, вернуться из подпрограммы и остановить процессор.

 

Задание 19. Обнулить аккумулятор. Осуществить переход на подпрограмму по адресу 1070Н, если флаг Z=1,по которой содержимое ячейки памяти с адресом 1050Н записать в следующую ячейку памяти и выйти из подпрограммы, если флаг Z всё ещё установлен. После чего остановить процессор.

 

Задание 20. Перейти на подпрограмму по адресу 1056Н, по которой перейти на подпрограмму по адресу 1А34Н, по которой установить все биты регистровой пары PSW. Выйти из второй подпрограммы и инвертировать аккумулятор. Выйти из первой подпрограммы и остановить процессор.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-07-22 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: