logo
МП устройства СУ / Конспект лекций

4.2. Система команд однокристального микропроцессора.

При рассмотрении системы команд типового однокристального МП будем стремиться к обобщенному изложению материала, не привязывая команды к конкретному типу МП. Все приведенные в параграфе группы команд и сами команды присущи как правило всем МП. Конкретизация команды под определенный тип МП заключается в ее мнемоническом обозначении, используемых регистрах, формате команды, способе адресации данных и ряде других особенностей. Кроме того, описанные в разделе команды в минимальном объеме представляют основные функциональные группы команд большинства МП. В конкретных МП указанные группы представляются более полным набором, являющимся индивидуальными для каждого типа МП. При разборе примеров использования команд будем пользоваться все теми же условными аккумулятором А и регистрами общего назначения В и С, а также внешним регистром M, организованным в ячейке памяти.

Следует отметить, что передача данных как между внутренними регистрами МП, так и между МП и периферийными модулями всегда осуществляется с сохранением содержимого источника информации. Для удобства сведем все рассматриваемые команды в табл. 4.1.

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

Таблица 4.1. Типичный обобщенный набор команд однокристального МП.

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

Условное обозначение

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

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

Кодов

1. MOV r1, r2

(r1)  (r2)

2. MVI r, data

(r)  ОПЕРАНД

3. LXI rp, data

(rp)  ОПЕРАНД

4. STA addr

[АДРЕС]  (A)

5. LDA addr

(A)  [АДРЕС]

6. STAX rp

[rp]  (A)

7. LDAX rp

(A)  [rp]

8. PUSH r

[SP]  (r)

9. POP r

(r)  [SP]

Команды выполнения арифметических операций

1. ADD r

(A)  (A) + (r)

2. SUB r

(A)  (A) - (r)

3. ADI data

(A)  (A) + ОПЕРАНД

4. SUI data

(A)  (A) – ОПЕРАНД

5. ADC r

(A)  (A) + (r) + (С)

6. SBB r

(A)  (A) - (r) - (С)

7. ACI data

(A)  (A) + ОПЕРАНД +(С)

8. SBI data

(A)  (A) – ОПЕРАНД - (С)

9. DAA

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

10. INR r

(r)  (r) + 1

11. DCR r

(r)  (r) – 1

12. INX rp

(rp)  (rp) + 1

13. DCX rp

(rp)  (rp) – 1

Команды выполнения логических операций

1. ANA r

(A)  (A)  (r)

2. ANI data

(A)  (A)  ОПЕРАНД

3. ORA r

(A)  (A)  (r)

4. ORI data

(A)  (A)  ОПЕРАНД

5. XRA r

(A)  (A)  (r)

6. XRI data

(A)  (A)  ОПЕРАНД

7. CMA

(A)  ()

8. CMP r

(A) – (r)

9. CPI data

(A) – ОПЕРАНД

10. RLC

(ai+1)  (ai)

(a0)  (aN)

(C)  (aN)

11. RRC

(ai)  (ai+1)

(aN)  (a0)

(C)  (a0)

12. RAL

(ai+1)  (ai)

(a0)  (C)

(C)  (aN)

13. RAR

(ai)  (ai+1)

(aN)  (C)

(C)  (a0)

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

1. JMP addr

(PC)  АДРЕС

2. J-CON addr

(PC)  АДРЕС

3. CALL addr

[SP]  (PC)

(PC)  АДРЕС

4. C-CON addr

[SP]  (PC)

(PC)  АДРЕС

5. RET

(PC)  [SP]

6. R-CON

(PC)  [SP]

Команды ввода-вывода и специальные

1. IN port

(A)  [АДРЕС]

2. OUT port

[АДРЕС]  (A)

3. EI

Разрешить прерывание

4. DI

Запретить прерывание

5. NOP

(PC)  (PC) + 1

6. HLT

Останов

Теперь перейдем к рассмотрению особенностей выполнения и использования отдельных команд.

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

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

1. Команда MOV r1,r2. Это команда с прямой регистровой адресацией данных. По этой команде содержимое регистра r2 переписывается в регистр r1, причем содержимое регистра r2 сохраняется. Например, после выполнения команды MOV C, А данные из регистра А будут переписаны в регистр С. Содержимое регистра А не изменится.

В качестве регистра r в некоторых МП может рассматриваться и ячейка памяти, адрес которой находится в регистровой паре или специальном адресном регистре. Такая ячейка памяти выполняет роль внешнего регистра, который обозначается через М. Например, команды с косвенной регистровой адресацией данных MOV М, r и MOV r, М осуществляют пересылку данных из регистра r во внешний регистр М и в обратном направлении соответственно. В частности, по команде МОV М, С данные из регистра С пересылаются во внешний регистр М. При этом данные в регистре С сохраняются. По команде MOV А, М произойдет пересылка данных из внешнего регистра М в регистр А. Содержимое внешнего регистра М при этом не изменится.

2. Команда MVI r, data является командой с непосредственной адресацией данных. Эта команда обеспечивает загрузку любого регистра, в том числе и внешнего регистра М операндом, присутствующим в команде. Например, по команде MVI B, 2BH в регистр В загружается число 2В16.

3. Команда LXI rp, data аналогична предыдущей, но отличается тем, что загружает любую регистровую пару, а также указатель стека SP или адресные регистры указанным в команде операндом. Команда LXI В, data используется, например, для записи в регистровую пару ВС адреса ячейки памяти, которую предполагается рассматривать в качестве внешнего регистра М.

4. Команда STA addr является командой с прямой адресацией данных и предназначена для передачи байта информации из аккумулятора в ячейку памяти, адрес которой указан в команде.

5. Команда LDA addr осуществляет пересылку информации в обратном направлении, т.е. из ячейки памяти, адрес которой указан в команде в аккумулятор.

6. Команда STAX rp - это команда с косвенной регистровой адресацией данных. Она предназначена для передачи данных из аккумулятора в ячейку памяти, адрес которой содержится в регистровой паре или специальном адресном регистре, указанными в команде.

7. Команда LDAX rр осуществляет передачу данных в обратном направлении, т.е. из ячейки памяти, адрес которой указан в регистровой паре или адресном регистре в аккумулятор.

8. Команда PUSH r (или PUSH rp) является командой со стековой адресацией. Она засылает в стек содержимое указанных в команде регистров или регистровых пар.

9. Команда POP r (или POP rp) является также командой со стековой адресацией и осуществляет пересылку данных в обратном направлении, т.е. из стека в регистры или регистровые пары.

Команды выполнения арифметических операций.

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

1. Команда АDD r - команда с прямой регистровой адресацией данных. Данная команда содержимое регистра r складывает с содержимым аккумулятора. Результат выполнения команды помещается в аккумулятор. Команда ADD A удваивает содержимое аккумулятора.

2. Команда SUB r также как и предыдущая является командой с прямой регистровой адресацией данных. Эта команда содержимое регистра r вычитает из содержимого аккумулятора. Результат выполнения команды как и в предыдущем случае помещается в аккумулятор. Команда SUB А производит вычитание из аккумулятора его содержимого, т.е. в результате выполнения команды SUB A во всех разрядах аккумулятора будут нули.

3. Команда АDI data является командой с непосредственной адресацией данных. Команда складывает с содержимым аккумулятора операнд, указанный в команде. Результат помещается в аккумулятор.

4. Команда SUI data в отличии от предыдущей команды из содержимого аккумулятора вычитает операнд, указанный в команде. Результат помещается в аккумулятор.

5. Команда ADС r является командой сложения, аналогичной команде ADD r. Отличие заключается в том, что при сложении содержимого аккумулятора и регистра r учитывается значение признака переноса С.

6. Команда SBB r - команда вычитания из содержимого аккумулятора содержимого регистра r, как и в команде SUB r, но с учетом значения признака переноса C.

7. Команда ACI data складывает операнд, присутствующий в команде с содержимым аккумулятора с учетом значения признака переноса С.

8. Команда SBI data вычитает из содержимого аккумулятора операнд, записанный в команде с учетом значения признака переноса C.

