Лекция №7. Система команд однокристального микропроцессора
Содержание лекции:форматы команд, способы адресации, система команд, форма написания программы на языке ассемблера.
Цели лекции:изучить форматы команд, основные способы их адресации, разобраться с механизмом действия команд.
Для того чтобы МП выполнил серию последовательных операций нужна программа. Если она написана на языке высокого уровня, например, на PL/M или СИ, то необходимо знать только язык программирования. При написании программы на языке ассемблера необходимо знать систему команд, то есть знать, какие операции выполняются МП.
Восьмиразрядный МП 8080А имеет вполне определенное количество команд, равное 78, поэтому его называют МП с жесткой системой команд, наращивать и изменять которые нельзя.
Каждая команда имеет определенную структуру (формат), в которой можно выделить поле кода операции (КОП) и поле операнда, определяющее числа (операнды), участвующие в операции в соответствии с КОП. Для команд используются три вида формата:
1) однобайтный, в котором несколько старших разрядов отводится под КОП, а остальные под адресацию операндов;
2) двухбайтный, в котором первый байт отводится под КОП, а второй – под восьмиразрядный операнд или номер устройства ввода-вывода;
3) трехбайтный, в котором первый байт отводится под КОП, а второй и третий – под шестнадцатиразрядный операнд или адрес ячейки памяти.
Способ определения операнда на основе структуры команды называется способом адресации. Использование нескольких способов адресации расширяет возможности при составлении программы. Выбор того или иного способа адресации определяется:
- минимальным объемом памяти для хранения программы;
- наименьшим временем выполнения программы;
- набором команд, которыми располагает данный МП.
Поскольку техника адресации редко удовлетворяет сразу обоим первым требованиям, находят компромиссное решение.
Наибольшее распространение получили следующие способы адресации:
а) прямая адресация. При этом способе адресации за КОП должен следовать адрес данных, участвующих в операции. Этим адресом может быть адрес памяти (трехбайтная команда), имя регистра (однобайтная команда), номер порта ввода или вывода (двухбайтная команда);
б) непосредственная адресация. При этом способе адресации операнд сразу следует за КОП., то есть его не надо искать, он находится в «теле» команды. Операнды хранятся в памяти непосредственно за ячейкой, содержащей КОП. Команды с непосредственной адресацией бывают двухбайтные (КОП – восьмиразрядный операнд) и трехбайтные (КОП – шестнадцатиразрядный операнд);
в) косвенная адресация. При этом способе адресации фактически используются два адреса. Первый трехразрядный адрес находится в «теле» команды и является символическим именем одного из регистров регистровой пары, в которой находится второй шестнадцатиразрядный адрес операнда, хранимого в ячейке памяти. Команды косвенной адресации обычно имеют однобайтный характер. Косвенная адресация часто сочетается с другими видами адресации, например, непосредственная косвенно-регистровая адресация.
Условно систему команд можно разбить на пять групп:
1) команды пересылок;
2) команды арифметических операций;
3) команды логических операций;
4) команды перехода;
5) специальные команды.
В дальнейшем, при написании команд используется символический язык и приняты следующие обозначения: R – один из РОН (B,C,D,E,H,L) или аккумулятор; RP – одна из регистровых пар (BC,DE,HL,SP): D8 – восьмиразрядный операнд; D16 – шестнадцатиразрядный операнд. В таблице 5 представлены трехразрядные коды, соответствующие именам регистров общего назначения и ячейке памяти М (memory), адрес которой определяется содержимым регистровой пары HL.
Т а б л и ц а 5
РОН и М | B | C | D | E | H | L | M | A |
Коды |
Команды пересылок осуществляют передачу данных из одного блока в другой, при этом сначала определяют приемник, а потом источник данных. Если работают с ячейкой памяти, то ее адрес определяется содержимым регистровой пары HL (старший байт в H, а младший – в L). Рассмотрим действие некоторых команд пересылок:
MOV Rd,Rs; Rd Rs – отправка содержимого регистра источника (Rs) в регистр приемник (Rd);
MVI R,D8; R D8 – отправка восьмиразрядного операнда в регистр R;
LDA D16; A M (D16); - загрузка в аккумулятор содержимого ячейки памяти, адрес которой определяется числом D16;
LXI RP,D16; RP D16 – загрузка регистровой пары RP числом D16;
OUT D8; ПОРТ(D8) A – содержимое аккумулятора передается в порт с номером D8;
IN D8; A ПОРТ(D8) – содержимое порта с номером D8 передается в аккумулятор.
PUSH RP; SP – 1 Rh; SP – 2 Rl; SP SP – 2 – содержимое старшего регистра (Rh) регистровой пары отправляется в ячейку памяти по адресу, который на единицу меньше содержимого указателя стека SP, а содержимое младшего регистра (Rl) – в ячейку памяти, адрес которой меньше содержимого SP на два.
POP RP; Rl SP; Rh SP + 1; SP SP + 2 - содержимое ячейки памяти, адрес которой определяется содержимым SP, засылается в Rl, а содержимое ячейки памяти, адрес которой на единицу меньше содержимого SP засылается в Rh. Содержимое регистра SP увеличивается на два.
Команды арифметических операцийвыполняются в АЛУ МП. К ним относятся операции сложения и вычитания. Один из операндов при этих операциях всегда помещается в аккумулятор, а второй операнд помещается в регистр или ячейку памяти. Результат операции помещается в аккумулятор, стирая операнд, который раньше там хранился. К командам арифметического сложения относятся:
ADD R; A A + R - сложение содержимого аккумулятора с содержимым заданного регистра;
ADI D8; A D8 + A – сложение числа D8 с содержимым аккумулятора;
ADC R; A A + R + CY – сложение операндов с учетом признака переноса СY;
INR R; R R + 1 – инкремент, или увеличение на единицу содержимого регистра или ячейки памяти.
К командам вычитания относятся:
SUB R; A A – R – вычесть из содержимого аккумулятора содержимое регистра или ячейки памяти;
SUI D8; A A – D8 - вычесть из содержимого аккумулятора восьмиразрядное двоичное число;
SBB R; A A – R – CY – вычитание операндов с учетом признака переноса CY (заем);
DCR R; R R – 1 – декремент или уменьшение на единицу содержимого регистра или ячейки памяти.
Команды логических операцийпозволяют выполнять следующие действия:
ANA R; A A R – логическое умножение И;
ORA R; A A R – логическое сложение ИЛИ;
XRA R; A A R - исключающее ИЛИ;
CMA – А А – обратный код содержимого аккумулятора;
CMP R; A – R – сравнение двух чисел;
RLC – циклический сдвиг влево на один разряд, причем старший разряд замещает младший и одновременно разряд триггера переноса;
RRC - циклический сдвиг вправо на один разряд, причем младший разряд замещает старший и одновременно разряд триггера переноса.
Команды передачи управления предназначеныдля изменения нормального последовательного хода программы путем ее прерывания подачей одной из команд передачи управления. Рассмотрим два типа команд:
1) безусловные, по которым переход в программе осуществляется по адресу, который указывается в команде. Например, команда JMP D16 отправляет по адресу D16;
2) условные, по которым переход осуществляется только при появлении какого-либо условия, формируемого регистром признаков: NZ – не нуль, Z – нуль, NC – нет переноса, C – перенос, PO – нечетность, PE – четность, P – плюс, M – минус. Прибавляя символ условного перехода J к обозначению того или иного признака получаем команду условного перехода. Например, команда JNZ D16 выполняется при ненулевом результате предыдущей операции и отправляет по адресу D16.
Специальные командыне передают и не обрабатывают информацию, а используются для управления МП. Команда HLT позволяет остановить выполнение программы, а команда NOP не задает выполнение операции, а позволяет перейти к очередной команде с задержкой на четыре такта Т. Команды EI и DI обеспечивают программное разрешение или запрет режима прерывания соответственно.
Достоинством языка ассемблера является то, что все элементы программы представлены в символической форме, отражающей их содержательный смысл.Преобразование символических имен команд в двоичные коды возлагается на специальную программу – ассемблер. При наличии в программе синтаксических ошибок ассемблер в процессе трансляции выдает сообщения об ошибках.
Каждая строка ассемблера соответствует одной команде или директиве и может содержать четыре поля: