Система команд процессора и способы адресации
Разнообразие типов данных, форм их представления и действий, которые необходимы для обработки информации и управления ходом вычислений, порождает необходимость использования различных команд – набора команд. Каждый процессор имеет собственный вполне определенный набор команд, называемый системой команд процессора. Система команд должна обладать двумя свойствами – функциональной полнотой и эффективностью /6/.
Функциональная полнота – это достаточность системы команд для описания любого алгоритма. Требование функциональной полноты не является слишком жестким. Доказано, что свойством функциональной полноты обладает система, включающая всего три команды (система Поста): присвоение 0, присвоение 1, проверка на 0. Однако составление программ в такой системе команд крайне неэффективно.
Эффективность системы команд – степень соответствия системы команд назначению ВМ, т. е. классу алгоритмов, для выполнения которых предназначается ВМ, а также требованиям к производительности ВМ. Очевидно, что реализация развитой системы команд связана с большими затратами оборудования и, следовательно, с высокой стоимостью процессора. В то же время ограниченный набор команд приводит к снижению производительности и повышенным требованиям к памяти для размещения программы. Даже простые и дешевые современные микропроцессоры поддерживают систему команд, содержащую несколько десятков (а с модификациями – сотен) команд.
Система команд процессора характеризуется тремя аспектами: форматами, способами адресации и типом выполняемых операций.
Под форматом команды следует понимать длину команды, количество, размер, положение, назначение и способ кодировки ее полей.
Команды, как и любая информация в ВМ, кодируются двоичными словами, которые должны содержать в себе следующие виды информации:
· тип операции, которую следует реализовать в данной команде (КОП);
· место в памяти, откуда следует взять первый операнд (А 1);
· место в памяти, откуда следует взять второй операнд (А2);
· место в памяти, куда следует поместить результат (АЗ).
Каждому из этих видов информации соответствует своя часть двоичного слова – поле, а совокупность полей (их длины, расположение в командном слове, способ кодирования информации) называется форматом команды. В свою очередь, некоторые поля команды могут делиться на подполя. Формат команды, поля которого перечислены выше, называется трехадресным (рис.2.7-а).
Команды трехадресного формата занимают много места в памяти, в то же время далеко не всегда поля адресов используются в командах эффективно. Действительно, наряду с двухместными операциями (сложение, деление, конъюнкция и др.) встречаются и одноместные (инверсия, сдвиг, инкремент и др.), для которых третий адрес не нужен. При выполнении цепочки вычислений часто результат предыдущей операции используется в качестве операнда для следующей. Более того, нередко встречаются команды, для которых операнды не определены (СТОП) или подразумеваются самим кодом операций (DАА, десятичная коррекция аккумулятора).
Поэтому в системах команд реальных ВМ трехадресные команды встречаются редко. Чаще используются двухадресные команды (рис.2.7-б), в этом случае в бинарных операциях результат помещается на место одного из операндов.
Для реализации одноадресных форматов (рис.2.7-в)в процессоре предусматривают специальную ячейку — аккумулятор. Первый операнд и результат всегда размещаются в аккумуляторе, а второй операнд адресуется полем А.
Реальная система команд обычно имеет команды нескольких форматов, причем тип формата определяется в поле КОП (рис.2.7-г).
Способ адресации определяет, каким образом следует использовать информацию, размещенную в поле адреса команды.
Существует пять основных способов адресации операндов в командах.
· Прямая – в этом случае в адресном поле располагается адрес операнда. Разновидность – прямая регистровая адресация, адресующая не ячейку памяти, а РОН. Поле адреса регистра имеет в команде значительно меньшую длину, чем поле адреса памяти.
· Непосредственная – в поле адреса команды располагается не адрес операнда, а сам операнд. Такой способ удобно использовать в командах с константами.
· Косвенная – в поле адреса команды располагается адрес ячейки памяти, в которой хранится адрес операнда («адрес адреса»). Такой способ позволяет оперировать адресами как данными, что облегчает организацию циклов, обработку массивов данных и др. Его основной недостаток – потеря времени на двойное обращение к памяти – сначала за адресом, потом – за операндом. Разновидность – косвенно-регистровая адресация, при которой в поле команды размещается адрес РОН, хранящего адрес операнда. Этот способ, помимо преимущества обычной косвенной адресации, позволяет обращаться к большой памяти с помощью коротких команд и не требует двойного обращения к памяти (обращение к регистру занимает гораздо меньше времени, чем к памяти).
· Относительная – адрес формируется как сумма двух слагаемых: базы, хранящейся в специальном регистре или в одном из РОН, и смещения, извлекаемого из поля адреса команды. Этот способ позволяет сократить длину команды (смещение может быть укороченным, правда в этом случае не вся память доступна в команде) и/или перемещать адресуемые массивы информации по памяти (изменяя базу). Разновидности – индексная и базово-индексная адресации. Индексная адресация предполагает наличие индексного регистра вместо базового. При каждом обращении содержимое индексного регистра автоматически модифицируется (обычно увеличивается или уменьшается на 1). Базово-индексная адресация формирует адрес операнда как сумму трех слагаемых: базы, индекса и смещения.
· Безадресная – поле адреса в команде отсутствует, а адрес операнда или не имеет смысла для данной команды, или подразумевается по умолчанию (рис.2.7-г). Часто безадресные команды подразумевают действия над содержимым аккумулятора. Характерно, что безадресные команды нельзя применить к другим регистрам или ячейкам памяти.
Одной из разновидностей безадресного обращения является использование т. н. магазинной памяти или стека. Имеется фиксированная ячейка, называемая верхушкой стека. При чтении слово извлекается из верхушки, а все остальное содержимое «поднимается вверх» так, что в верхушке оказывается следующее по порядку слово. Одно слово нельзя прочитать из стека дважды. При записи новое слово помещается в верхушку стека, а все остальное содержимое «опускается вниз» на одну позицию. Таким образом, слово, помещенное в стек первым, будет прочитано последним. Говорят, что стек поддерживает дисциплину LIFO – Last In First Out (последний пришел – первый ушел). Реже используется безадресная память типа очередь с дисциплиной FIFO – First In First Out (первый пришел – первый ушел).
По типам выполняемых операций команды принято делить на основных пять классов.
· Арифметико-логические и специальные – команды, в которых выполняется собственно преобразование информации. К ним относятся арифметические операции сложение, вычитание, умножение и деление (с фиксированной и плавающей занятой), команды десятичной арифметики, логические операции конъюнкции, дизъюнкции, инверсии и др., сдвиги, преобразование чисел из одной системы счисления в другую и такие экзотические, как извлечение корня, решение системы уравнений и др.
· Пересылки и загрузки – обеспечивают передачу информации между процессором и памятью или между различными уровнями памяти (Кэш память ОЗУ). Разновидность – загрузка регистров и ячеек константами.
· Ввода/вывода – обеспечивают передачу информации между процессором и внешними устройствами. По структуре они очень похожи на команды предыдущего класса. В некоторых ЭВМ принципиально отсутствует различие между ячейками памяти и регистрами внешних устройств (единое адресное пространство) и класс команд ввода/вывода не выделяется, все обмены осуществляются в рамках команд пересылки и загрузки.
· Передачи управления – команды, которые изменяют естественный порядок выполнения команд программы. Эти команды меняют содержимое программного счетчика, обеспечивая переходы по программе. Существуют команды безусловной и условной передачи управления. В последнем случае передача управления происходит, если выполняется заданное в коде команды условие, иначе выполняется следующая по порядку команда. В качестве условий обычно используются признаки результата предыдущей операции, которые хранятся в специальном регистре признаков (флажков). Различают три разновидности команд передачи управления: переходы, вызовы и возвраты из подпрограмм.
Команды переходов помещают в программный счетчик содержимое своего адресного поля – адрес перехода. При этом старое значение программного счетчика теряется. В микропроцессорных системах часто для экономии длины адресного поля команд условных переходов адрес перехода формируется как сумма текущего значения программного счетчика и относительно короткого знакового смещения, размещаемого в команде. В крайнем случае, в командах условных переходов можно и вовсе обойтись без адресной части – при выполнении условия команда «перепрыгивает» через следующую команду, которой обычно является безусловный переход.
Команда вызова подпрограммы работает подобно команде безусловного перехода, но старое значение программного счетчика предварительно сохраняется в специальном регистре или в стеке. Команда возврата передает содержимое верхушки стека или специального регистра в программный счетчик. Команды вызова и возврата работают «в паре». Подпрограмма, вызываемая командой вызова, должна заканчиваться командой возврата, что обеспечивает по окончании работы подпрограммы передачу управления в точку вызова. Хранение адресов возврата в стеке обеспечивает возможность реализации вложенных подпрограмм.
· Системные – команды, управляющие процессом обработки информации и внутренними ресурсами процессора. К таким командам относятся команды управления подсистемой прерывания, команды установки и изменения параметров защиты памяти, команда останова программы и некоторые другие. В простых процессорах класс системных команд немногочисленный, а в сложных мультипрограммных системах предусматривается большое число системных команд.
Контрольные вопросы и задания
1.Из каких основных устройств состоит процессор?
2.Какие функции выполняет устройство управления процессора?
3.Проведите сравнительный анализ устройств управления с аппаратной и программируемой логикой.
4.Какие из устройств управления обеспечивают большее быстродействие процессоров?
5.Какие из устройств управления обеспечивают реализацию большего набора команд процессора?
6.Какие функции выполняет арифметико-логическое устройство процессора?
7.Какие функции выполняет операционное устройство? Какие типы операционных устройств используются в микропроцессорах?
8.Проведите сравнительный анализ операционных устройств с жесткой и магистральной структурой.
9.Какие форматы команд применяется в микропроцессорах?
10.Назовите основные способы адресации.
11.Для каких целей используются системные команды микропроцессора?
12.Назовите достоинства и недостатки CISC и RISC процессоров.
Источник
Способы адресации команд микропроцессора
число и типы машинных циклов;
минимальное число машинных тактов.
Система команд учебного микропроцессора устанавливает следующее назначение команд:
арифметико-логическая обработка кодов;
Команды одинакового назначения отличаются друг от друга своим конкретным содержанием.
Конкретное содержание команды представляет собой полный перечень действий, производимых микропроцессором по ее выполнению.
Формат определяет число и смысл байтовых слов, составляющих команду. В учебном микропроцессоре приняты одно-, двух- и трехбайтовые форматы. Построение этих форматов и положение в памяти микро-ЭВМ соответствующих команд иллюстрирует рис.2.1. Байты команд всегда располагаются в ячейках памяти с последовательно увеличивающимися адресами. Адрес ячейки памяти , в котором располагается первый из байтов команды, считается адресом этой команды. Первый байт команды часто называют кодом операции. Код операции несет в себе полную характеристику соответствующей команды. Последующие байты есть числа, которые, в зависимости от конкретного содержания команды, рассматриваются микропроцессором либо как данные, либо как адреса ячеек памяти (портов ввода-вывода). В двухбайтовых командах фигурируют восьмиразрядные (байтовые) адреса или данные. В трехбайтовых шестнадцатиразрядные (двухбайтовые). При этом младший байт адреса или данных всегда располагается в памяти микро-ЭВМ по младшему адресу, а старший по старшему.
Другие характеристики, входящие в систему команд учебного микропроцессора, будут рассмотрены особо.
Рис.2.1.Форматы команд учебного микропроцессора
Коды операций и последующие байты команды есть восьмиразрядные двоичные числа. При работе с ними обычно используется компактная запись двоичных кодов в шестнадцатеричной системе счисления. Каждый байт записывается в виде двухразрядного шестнадцатеричного числа. Говорят, что программа микро-ЭВМ записана в машинных кодах, если все команды этой программы представлены соответствующими последовательностями двухразрядных шестнадцатеричных кодов.
Программа в машинных кодах может быть легко введена в микро-ЭВМ и выполнена в ней. Однако составить такую программу человекупрограммисту очень трудно. Трудности, в первую очередь, связаны с большим числом команд микропроцессора. Байтовый код операции может иметь до 2 8 = 25610 различных вариантов, почти каждый из которых определяет новую команду. Практически невозможно запомнить соответствие шестнадцатеричных кодов операций, форматов и конкретного содержания такого количества команд. Поэтому при программировании обычно используется буквенноцифровая запись команд в виде так называемых мнемоник.
Мнемоника команды начинается буквенной частью, которая представляет собой сокращение, аббревиатуру полного английского названия команды, отражающего ее конкретное содержание. Так, например, используются мнемоники вида:
ADD B сложить код из аккумулятора с кодом из регистра B;
SUB C вычесть код из регистр C из кода, содержащегося в аккумуляторе;
CMP H сравнить код из аккумулятора с кодом из с регистра H;
MOV D,E переместить, переслать код из регистра E в регистр D.
Мнемоники многих команд имеют еще и цифровую часть. Как правило, цифровая часть мнемоники есть двух- или четырехразрядное шестнадцатеричное число, выражающее содержимое второго или, соответственно, второго и третьего байтов многобайтной команды. При обобщенной записи мнемоник в системе команд это число обозначают следующим образом:
D8 байт данных в двухбайтовой команде;
D16 два байта данных в трехбайтовой команде;
N адрес порта ввода вывода в двухбайтовой команде;
ADR двухбайтовый адрес в трехбайтовой команде.
Соответствие шестнадцатеричных кодов операций и мнемоник команд устанавливает специальная таблица системы команд (табл.2.1). С помощью такой таблицы можно легко преобразовать программу, записанную с помощью мнемоник, в программу, записанную в машинных кодах. Такое преобразование называют ассемблированием.
Под методом адресации понимают способ, посредством которого команда указывает микропроцессору источники обрабатываемых кодов операндов и приемник полученного результата. Наибольшее значение методы адресации имеют для команд пересылки и арифметикологической обработки. Поэтому далее вопрос излагается применительно только к этим группам команд.
В командах учебного микропроцессора используется пять методов адресации: неявный, регистровый, косвенный, прямой и непосредственный. Одна команда может использовать несколько методов адресации (например два для адресации операндов и еще один для адресации результата).
Команды учебного микропроцессора, использующие неявную, регистровую, косвенную адресацию, а также любое их сочетание всегда имеют однобайтовый формат. Если же в числе других используется непосредственная или прямая адресация, то соответствующая команда имеет двух или трехбайтовый формат, в зависимости от разрядности используемого адреса или данных.
Под неявной адресацией понимают жесткую фиксацию регистров СОЗУ источников операндов или приемников результата, принятую в ряде команд микропроцессора. Признаком такой адресации является отсутствие у программиста какихлибо альтернатив в выборе соответствующего источника или приемника кода. Так, например, все команды сдвига оперируют только с содержимым аккумулятора А. Во всех операциях с двумя байтовыми операндами аккумулятор является как источником одного из операндов, так и приемником результата.
При регистровой адресации источником операнда или приемником результата является один из регистров микропроцессора или регистровая пара. Возможность указать, какой именно из некоторого множества регистров следует использовать в конкретном случае, здесь предоставлена программисту. Имена используемых регистров обязательно фигурируют в буквенной части мнемоники соответствующей команды.
Неявная и регистровая адресация оперируют только с регистрами микропроцессора и не позволяют обращаться к ячейкам памяти ОЗУ и ПЗУ. Для такого обращения нужен адрес соответствующей ячейки.
Косвенная адресация рассматривает в качестве адреса ячейки шестнадцатеричный двоичный код, содержащийся в какойлибо регистровой паре или указателе стека SP. Особенно часто в качестве регистра косвенной адресации в учебном микропроцессоре используется регистровая пара HL.
При прямой адресации адрес источника или приемника кода в памяти или порте вводавывода указывается в цифровой части мнемоники в виде двухбайтового кода ADR или однобайтового N.
Иногда оказывается удобнее указать в команде не адрес операнда, а сам операнд в виде однобайтового слова данных D8 или двухбайтового D16. В таком случае говорят о непосредственной адресации соответствующего операнда.
Соответствие мнемоник команд и их кодов операции Таблица 2.1
H\L | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | A | B | C | D | E | F | L/H |
0 | NOP | LXI B,D16 | STAX B | INX B | INR B | DCR B | MVI B,D8 | RLC | — | LDAX B | DCX B | INR C | DCR C | MVI C,D8 | RRC | 0 |
1 | — | LXI D,D16 | STAX D | INX D | INR D | DCR D | MVI D,D8 | RAL | — | LDAX D | DCX D | INR E | DCR E | MVI E,D8 | RAR | 1 |
2 | — | LXI H,D16 | SHLD ADR | INX H | INR H | DCR H | MVI H,D8 | DAA | — | LHLD ADR | DCX H | INR L | DCR L | MVI L,D8 | CMA | 2 |
3 | — | LXI SP,D16 | STA ADR | INX SP | INR M | DCR M | MVI M,D8 | STC | — | LDA ADR | DCX SP | INR A | DCR A | MVI A,D8 | CMC | 3 |
4 | MOV B,B | MOV B,C | MOV B,D | MOV B,E | MOV B,H | MOV B,L | MOV B,M | MOV B,A | MOV C,B | MOV C,D | MOV C,E | MOV C,H | MOV C,L | MOV C,M | MOV C,A | 4 |
5 | MOV D,B | MOV D,C | MOV D,D | MOV D,E | MOV D,H | MOV D,L | MOV D,M | MOV D,A | MOV E,B | MOV E,D | MOV E,E | MOV E,H | MOV E,L | MOV E,M | MOV E,A | 5 |
6 | MOV H,B | MOV H,C | MOV H,D | MOV H,E | MOV H,H | MOV H,L | MOV H,M | MOV H,A | MOV L,B | MOV L,D | MOV L,E | MOV L,H | MOV L,L | MOV L,M | MOV L,A | 6 |
7 | MOV M,B | MOV M,C | MOV M,D | MOV M,E | MOV M,H | MOV M,L | HLT | MOV M,A | MOV A,B | MOV A,D | MOV A,E | MOV A,H | MOV A,L | MOV A,M | MOV A,A | 7 |
8 | ADD B | ADD C | ADD D | ADD E | ADD H | ADD L | ADD M | ADD A | ADC B | ADC D | ADC E | ADC H | ADC L | ADC M | ADC A | 8 |
9 | SUB B | SUB C | SUB D | SUB E | SUB H | SUB L | SUB M | SUB A | SBB B | SBB D | SBB E | SBB H | SBB L | SBB M | SBB A | 9 |
A | ANA B | ANA C | ANA D | ANA E | ANA H | ANA L | ANA M | ANA A | XRA B | XRA D | XRA E | XRA H | XRA L | XRA M | XRA A | A |
B | ORA B | ORA C | ORA D | ORA E | ORA H | ORA L | ORA M | ORA A | CMP B | CMP D | CMP E | CMP H | CMP L | CMP M | CMP A | B |
C | RNZ | POP B | JNZ ADR | JMP ADR | CNZ ADR | PUSH B | ADI D8 | RST 0 | RZ | JZ ADR | — | CZ ADR | CALL ADR | ACI D8 | RST 1 | C |
D | RNC | POP D | JNC ADR | OUT N | CNC ADR | PUSH D | SUI D8 | RST 2 | RC | JC ADR | IN N | CC ADR | — | SBI D8 | RST 3 | D |
E | RPO | POP H | JPO ADR | XTHL | CPO ADR | PUSH H | ANI D8 | RST 4 | RPE | JPE ADR | XCHG | CPE ADR | — | XRI D8 | RST 5 | E |
F | RP | POP PSW | JP ADR | DI | CP ADR | PUSH PSW | ORI D8 | RST 6 | RM | JM ADR | EI | CM ADR | — | CPI D8 | RST 7 | F |
H/L | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | A | B | C | D | E | F | L\H |
Эти команды предназначены для организации обмена кодами между регистрами СОЗУ, ячейками памяти, портами ввода вывода.
Наиболее многочисленна группа команд однобайтовых пересылок. Микропроцессор, исполняя команды этой группы, осуществляет пересылку, одного байта данных. Большинство команд этой группы записывается в виде MOV R1,R.
По этой команде содержимое регистра R пересылается в регистр R1, причем содержимое регистра R при этом не меняется. В качестве регистров R1 и R в команде могут фигурировать: A аккумулятор; B, C, D, E, H, L регистры общего назначения; M ячейка памяти, адрес которой содержится в регистровой паре HL. Возможности использования в командах тех или иных регистров будем далее пояснять краткой записью вида MOV R1,R,
.
Легко видеть, что команда MOV R1,R может использовать как регистровую, так и косвенную адресацию источника и приемника пересылаемого кода. Так команда MOV A,C пересылает содержимое регистра С в аккумулятор А, а команда MOV M,A пересылает содержимое аккумулятора А в ячейку ОЗУ с адресом, который содержится в данный момент времени в регистровой паре HL.
Кроме регистровой и косвенной адресации для однобайтовых пересылок может быть использована и непосредственная адресация. Она реализуется в команде MVI R,D8,
.
По этой команде байт данных D8 помещается в один из регистров A, B, C, D, E, H, L или адресуемую косвенно ячейку памяти М.
Обмен данными между аккумулятором и ячейками памяти или портами вводавывода дополнительно поддерживают команды с прямой адресацией:
LDA ADR загрузить аккумулятор из ячейки памяти с адресом ADR;
STA ADR загрузить ячейку памяти с адресом ADR из аккумулятора;
IN N ввести в аккумулятор байт из порта ввода с адресом N;
OUT N вывести байт из аккумулятора в порт вывода с адресом N.
По командам двухбайтовых пересылок микропроцессор осуществляет пересылку двухбайтовых (шестнадцатиразрядных) чисел. Рассмотрим примеры таких команд.
LXI Rp,D16 загрузить регистровую пару Rp двухбайтовым числом D16.
.
LHLD ADR загрузить регистровую пару HL из ячеек памяти с адресами ADR и ADR+1. При этом байт из ячейки с младшим адресом ADR будет загружен в младший регистр пары L, а байт из ячейки со старшим адресом ADR+1 в старший регистр пары H.
SHLD ADR загрузить ячейки памяти с адресами ADR и ADR+1 из регистровой пары HL. При этом байт из младшего регистра пары L будет загружен по младшему адресу ADR, а байт из старшего регистра пары H, будет загружен по старшему адресу ADR+1.
Большинство команд арифметикологической обработки оперируeт байтовыми словами. Здесь имеются команды сложения, сложения с учетом переноса, вычитания, вычитания с учетом заема, поразрядных логических «И», «ИЛИ», «исключающего ИЛИ» и сравнения.
В перечисленных командах один из операндов всегда адресуется неявно (он всегда берется из аккумулятора). Неявно адресуется и результат. Он также всегда помещается в аккумулятор. Варианты этих команд, имеющие однобайтовый формат, имеют вид:
ADD R сложить код из аккумулятора с кодом из регистра R;
ADC R сложить код из аккумулятора с кодом из регистра R с учетом переноса, содержащегося в бите С регистра признаков F;
SUB R вычесть код из регистра R из кода, содержащегося в аккумуляторе;
SBB R вычесть код из регистра R из кода, содержащегося в аккумуляторе с учетом заема, содержащегося в бите С регистра признаков F;
ANA R выполнить операцию поразрядного логического «И» над кодами, содержащимися в аккумуляторе и регистре R;
ORA R выполнить операцию поразрядного логического «ИЛИ» над кодами, содержащимися в аккумуляторе и регистре R;
XRA R выполнить операцию поразрядного логического «исключающего ИЛИ» над кодами, содержащимися в аккумуляторе и регистре R;
CMP R выполнить сравнение кодов, содержащихся в аккумуляторе и регистре R.
В этих командах
,
то есть второй операнд адресуется регистровым методом или косвенно.
Имеются варианты рассмотренных команд, имеющие двухбайтовый формат, и использующие непосредственную адресацию второго операнда. Это, соответственно, команды: ADI D8; ACI D8; SUI D8; SBI D8; ANI D8; ORI D8; XRI D8; CPI D8.
Поясним действие команд сравнения CMP R (CPI D8). Эти команды не меняют содержимого аккумулятора, но воздействуют на регистр признаков F точно также, как и команды вычитания SUB R (SUI D8).
Отметим, что команды сложения ADD R, ADC R, ADI D8, ACI D8 могут использоваться не только для двоичного, но и для двоичнодесятичного сложения. В последнем случае результата сложения, находящийся в аккумуляторе, должен быть скорректирован специальной командой десятичной коррекции DAA. Эту команду можно использовать только при сложении. Специальной команды коррекции результата для двоично-десятичного вычитания учебный микропроцессор не имеет.
С двухбайтовыми словами оперирует команда двухбайтового сложения DAD Rp сложить содержимое регистровой пары Rp с содержимым регистровой
HL и поместить результат в пару HL.
.
Команд умножения и деления, а также операций с плавающей точкой учебный микропроцессор не имеет.
К группе арифметикологических команд относят также команды инкремента, декремента и сдвига. Команды инкремента увеличивают, а команды декремента уменьшают на единицу содержимое регистра или регистровой пары. Такие команды имеют вид:
INR R инкрементировать регистр R;
DCR R декрементировать регистр R;
INX Rp инкрементировать регистровую пару Rp;
DCX Rp декрементировать регистровую пару Rp.
и
.
Команды сдвига будут рассмотрены отдельно.
Команды передачи управления нарушают естественный порядок выборки и исполнения команд, перезагружая новым значением счетчик команд PC. Простейшей здесь является трехбайтовая команда безусловной передачи управления JMP ADR. При выполнении этой команды в счетчик команд PC загружается адрес перехода ADR. Следующая команда выбираться из ячейки с этим новым адресом.
Широко используются команды условной передачи управления, которые можно записать обобщенной мнемоникой J CON ADR. Эти команды передают управление по адресу перехода, если выполняется условие CON, определяемое одним из битов регистра признаков F. В противном случае естественный порядок выполнения команд не нарушается. В мнемониках конкретных команд суффикс CON принимает следующие значения:
При работе с подпрограммами используют команду безусловной передачи управления с возвратом CALL ADR вызвать подпрограмму. В памяти микро-ЭВМ эта команда размещается так, как показано на рис.2.2.
Рис.2.2.Размещение в памяти микро-ЭВМ команды CALL ADR
Микропроцессор, выполняя эту команду, не только передает управление по адресу ADR, указанному в команде. Он, кроме того, запоминает в стеке адрес следующей команды . Этот адрес называют адресом возврата. После выполнения подпрограммы должен быть обеспечен возврат управления на адрес
. Для обеспечения такого возврата каждая подпрограмма заканчивается специальной командой возврата RET. Эта команда извлекает из стека адрес возврата
, записанный туда командой CALL ADR, и загружает его в счетчик команд PC.
При обработке прерываний программы, возникающих по запросам внешних устройств, часто используется однобайтовый аналог команды CALL ADR команда рестарта RST X. По этой команде в стек записывается адрес возврата , а управление передается по фиксированным адресам, кодированным числом X цифровой части мнемоники.
Имеются также команды условного вызова подпрограмм и возврата из них, имеющие обобщенные мнемоники C CON АDR и R CON. Вызов подпрограммы или возврат из нее осуществляется этими командами только, если выполняется условие CON. Здесь используются такие же условия, как и в командах условной передачи управления.
Иногда нужно передать управление по адресу, полученному в ходе вычислительного процесса. В этих случаях используется команда PCHL.Она загружает в счетчик команд PC код, находящийся в регистровой паре HL. При этом управление передается по адресу, находящемуся в этой регистровой паре.
Учебный микропроцессор позволяет организовать в ОЗУ микроЭВМ стековую память или просто стек. В такой памяти формируется своеобразная очередь из записанных кодов, а процедура обмена кодами с микропроцессором строится по принципу «последний вошел первый вышел» (LIFO).
Наглядной моделью стековой памяти является ящик с положенной в него стопкой книг (рис.2.3).
Книги здесь изображают хранимые в стеке цифровые коды. Понятно, что книга, положенная в ящик последней («последний вошел») окажется наверху стопки. Поэтому именно она будет извлечена из ящика первой (первый вышел).
Запись в стек и чтение из стека не требует указания в команде адреса записываемой или читаемой информации. Важно лишь строго соблюдать очередность записи и чтения. Стек учебного микропроцессора работает с двухбайтовыми (шестнадцатиразрядными) кодами.
Рис.2.3. Модель стековой памяти
Микропроцессор размещает (считывает) такие коды в последовательных ячейках некоторой области ОЗУ, используя косвенную адресацию с помощью регистра SP указателя вершины стека (указателя стека). Этот указатель содержит адрес (указывает на адрес) младшего байта самого последнего, самого верхнего из записанных в стек чисел.
Структура стека, в который ранее были записаны два числа A1 и A2, представлена на рис.2.4. Будем рассматривать это состояние стека как исходное.
Рис.2.4. Исходное состояние стека
При записи в стек, например, при выполнении команды CALL ADR, число А3 записывается в две свободные ячейки ОЗУ, находящиеся выше указателя, при этом указатель передвигается на новую вершину на адрес младшего байта только что записанного числа. Новое состояние стека после записи числа А3 изображено на рис.2.5.
При чтении из стека, например, командой RET из стека извлекается самое последнее, самое верхнее из записанных в стек чисел. При этом указатель стека передвигается на две позиции вниз на адрес младшего байта числа, записанного в стек перед извлеченным. Следует иметь ввиду, что только что извлеченное число все еще сохраняется в своих ячейках ОЗУ до момента записи в эти ячейки. После извлечения из стека числа А3 диаграмма стека принимает вид, показанный на рис.2.6.
Рис.2.5.Состояние стека после записи числа А3
Рис.2.6.Состояние стека после чтения числа А3
В момент включения микропроцессора все его регистры, том числе и указатель стека SP содержат произвольные коды. Поэтому для правильной работы стека его необходимо настроить на вполне определенную область ОЗУ (инициализировать).
Инициализация проводится командой непосредственной загрузки регистра SP LXI SP,D16.
Кроме рассмотренных команд вызова подпрограмм и возврата из них со стеком работают команды однобайтового формата PUSH Rp записать в стек содержимое регистровой пары Rp и POP Rp восстановить из стека содержимое регистровой пары Rp.
.
В эту группу входят команды однобайтового формата HLT останов, NOP нет операции, EI разрешить прерывания и DI запретить прерывания.
По команде «останов» выполнение операций заканчивается, выходы шины адреса и данных микропроцессора переводятся в высокоимпедансное состояние. Из состояния останова микропроцессор может быть выведен только внешними сигналами сброса RESET и прерывания INT (прерывания должны быть предварительно, до останова разрешены командой EI).
Команда NOP холостая операция, по которой никакие действия не выполняются. Она используется в качестве заполнителя пустых мест в программе (при отладке) и для организации временных задержек программным путем.
Команды пересылки кодов, передачи управления и управления микропроцессором не изменяют содержимого регистра признаков F. Из этого правила есть единственное исключение команда POP PSW. Эта команда, в частности, восстанавливает из стека содержимое регистра F и поэтому оказывает воздействие на все его биты.
По влиянию на регистр признаков все команды арифметико логической обработки можно разделить на 4 группы:
воздействуют на все признаки;
воздействуют только на признак переноса С;
воздействуют на все признаки, кроме признака переноса C;
не изменяют содержимого регистра признаков.
К первой группе относятся все команды арифметико логической обработки двух байтовых операндов (ADD R, SUB R и т. д.), а также команда десятичной коррекции аккумулятора DAA. Следует иметь в виду, что логические команды этой группы (ANA R, ANI D8 и др.) сбрасывают бит переноса С.
Ко второй группе относятся команды сложения двухбайтовых чисел DAD Rp, команды управления битом переноса STC и CMC, а также все команды сдвига.
Команда STC устанавливает признак переноса, а CMC инвертирует его.
В командах арифметического сдвига RAL и RAR бит переноса С участвует в процессе циклического сдвига информации в аккумуляторе на один разряд в качестве дополнительного (9-го) бита аккумулятора.
Работу этих команд иллюстрирует рис.2.7.
Рис.2.7.Работа команд арифметического сдвига
В командах циклического сдвига RLC, RRC тоже осуществляется циклический сдвиг аккумулятора на один разряд, но здесь в бите переноса С дублируется информация, переносимая из старшего бита аккумулятора в младший или наоборот. Работу этих команд иллюстрирует рис.2.8.
Рис.2.8.Работа команд циклического сдвига
К третьей группе относятся команды инкремента и декремента INR R, DCR R.
К четвертой группе относятся команды инкремента и декремента регистровых пар INX Rp, DCR Rp, а также команда инверсии аккумулятора CMA.
Работа микропроцессора строится на основе нескольких вложенных друг в друга циклических процедур. Наиболее крупной, длительной из них является командный цикл.
Под командным циклом понимают последовательность действий, необходимых для выполнения конкретной команды. Командные циклы микропроцессоров реализуются последовательностью машинных циклов.
Каждый машинный цикл представляет собой единичный акт взаимодействия микропроцессора со внешними по отношению к нему устройствами (ОЗУ, ПЗУ, порты ввода-вывода).
Пользователя чаще всего интересует длительность командного цикла. Ее принято измерять в машинных тактах.
Под машинным тактом понимают интервал времени между передними фронтами двух следующих друг за другом импульсов синхронизации CLK1, поступающих с тактового генератора. Длительность машинного такта, очевидно, равна периоду тактового сигнала, то есть
,
где fCLK частота тактового сигнала.
Так, если fCLK = 2MГц, Ттакт=0,5 мкс.
В системе команд учебного микропроцессора оговариваются как число машинных циклов (МЦ), так и минимально возможное машинных тактов (МТmin) в командном цикле каждой из команд. Фактическое же число машинных тактов (МТ) каждой из команд может зависеть от схемы включения микропроцессора. Так при стандартном включении
Включение, принятое в микроЭВМ Микролаб КР580 дает соотношение
Приведем для примера численные значения МЦ и МТmin для некоторых команд учебного микропроцессора (табл.2).
Из таблицы видно, что:
время расходуется на выполнение любой команды, в том числе и холостой команды NOP;
наибольшим быстродействием обладают команды с регистровой адресацией;
несколько менее эффективно сочетание регистровой адресации с непосредственной или косвенной;
наименее эффективна прямая адресация; команды с такой адресацией выполняются в несколько раз медленнее, чем с регистровой.
Таблица 2.2 МЦ и МТmin некоторых команд учебного микропроцессора
Источник