Команды ADС r, SBB r, ACI data, SBI data используются для получения результатов повышенной точности, т.е. при работе с числами, разрядность которых больше одного слова. Например, при сложении двух чисел с длиной в два слова сначала складываются их младшие слова с помощью команды ADD r или ADI data. При этом может образоваться перенос из старшего разряда младшего слова суммы. Затем с помощью команды АDС r или ACI data производится сложение старших слов чисел. Если перенос имел место, то единица, занесенная в разряд признака переноса С регистра признаков будет участвовать в сложении старших слов.

Аналогично организуется вычитание многоразрядных чисел. Если, например, при вычитании младших слов двух чисел с длиной в два слова, производимом с помощью команды SUB r или SUI data возникает заем из старшего разряда, то в разряд признака переноса С заносится единица, которая должна учитываться при вычитании старших слов этих чисел. С этой целью для вычитания старших слов используется команда SBB r или SBI data.

Следует иметь в виду, что если после выполнения сложения двух чисел признак переноса С будет равен единице, то эту единицу следует приписать к полученному результату слева, т.е. рассматривать ее как значение самого старшего разряда результата. Если после вычитания двух чисел признак переноса С окажется равным единице, то полученный результат является отрицательным и представлен в дополнительном коде, а если С=0, то результат положительный и представлен в прямом коде.

9. Команда DAA - команда десятичной коррекции. Поскольку АЛУ складывает числа по правилам двоичной арифметики, то и двоично-десятичные числа будут складываться по этим правилам. Для того, чтобы в этом случае получить результат в виде двоично-десятичного числа необходимо ввести соответствующие поправки. Такие поправки вводятся с помощью команды DАА. Команда DAA используется непосредственно после команды, осуществляющей сложение двух чисел. Для коррекции результата вычитания команда DАА не может быть использована. Сущность коррекции, выполняемой командой DAA, заключается в следующем. Результат сложения разбивается на тетрады (группы по четыре разряда). Начиная с младшей тетрады и двигаясь в направлении к старшим производятся следующие действия. Если значение тетрады результата больше девяти или, если был перенос 1 в следующую тетраду результата, то к тетраде результата прибавляется число 6.

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

10. Команда INR r изменяет содержимое регистра r на +1.

11. Команда DCR r изменяет содержимое регистра r на -1.

12. Команда INX rp изменяет содержимое регистровой пары rp на +1.

13. Команда DCX rр изменяет содержимое регистровой пары rp на -1.

Команды выполнения логических операций.

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

Напомним предворительно правила выполнения основных операций Булевой алгебры-логики. Результатом операции поразрядного логического умножения (операции “И”) является двоичное число, отдельные разряды которого равны 1 только тогда, когда соответствующие разряды обоих операндов равны 1. Результатом операции поразрядного логического сложения (операции “ИЛИ”) является двоичное число, отдельные разряды которого равны 1 в случае, когда в соответствующих разрядах исходных операндов присутствует хотя бы одна единица. Результатом операции поразрядного логического сложения по модулю 2 (операции “ИСКЛЮЧАЮЩЕЕ ИЛИ”) является двоичное число, отдельные разряды которого равны 1 только тогда, когда соответствующие разряды исходных операндов имеют противоположные значения.

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

Первый операнд

1

0

1

0

0

1

0

1

Второй операнд

1

1

0

0

1

1

0

0

Результаты операций

1

0

0

0

0

1

0

0

1

1

1

0

1

1

0

1

0

1

1

0

1

0

0

1

1. Команда АNА r выполняет операцию поразрядного логического умножения (операцию “И”) содержимого аккумулятора и регистра r.

2. Команда ANI data также выполняет операцию поразрядного логического умножения, но над содержимым аккумулятора и операндом, присутствующим в команде. Если необходимо, например, выделить третий разряд в байте, находящимся в аккумуляторе, а остальные его разряды обнулить, то производят операцию поразрядного логического умножения с маской, в третьем разряде которой записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: ANI 00000100B. Символ “B” в конце операнда-маски информирует о двоичной форме его записи.

3. Команда ОRА r выполняет операцию поразрядного логического сложения (операцию “ИЛИ”) содержимого аккумулятора и регистра r.

