Строительный блокнот  Развитие полупроводниковой электроники 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [ 26 ] 27 28 29 30 31 32 33 34 35 36 37

л&

ABR ШБ)

Рис. 4.1. Форматы одиобайтной двухбайтной (б) и трехбайтной коиаид

(а), (в)

операнда, обозначенного на рисунке как D8. Напомним, что операндом называется лово, над которым непосредственно выполняется операция, предусмотренная кодом операции. Наконец, трехбайтная команда имеет формат, показанный на рис. 4.1,в. Она также состоит из двух частей, одна из которых - длиной в 1 байт - это код операции, а вторая - длиной в 2 байта -может быть либо адресом (в этом случае она обозначается буквами ADR), либо 16-разрядным операндом D16.

Код операции, являясь 8-разрядным двоичным словом, может принимать 2=256 смысловых значений. Почти столько же различных команд входит в состав рассматриваемого набора. Различать между собой отдельные последовательности из 8 двоичных символов достаточно трудно. Поэтому в литератур при описании наборов команд пользуются мнемоническими обозначениями, ил мнемоническими кодами. Обычно мнемонический код -это несколько букв вз

какого-либо алфавита, сочетание которы? напоминает некоторое слово нли фpaзf нг русском, английском нлн другом языке. Мь будем пользоваться мнемоникой, основан ной на английском языке (эта мнемоинк! принята во всех описаниях процессор? КР580ИК80А). Конечно, для советского чи тателя использование английской мнемоии кн представит известные неудобства, ш здесь имеется и определенный смысл. Ав глийская мнемоника в настоящее время яв-ляется международной. Освоившись с ней, вы сразу получаете возможность ра ботать с программами независимо от того, в какой стране оин составлены.

По назначению (об этом уже говорилось в гл. 2) команды делятся на пяп групп: команды пересылок, арифметико-логические команды, команды ввода-вы вода, команды управления и специальные команды.

Команды пересылок. Они в свою очередь делятся на однобайтовые, двухбайтовые пересылки и команды обмена байтами. Типичным примером комач ды однобайтовой пересылки служит команда межрегистровой пересылки, мнемо нический код которой имеет вид

Оетановимся на этом подробнее, чтобы полностью освоиться с мнемокодами. В левой части (до двоеточия) выписан мнемонический код команды, а справа - его значения, также записанные в некоторой символической форме. Буквы MOV взяты из двух английских слов Move register*, что и означает осуществить пересылку между двумя регистрами , MOV R1, R - это родовое имя целой группы операций, отличающихся друг от друга конкретными регистрами, между которыми осуществляется пересылка. В частности, на место буквы R в мнемоническом коде подставляется имя конкретного регистра, из которого осуществляется пересылка, а на место символов R1-регистра, в который осуществляется пересылка. Все только что сказанное символически изображено в виде R- -Rl. Значок ~>- всегда обозначает помещение слова в запоминающую ячейку (или региетр), имя которой указано у острия стрелки. Имеется в виду, что передаваемое слово нзвлвкаетея нз запоминающей ячейки (нли регистра), имя которой указано около хво та втрелка.



Коибв-

0000

8001

0011

0100

0101

0110

0100

MOV в,в

MOB в,с

MOV B.D

MOV B,E

MOV B,H

MOV B.L

MOV B,M

MOV B,A

oiai

MOV D,B

MOV D,C

MOV D,D

MOV D,E

MOV D,H

MOV D,L

MOV D.M

MOV D,A

0110

MOV н,в

MOV н.с

MOV H,D

MOV H,E

MOV H,H

MOV H,L

MOV H,M

MOV H,A

0111

MOV МЗ

MOV м,с

MOV M,D

MOV M,E

MOV M,H

MOV M,L

MOV M,A

Комбн-нации

1000

1001

1010

1011

1100

1101

1110

0100

MOV с,в

MOV сс

MOV CD

MOV CE

MOV cH

MOV CL

MOV CM

MOV CA

0191

MOV Е.В

MOV Е,С

MOV E,D

MOV E.E

MOV E,H

MOV E,L

MOV E,M

MOV E.A

MOV L,B

MOV L,C

MOV L,D

MOV L,E

MOV L,H

MOV L.L

MOV L,M

MOV L,A

011 1

MOV А,в

MOV A,с

MOV A,D

MOV A,E

MOV A,H

MOV A.L

MOV A,M

MOV A,A

Всего в составе набора имеется 63 команды типа MOV. Приведем нх все и представим в виде табл. 4.1. В этой таблице в заголовке каждой строки дапы комбинации из четырех старшях (т. е. крайних левых) двоичных символов истинного кода операций, а в заголовке каждого столбца - комбинации из четырех младших (крайних справа) двоичных символов истинного кода операций. Например, первая строка таблицы имеет заголовок 0100, третий слева столбец -0010. На пересечении первой строки и третьего столбца читаем: MOV В, D. Это означает, что команда с кодом операции 0100 0010 вызывает пересылку еодержимого регистра D в регистр В. Стбит подчеркнуть, что В и D - это совершенно конкретные РОН процессора. Иначе говоря, комбинация двоичных символов 0100 й 0010 может быть воспринята, а соответствующий код операции исполнен процессором без каких-либо дополнительных пояснений. Восьмиразрядное двоичное слово нз регистра D пересылается в В и заменяет ранее находившееся там слово. При этом содержимое регистра D сохраняется неизменным - это общее условие для всех пересылок, о котором мы забыли упомянуть раньше.

Рассмотренная комбянавдя 0100 0010, как н все остальные, перечисленные в табл. 4.1, ие ивляются кодами онравнн в чистом в виде, яоекольку в неявной



форме они содержат и адреса, в данном случае адреса регистров. Это может быть и малозначительная, но специфическая особенность набора команд микро процессора. Ради таких особенностей мы и предприняли столь подробное опи- ание перечня команд.

Давайте последовательно просматривать табл. 4.1. Первое недоумение дол жно возникнуть при чтении команды с кодом операции 0100 0000. Укажем еще раз, что мнемонический код этой команды расположен на пересечении верхней етроки (заголовок 0100) и крайнего слева столбца (заголовок 0000). В дальнейшем просим читателя самостоятельно отыскивать по коду операции его мне ионический код.

Итак, операция MOV В, В. Что это значит? Извлечь слово из регистра В и поместить его в тот же регистр? Да. Только в регистр помещается ие само слово, а его инверсия, т. е. другое слово, в котором все единицы исходного заменены нулями, а все нули - единицами. Например, инверсией слова 0100 0010 будет 1011 1101. В этом случае в операции участвуют не два, а один РОН. предыдущее содержимое уничтожается я кроме операции пересылки выполняется операция инверсии. В этом смысле операция с кодом 0100 0000 существенно отличается от большинства других, перечисленных в табл. 4.1. Но этот елучай не единичный. Например, операция с кодом 0100 1001 предусматривае! замену на инверсию только содержимого регистра С. Читатель легко обнаружит в остальные аналогичные случаи.

Будем, однако, последовательно двигаться вдоль верхней строки табл. 4.1 Следующее недоумение возникнет, когда мы дойдем до кода операция ОЮС ОНО, Мнемонический код этой операции имеет вид: MOV В, М. Но регистре М в процессоре нет! Правильно. Буквой М обозначается ячейка памяти. В дан ном контексте буква М обозначает не всякую ячейку памяти, а совершение конкретную, ячейку памяти, адрес которой хранится в паре регистров HL.

Следовательно, код операции 0100 ОНО требует выполнения такой последо вательностн действий, извлеки содержимое пары регистров HL, используй его г качестве адреса памяти н извлеки по этому адресу содержимое соответствующей ячейки, помести это содержимое в регистр В процессора. Содержимое ячейкт памяти при этом остается неизменным - это общее правило.

Следующий столбец таблицы - н снова недоумение. Коду операции 0100 0111 соответствует мнемонический код MOV В, А. Ничего особенного! Просто буквой А в данном случае обозначен регистр-аккумулятор (он же регистр ре зультата или регистр РА на рис. 2.7). По этой команде содержимое регистра-аккумулятора будет передано в регистр В, но, конечно, сохранится и в самом аккумуляторе Теперь до самого конца верхней строки не встретится никаких трудностей. Все знакомо. Не встретится никаких трудностей и при просмотре второй и третьей сверху строк табл. 4.1. Правда, мы все же советуем читателю внимательно просмотреть эти строки.

Четвертая сверху строка таблицы озаглавлена комбинацией 01 П. Первые шесть команд этой строки означают, что содержимое соответствующего регистра В, С, D, Е, Н Или L передается в ячейку памяти, адрес которой записан в паре регистров HL. Все достаточно привычно. Имеет смысл только сделать замечание относительно команд с кодами 0111 0100 и 0111 0101. Каждая из них предусматривает, что в ячейку памяти с некоторым адресом должна быть передана половина этого адреса. Вряд ли можно представить себе программу, в составе которой понадобится такая операция. Здесь снова своеобразная специ-



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [ 26 ] 27 28 29 30 31 32 33 34 35 36 37