Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MP_practicum.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
924.67 Кб
Скачать

1.1.1. Команды пересылок

Эти команды делятся на команды однобайтовых или двухбайтовых пересылок и команды обмена байтами. Типичным примером команды однобайтовой пересылки служит команда межрегистровой пересылки, мнемонический код которой имеет вид . В левой части, до двоеточия записан мнемонический код команды, а справа – его реализация, также записанная в некоторой символической форме. Буквы MOV взяты из двух английских слов move register (осуществить пересылку между двумя регистрами). Команды – это группа операций, отличающихся друг от друга названиями регистров, между которыми осуществляется пересылка. В частности, на место буквы R в мнемоническом коде подставляется имя конкретного регистра, из которого осуществляется пересылка, а на место символов Rl – регистра, в который осуществляется пересылка. Все только что сказанное символически изображено в виде записи . Значок всегда обозначает помещение слова в запоминающую ячейку или регистр, имя которой указано у острия стрелки. Имеется в виду, что передаваемое слово извлекается из запоминающей ячейки или регистра, имя которой указано с противоположной стороны стрелки. Для указанной группы команд межрегистровых пересылок, использующей регистровую адресацию, однобайтовая команда имеет следующий вид: . Два левых (старших) разряда образуют код операции пересылки, три разряда, обозначенные буквами DDD, соответствуют коду регистра – приемника информации (destination), а разряды, обозначенные буквами SSS, – коду регистра-источника информации (source). Коды регистров определяются согласно табл.1.

Всего в системе команд имеется 63 команды типа MOV, которые можно представить в виде табл.2. В заголовке каждой строки даны комбинации из четырех старших двоичных символов кода операций, а в заголовке каждого столбца – комбинации

Таблица 1

Десятичный код регистра

Источник-приемник

Наименование регистра

0

000

B

1

001

C

2

010

D

3

011

E

4

100

H

5

101

L

6

110

M

7

111

A

из четырех младших двоичных символов кода операций. Например, первая строка табл.2 имеет заголовок 0100, третий слева столбец – 0010. На пересечении первой строки и третьего столбца имеем команду . По этой команде, имеющей код , восьмиразрядное двоичное слово из регистра D пересылается в регистр B и заменяет ранее находившееся там слово. При этом содержимое регистра D сохраняется – это общее условие для всех пересылок. Рассмотренная комбинация и все остальные, перечисленные в табл.2, не являются кодами операции в чистом виде, поскольку в неявной форме они содержат и адреса регистров. Это специфическая особенность набора команд микропроцессора К580ВМ80А.

Таблица 2

Код

0000

0001

0010

0011

0100

0101

0110

0111

0100

MOV В,В

MOB В ,С

MOV B,D

MOV B,E

MOV B,H

MOV B,L

MOV B,M

MOV B,A

0101

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 H,B

MOV H,C

MOV H,D

MOV H,E

MOV H,H

MOV H,L

MOV H,M

MOV H,A

0111

MOV M,B

MOV M,C

MOV M,D

MOV M,E

MOV M,H

MOV M,L

HLT

MOV M,A

Код

1000

1001

1010

1011

1100

1101

1110

1111

0100

MOV C,B

MOV C,C

MOV C,D

MOV C,E

MOV C,H

MOV C,L

MOV C,M

MOV C,A

0101

MOV E,B

MOV E,C

MOV E,D

MOV E,E

MOV E,H

MOV E,L

MOV E,M

MOV E,A

0110

MOV L,B

MOV L,C

MOV L,D

MOV L,E

MOV L,H

MOV L,L

MOV L,M

MOV L,A

0111

MOV А,В

MOV A,C

MOV A,D

MOV A,E

MOV A,H

MOV A,L

MOV A,M

MOV A,A

При последовательном просмотре табл.2. должно возникнуть недоумение при чтении команды с кодом операции , поскольку мнемонический код этой команды соответствует операции . Это значит извлечь слово из регистра В и поместить его в тот же регистр. Только в регистр помещается не само слово, а его инверсия, то есть другое слово, в котором все единицы исходного заменены нулями, а все нули – единицами. Например, инверсией слова будет . В этом случае в операции участвуют не два, а один регистр общего назначения (РОН). Предыдущее содержимое уничтожается и вместо операции пересылки выполняется операция инверсии. Аналогичные операции имеются и для других регистров.

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

Коду операции соответствует мнемонический код . Буквой А в данном случае обозначен регистр-аккумулятор (он же регистр результата). По этой команде содержимое регистра-аккумулятора будет скопировано в регистр В.