4. Команда ORI data также выполняет операцию поразрядного логического сложения, но над содержимым аккумулятора и операндом, присутствующим в команде. Если нужно, например, записать в третий разряд байта, находящегося в аккумуляторе, единицу, не изменяя остальных его разрядов, то необходимо произвести операцию поразрядного логического сложения с маской, в третьем разряде которой записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: ORI 00000100B.

5. Команда XRA r выполняет операцию поразрядного логического сложения по модулю 2 (операцию “ИСКЛЮЧАЮЩЕЕ ИЛИ”) содержимого аккумулятора и регистра r. Команда XRA А, в частности, используется для обнуления аккумулятора.

6. Команда XRI data также выполняет операцию поразрядного логического сложения по модулю 2, но над содержимым аккумулятора и операндом, присутствующим в команде. Для того, чтобы изменить на противоположное значение третьего разряда байта, находящегося в аккумуляторе, не изменяя остальных его разрядов, необходимо выполнить операцию поразрядного логического сложения по модулю 2 с маской, в третьем разряде которой записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: XRI 00000100B.

Команды ANA А и ORA А позволяют, не изменяя содержимого аккумулятора, воздействовать на разряды регистра признаков. Эти команды могут быть использованы в том случае, если предыдущая команда после выполнения какой-либо операции над содержимым аккумулятора такого воздействия на регистр признаков не оказала.

7. Команда СМА инвертирует содержимое аккумулятора.

8. Команда СМР r позволяет сравнивать два числа, находящихся в аккумуляторе и в регистре r. Сравнение осуществляется вычитанием из содержимого аккумулятора содержимого регистра r. Вычитание производится без изменения содержимого аккумулятора. Результат вычитания проявляется только в воздействии на признаки регистра признаков. Если операнды равны, признак нуля Z устанавливается в 1. Если значение числа, находящегося в аккумуляторе, меньше значения второго числа, находящегося в регистре r, то устанавливается в единицу признак переноса С. В противном случае признаки Z и C устанавливаются в ноль.

9. Команда CPI data аналогична предыдущей команде. Отличие состоит в том, что второе число располагается не в регистре r, а непосредственно указано в команде в виде операнда.

К командам логических операций относят и команды сдвигов, которые по существу представляют собой специальные команды логических действий. Эти команды имеют свои особенности для разных типов МП. Поэтому, при использовании данных команд в каждом конкретном случае необходимо обратиться к материалам фирмы-изготовителя используемого МП и тщательно разобраться в действиях, осуществляемых при выполнении указанных команд. Команды сдвигов в большинстве случаев предназначены для выполнения операций только над содержимым аккумулятора. На рис.4.2 схематически показано, как производится сдвиг содержимого аккумулятора командами RLC, RRC, RAL и RAR. В операциях сдвига участвует разряд признака переноса С регистра признаков. Каждая из команд сдвигает содержимое аккумулятора на один разряд влево или вправо. При необходимости сдвинуть содержимое аккумулятора на большее число разрядов команду необходимо повторить требуемое число раз.

Команды сдвига часто используются для организации операций умножения и деления, т.к. сдвиг двоичного кода влево на один разряд равносилен его умножению на 2, а сдвиг вправо на один разряд - делению на 2. Рассмотрим пример. Десятичному число 8 соответствует двоичный код 1000. Деление числа 8 пополам дает в результате число 4, которому соответствует двоичный код 0100. Как мы видим, при делении на 2 осуществилась операция сдвига двоичного кода вправо на один разряд. Однако при использовании в этих целях рассмотренных в нашем случае команд необходимо обнулять те разряды, которые возвращаются из признака переноса С или при замыкании младшего байта на старший, т.е. в результате замкнутого или циклического сдвига. Во многих типах МП предусмотрено автоматическое выполнение такой операции. Такой сдвиг часто называют простым или разомкнутым.

Рис.4.2.Реализация команд сдвига.

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

