ЛЕКЦИЯ 13-14. СИСТЕМА КОМАНД МП КР580 ИК 80 А

 

Все множиство команд рассматриваемого МП можно разделить
на 7 групп: пересылки, арифметические, логические, передачи
управления, команды ввода вывода, обращение к стеку и управления процессором. В таблице 2.2. приведена вся система команд
МП, приведено краткое описание, указана длина команд в байтах,
длительность исполнения в машинных циклах, возможность управления признаками результата операции. В таблице принята следующая система обозначений: Д,
S - приемник (destination)
или источник (
source) информации, в качестве которых используются регистры МП В, С, D, Е, Н, L, аккумулятор А и ячейки памяти М (memory); data - 8 или 16-ти битные слова
данных; а
ddr - 16-ти битный адрес памяти ; - содержимое ячейки памяти или регистра МП; (SP) - содержимое указателя стекавой памяти ; port - 8-битный адрес периферийного устройства; rp - регистровая пара ВС, DE, HL или
указатель стека
sp; ССС - 3 битный код признака, используемого в командах передачи управления; n- номер команды
повторного старта,
n=0-7.

Команды, выполняемые ЭBM, представляют собой двоичные
числа, которые МП выбирает из памяти, затем декодирует их и
выполняет требуемые операции. Представленный в таблице
мнемонические обозначения команды "непонятно" для МП, но удобно и понятно программисту.

Программа, написанная с использованием мнемонических обозначений для использования ее в ЭBМ должна быть переведена в
двоичный код. Для этой цели используется специальная программа,
которая носит название ассемблер. Однако, не все микро-ЭВМ
снабжаются ассемблерами, в некоторых случаях можно обойтись
и без нее, но не вводить программу в двоичном коде, а использовать шестнадцатеричный код. Для облегчения процедуры перевода
можно воспользоваться таблицей 2.3.
Для определения кода
необходимо найти горизонталь, на которой находится кодируемая
команда, а затем вертикаль. Например, шестнадцатеричный код
команды останов
HLT - 76Н (по горизонтали - строка с цифрой
7, а по вертикали с цифрой 6).

Таблица 2.2.

Группа команд

Мнемоника команды

Описание команды

Число байт

Число машинных тактов

Признаки результат операции (флаги)

   

P

C

AC

1

2

3

4

5

6

7

8

9

10






Команды пересылки кодов

MOV D,S

(D) (S)

1

5

-

-

-

-

-

MVI D,data

(D) (data)

2

7

-

-

-

-

-

LXI rp, data

(D) (data)

3

10

-

-

-

-

-

LDA addr

(A) (addr)

3

13

-

-

-

-

-

STA addr

(addr) (A)

3

13

-

-

-

-

-

LHLD addr

L ¬ (addr),H¬ (addr+1)

3

16

-

-

-

-

-

SHLD addr

(addr) ¬ L,(addr+1) ¬ H

3

16

-

-

-

-

-

LDAX rp

A¬ (rp)

1

7

-

-

-

-

-

STAX rp

((rp)) ¬ A

1

7

-

-

-

-

-

XCHG

(H) ¬ (D), (L) ¬ (E)

1

4

-

-

-

-

-

Команды арифметической

Обработки

ADD S

(A) ¬ (A)+(S)

1

4

+

+

+

+

+

ADI data

(A) ¬ (A)+data

2

4

+

+

+

+

+

ADC S

(A) ¬ (A)+(S)+(C)

1

4

+

+

+

+

+

ACI data

(A) ¬ (A)+data+(C)

2

7

+

+

+

+

+

DAD rp

(H,L) ¬ (H,L)+(rp)

1

10

-

-

-

-

-

SUB S

(A) ¬ (A)-(S)

1

4

+

+

+

+

+

SUI data

(A) ¬ (A)-data

2

7

+

+

+

+

+

SBB S

(A) ¬ (A)-(S)-(C)

1

4

+

+

+

+

+

SBI data

(A) ¬ (A)-data- (C)

2

7

+

+

+

+

+

INR D

(D) ¬ (D)+1

1

5

+

+

+

+

+

INX rp

(rp) ¬ (rp)+1

1

5

-

-

-

-

-

DCR D

(D) ¬ (D)-1

1

5

+

+

+

+

+

DCX rp

(rp) ¬ (rp)-1

1

5

-

-

-

-

-

DAA

Десятичная коррекция

1

4

+

+

+

+

+

Команды логической обработки

 

 

 

 

 

 

Логической обработки

 

 

 

 

 

ANA S

(A) ¬ (A)^(S)

1

4

+

+

+

0

+

ANI data

(A) ¬ (A)^data

2

7

+

+

+

0

+

XRA S

(A) ¬ (A)+(S)

1

4

+

+

+

0

0

XRI data

(A) ¬ (A)+data

2

7

+

+

+

0

0

ORA S

(A) ¬ (A)^(S)

1

4

+

+

+

0

0

ORI data

(A) ¬ (A)^data

2

7

+

+

+

0

0

CMP S

(A) ¬ (S)

1

4