Четвертая сверху строка табл.2 обозначена комбинацией 0111. Первые шесть команд этой строки означают, что содержимое соответствующего регистра В, С, D, E, H или L передается в ячейку памяти M, адрес которой записан в паре регистров HL. Имеет смысл только сделать замечание относительно команд с кодами и . Каждая из них предусматривает, что в ячейку памяти с некоторым адресом должна быть передана половина этого адреса. Вряд ли можно представить себе программу, в составе которой понадобится такая операция. Однако проще иметь в перечне пару команд, никогда не используемых, чем предусматривать специальные меры, запрещающие появление подобных комбинаций.

Команда с кодом операции не относится к рассматриваемому классу. Это команда останова HLT, по которой прекращается выполнение каких бы то ни было операций.

Команды последней строки табл.2 предусматривают передачу в регистр-аккумулятор содержимого любого из РОН или ячейки памяти M, адрес которой хранится в регистровой паре HL, или, наконец, содержимого того же регистра-аккумулятора, но с инверсией.

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

Операции . Наличие символа D8 означает, что сама команда имеет двухбайтовый формат. Смысл этого семейства операций в том, что операнд D8, то есть содержимое второго байта команды, передается в регистр, имя которого стоит на месте символа R. Всего таких команд восемь. Они позволяют записать операнд в любой из РОН, в ячейку памяти M, адрес которой хранится в регистровой паре HL, или в регистр-аккумулятор. Сам мнемонический код MVI происходит от английских слов move immediate (переслать слово, входящее непосредственно в состав команды).

Семейство операций . STAX расшифровывается как store accumulator indirect (осуществить косвенное размещение содержимого аккумулятора). Символом YZ обозначается содержимое регистровой пары ВС или DE, М(YZ) – ячейка памяти с адресом, помещенным в скобки после буквы М. В данном случае это ячейка памяти, адресом которой является содержимое регистровой пары, а имя помещено на место символов YZ. Содержимое регистра-аккумулятора передается в соответствующую ячейку памяти. Всего таких команд две, которые соответствуют двум возможным различным регистровым парам. Эти команды имеют однобайтовый формат, так как согласно существующему условию регистровую пару, если известно, что это именно пара, можно называть лишь именем первого регистра, то есть мнемонические коды команд будут иметь вид либо , либо .

Семейство команд . LDAX обозначает load accumulator indirect (загрузить аккумулятор косвенно), то есть осуществить пересылки аналогичные предыдущему семейству, но в противоположную сторону.

Команда . STAstore accumulator direct (осуществить прямое размещение содержимого аккумулятора). Команда имеет трехбайтовый формат. Содержимое регистра-аккумулятора передается в ячейку памяти М, адрес которой записан во втором и третьем байтах команды.

Команда . STAload accumulator direct (загрузить аккумулятор прямо). Команда по своему смыслу является обратной к предыдущей.

Команда означает, что содержимое регистровой пары HL передается в регистр-указатель стека SP (stack pointer).

Следующую подгруппу команд составляют команды двухбайтовых пересылок. Символические обозначения первых трех команд двухбайтовых пересылок имеют следующий вид:

;

;

.

Первая из этих команд не требует комментариев с тем исключением, что буквами YZ обозначается содержимое регистровых пар ВС, DE, HL или регистра SP. По второй команде содержимое регистровой пары HL передается в две соседние ячейки памяти. Подобный прием является типовым. Во всех операциях, выполняемых над словом длиной два байта, если при этом участвует память, указывается адрес одной ячейки, а обращение производится к двум соседним. Третья команда по смыслу противоположна предыдущей команде.

Рассмотрим две оставшиеся команды двухбайтовых пересылок. Их символические описания имеют вид:

;

.

Символ YZ обозначает содержимое регистровой пары ВС, DE, HL или регистра слова состояния PSW. Команда PUSH предусматривает пересылку содержимого одной из перечисленных регистровых пар в две соседние ячейки памяти M(SP-1) и M(SP-2). При этом в регистр-указатель стека также засылается адрес последней ячейки памяти. Данные действия представляют типичную операцию заполнения стека. Смысл стековой организации памяти состоит в том, что к моменту начала любой операции в регистре-указателе стека хранится адрес последней занятой ячейки. Команда POP по смыслу противоположна команде PUSH.

К командам пересылок относятся также команды обмена байтами. Символические описания данных команд следующие:

; .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]