При выполнении программы содержимое счетчика команд PC непрерывным образом увеличивается, поэтому команды извлекаются из памяти и выполняются в порядке возрастания их адресов. Ход выполнения программы можно изменить, если в счетчик команд PC поместить адрес, отличающийся от адреса очередной команды. В этом случае МП перейдет к выполнению программы с места, указанного новым адресом (адресом перехода). Адрес перехода может указываться напрямую в команде, а также косвенно содержаться в регистровой паре или специальном адресном регистре, указанном в команде перехода. При выполнении команды перехода адрес, указанный в команде, записывается в счетчик команд PC, причем прежнее содержимое счетчика команд PC теряется. Переход может быть безусловным или условным. Если безусловные команды реализуются всегда, то условные - только при выполнении определенного условия. Если условие не удовлетворяется, то выполняется следующая команда программы.

1. Команда JMP addr является командой безусловного перехода. Эта команда адрес, содержащийся в ней записывает в счетчик команд PC. После выполнения этой команды программа начнет выполняться с нового адреса, помещенного в счетчик команд.

2. Команда J-CON addr является командой условного перехода. В качестве условий рассматриваются нулевые или единичные значения признаков Z, С, Р и S регистра признаков. В место сокращения -CON подставляется мнемоника конкретного условия, при котором происходит выполнение команды: NZ - ненулевой результат, Z - нулевой результат, NC - отсутствие переноса в результате, C - наличие переноса в результате, P0 - нечетное число единиц в коде результата, PE - четное число единиц в коде результата, P - неотрицательный результат, M - отрицательный результат.

Например, команда условного перехода J-CON addr записывается JNZ addr, если условие перехода заключается в том, что Z=0 (предыдущий результат не был равен нулю). При выполнении этого условия адрес перехода, содержащийся команде запишется в счетчик команд PC и МП перейдет к выполнению программы с этого адреса. Если условие не удовлетворяется, т.е. Z=1 (предыдущий результат был равен нулю), то выполняется команда, непосредственно следующая в программе за командой JNZ addr.

Если в программе встречаются одинаковые последовательности команд, то для того, чтобы не записывать такие последовательности по несколько раз в памяти, их выделяют в подпрограммы. Переход от выполнения программы к выполнению подпрограммы производится с помощью команд вызова подпрограмм. При выполнении такой команды в счетчик команд PC также записывается адрес, который указывается в команде (адрес первой команды подпрограммы), но предварительно прежнее содержимое счетчика команд PC, т.е. адрес команды, которая следует в программе за командой вызова (адрес возврата из подпрограммы), запоминается в стеке. Команды вызова подпрограмм и возврата из подпрограмм, как и команды переходов, бывают безусловными и условными.

3. Команда CALL addr является безусловной командой вызова подпрограмм. Команда записывает в счетчик команд PC адрес первой команды подпрограммы, указанный в команде, а в стек отправляет адрес возврата в основную подпрограмму (адрес команды, следующей за командой CALL addr).

4. Команда C-CON addr является условной командой вызова подпрограмм. Действия команды такие же как и в предыдущем случае, но команда выполняется при истином значении условия, записанного вместо сокращения -CON. Мнемоника используемых условия такая же, как и в команде J-CON.

5. Команда RET служит для возврата из подпрограммы. Она является последней командой подпрограммы. По этой команде адрес возврата из стека пересылается обратно в счетчик команд PC. После этого продолжается выполнение основной программы с того места, где оно было прервано обращением к подпрограмме.

6. Команда R-CON - это команда условного возврата из подпрограмм. Ее выполнение зависит от значения используемого в команде условия (см. выше).

Команды ввода-вывода и специальные.

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

1. По команде IN port данные из порта ввода, адрес которого содержится в команде, передаются в аккумулятор.

2. По команде OUT port данные из аккумулятора передаются в порт вывода, адрес которого содержится в команде.

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

3. Команда EI необходима для разрешения режима ввода-вывода данных по прерываниям. Команда устанавливает выходной управляющий сигнал “Разрешение прерывания” равным 1, что позволяет внешнему устройству инициировать процесс обмена данными с МП и обработку по мере их поступления.

4. Команда DI запрещает вышеописанную операцию путем устанавки выходного управляющего сигнала “Разрешение прерывания” равным 0.

5. Команда NOP означает пустую операцию, во время которой происходит только увеличение на единицу содержимого счетчика команд PC. Использование команды NОР позволяет организовать временную задержку.

6. Команда HLT переводит МП в состояние ОСТАНОВ.