+

+

+

+

+

CPI data

(A) ¬ data

2

7

+

+

+

+

+

RLC

(An+1) ¬ An9(A0) ¬ (A7)

(C) ¬ (A7)

1

4

-

-

-

+

-

RRC

(An) ¬ (An+1), (A7) ¬ (A0)

(C) ¬ (A0)

1

4

-

-

-

+

-

RAL

(An+1) ¬ An, (C) ¬ (A7)

(A0) ¬ (C)

1

4

-

-

-

+

-

RAR

(An) ¬ (An+1), (C) ¬ (A0)

(A7) ¬ (C)

1

4

-

-

-

+

-

STC

(C) ¬ 1

1

4

-

-

-

1

-

CMC

(C) ¬ (C)

1

4

-

-

-

+

-

CMA

(A) ¬ (A)

1

4

-

-

-

-

-

Команды передачи управления

JMP addr

(PC) ¬ (addr)

3

10

-

-

-

-

-

Jcond addr

(PC) ¬ (addr), если условие ССС в поле истино

3

10

-

-

-

-

-

CALL

((SP)) ¬ (PC), (PC) ¬ (addr вызов подпрограммы)

3

17

-

-

-

-

-

Сcond addr

(PC) ¬ (addr),ели условие ССС в поле истино

3

11/17

-

-

-

-

-

RET

Возврат из подпрограммы (PС) ¬ ((SP))

1

10

-

-

-

-

-

Rcond

Возврат из подпрограммы, если условие ССС в поле истино

1

5/11

-

-

-

-

-

PCHL

(PC) ¬ (H,L)

1

5

-

-

-

-

-

RSTn

Команда повторного старта

1

11

-

-

-

-

-

Команды ввода вывода

IN port

(A) ¬ (port)

2

10

-

-

-

-

-

OUT port

(port) ¬ (A)

2

10

-

-

-

-

-

Команды работы со стеком

PUSH rp

(SP) ¬ (rp)

1

11

-

-

-

-

-

PUSH PSW

(SP) ¬ (A) и флаговый регистр (Z, S, P, C, AC)

1

11

-

-

-

-

-

POP rp

(rp) ¬ ((SP))

1

10

-

-

-

-

-

POP PSW

Востановление флагового регистра I, Z, S, P, C, AC) и (A) ¬ ((rp))

1

10

+

+

+

+

+

XTHL

(H, L) ¬ (SP)

1

18

-

-

-

-

-

SPHL

(SP) ¬ (H, L)

1

5

-

-

-

-

-

Команды управления МП

EI

Разрешение прерывания

1

4

-

-

-

-

-

DI

Завершение прерывания

1

11

-

-

-

-

-

HLT

Останов

1

7

-

-

-

-

-

NOP

Пустая команда

1

4

-

-

-

-

-

 

 

 

2. MOV B, A

По этой команде в регистр В посылается содержимое аккумулятора. Команда имеет длину один байт.

3. LDA 4220H.

По этой команде из ячейки 2042Н читается второй операнд
и загружается в аккумулятор.

4. ADD В

По этой команде к содержимому аккумулятора прибавляется содержимое регистра В. Команда имеет длину один байт.

5. S ТА 4320Н

По этой команде содержимое аккумулятора посылается в
ячейку 2043Н. Команда имеет длину три байта.

6. HLT

Эта команда является последней и останавливает процесс.
Команда LDA и SТА требуют задания 16-битного адреса,
в МП К580 младшие 8 бит адреса помещаются в первой ячейке,
а старшие 8 бит - во второй ячейке.

Пример 2. Разделение слова на части для выделения из одного байта двух шестнадцатеричных чисел, одно число в старшем полубайте, второй в младшем полубайте.

Программа должна из исходного восьмиразрядного двоичного плова выделить четыре младших разряда и отправить их в
ячейку 2041, а старшие разряды помещаются на место младших
и затем в ячейку 2042. Задача решается следующим образом:

Шаг 1. Прочитать в аккумулятор чисел из ячейки 2040Н.
Шаг 2. Выполнить логическую операцию,
"U" над содержимым аккумулятора и двоичной константой 00001111. В результате младшие четыре бита исходного слова сохраняются без изменений (поскольку 0^1=0 и 1^1=1),а старшие биты станут равными нулю, (поскольку 0^0=0 и 1^0=0).

Шаг 3. Послать содержимое аккумулятора в ячейку 204IH.
Шаг 4. Вновь прочитать число из ячейки 2040Н.
Шаг 5. Произвести сдвиг содержимого аккумулятора на 4
бита вправо, с тем чтобы старшие разряды оказались на месте
младших.

Шаг 6. Выполнить логическую операцию "U" над содержимым аккумулятора и двоичной константой 00001111.

Шаг 7. Послать содержимое аккумулятора в ячейку 2042.
В виду того, что для размещения исходного числа и результатов преобразования используются смежные ячейки, отличающиеся
адресом на
"I" , для обращения к ним можно использовать
регистр
HL, как регистр косвенно-регистровой адресации.
Программа имеет следующий вид:

LXI Н,4020Н; Загрузить в аккумулятор исходные данные;
MOV А,М
MOV В, А; Запомнить данные в РОН для последующей обработки

ANI OF H; Замаскировать следующую цифру
INX Н; Записать в ячейку 2041 младшую
MOV M,
А; 16-ричную цифру
MOV А,В; Четырехкратный циклический сдвиг
RRC; вправо исходного числа, которое хранилось в регистре В
RRC;

RRC
RRC

ANI OFH; Замаскировать младшую цифру, которая находите я после сдвига на месте старшей
IMX Н; Запомнить старшую цифру в ячейке; 2042
MOV
М,А
HLT

В программе на шаге 1 после чтения исходное число запоминается в регистре В РОН. Это позволяет на шаге 4 не
производить повторного чтения исходного числа из памяти.

Га с смотренные примеры простых программ позволяют отметить следующие особенности в программировании для Ш К680:

1. Основная часть операций по обработке информации производится над содержимым аккумулятора. Программа начинается с
загрузки исходных данных из памяти в аккумулятор и завершается запоминанием результата в ЗУ.

2. При составлении программ следует стремиться к сокращению числа обращений к памяти для чего необходимо запоминать промежуточные данные в РОН.

3. Число обращений к памяти может быть уменьшено за
счет косвенной адресации с помощью пар регистров
HL, DЕ,
ВС. Для чего следует исходные данные и результаты размещать
в смежных ячейках памяти. Косвенная адресация позволяет использовать короткие команды например, команда
MOV А,М-
однобайтовая.

3. С помощью команды ЛОГИЧЕСКОЕ И можно обнулять некоторые разряды обрабатываемых слов, что дает возможность работать с данными, имеющими длину, меньшую длины ячейки памяти.

4. С помощью команды сдвига можно осуществлять перемещение данных из одних разрядов в другие в целях их обработки.

В реальных технических системах таких, как например, узлы
коммутации задача обработки выполняется не над отдельными данными, а требуют обработки большим массивов данных или отдельных
элементов, которые занимают несколько ячеек памяти.

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

Все циклы имеют стандартную конструкцию, которая приведена в виде блок-схемы на рис. 2.6.

Пример 3. Необходимо разместить нули в шестнадцати ячейках, начиная с адреса 2040, а по адресу 2040 + F записать
число
FFH.

Процесс заполнения памяти выполняется следующим образом.

Шаг 1. Очистить аккумулятор, установить указатель в
начало массива ячеек.

Шаг 2. Записать 0 в указанную указателем ячейку памяти.

Шаг 3. Модифицировать указатель и счетчик числа обнуляемых ячеек памяти.

Шаг 4. Проверить, не выполнен ли цикл заданное число
раз. Если нет, то повторить шаг 2.

Шаг 5. Записать в ячейку число FF и закончить выполнение программы.

 

Риc. 2.6 .Стандартна я блок-схема циклической программы.

Для выполнения описанной последовательности можно пользоваться следующей программой :

XRA А ; Очистить аккумулятор

LXI H, 4020H; Установить указатель на адрес; 2040
MVI В, OFH ;Установить счетчик числа обнуляемых ячеек памяти
LOO: MOV М,А ;Записать "0" в ячейку памяти

IMX H, ; Модификация указателя и счетчика

DCR В

JNZ, LOO ;Проверить завершение записей 0 в ЗУ

MVI M, FFH ;Записать в ЗУ число FF

 

может быть выполнен следующим образом:

Шаг 1. Установить указатели начала массива передаваемых
данных и начала области памяти, куда производится пересылка. Установить счетчик числа передаваемых байт.

Шаг 2. Прочитать байт из одной области памяти и записать в другую.

Шаг 3. Произвести модификацию указателей и счетчика переданных байт.

Шаг 4. Проверить не завершена ли передача данных. Если
не завершена перейти к шагу 2. В противном случае закончить
процесс.

Ниже приводится программа, составленная по указанному
алгоритму :

LXI Н,2040Н; Установить указатели массивов
LXI D.2240H;и счетчик пересылаемых байт
MVI В, OFH

LOO: MOV А, М; Прочитать байт из памяти и запи сать его по новому адресу

SТАХ D

INX Н; Модифицировать указатели и счетчик переданных байт

INX D

DCR В

JNZ LOO

HLT

 

Во многих областях применения микропроцессорам приходится производить обработку символической информации. Такая задача встречается при организации работы с клавишными пультами,
телетайпами, печатающими устройствами, цифровыми линиями связи,

измерительными приборами и т.д. При связи со стандартными цифровыми

устройствами используются специальные коды, например КОИ-7, который

является национальным вариантом, стандартногокода обмена информацией. Для представления алфавитноцифровых
и служебных символов используется семиразрядный двоичный код.
В таблице 2.4. приведен код КОЙ-7 и указано соответствие его
цифрам и буквам латинского и русского алфавита. Для кодирования этих символов в таблице приведены двоичные и шестнадцатеричные коды. Таблица 2.4. представляет собой матрицу с 16