Простейшая микро-ЭВМ

         

СИСТЕМА КОМАНД И СПОСОБЫ АДРЕСАЦИИ


Система команд микропроцес­сора КР580ИК80А представлена 244 кодами операций, которые могут быть расклассифицированы по разным признакам. Наибо­лее существенными для ознакомления с особенностями их ис­пользования являются следующие три признака: длина коман­ды, или число занимаемых байтов, функциональный признак, или выполняемые командой операции, и способ адресации. Полный перечень команд приведен в приложении 1. В таблице приведены символическая запись (мнемокод) команды, описа­ние выполняемых ею функций, длина в байтах, обозначения изменяемых флагов и число машинных тактов, занимаемых при ее выполнении. Из 256 возможных кодов (при восьми двоичных разрядах) не используются следующие 12 кодовых комбинаций (в восьмеричной записи): 010, 020, 030, 040, 050, 060, 070, 313, 331, 335, 355 и 375. Этим и объясняется коли­чество всех команд: 244. Команды в таблице разбиты на три группы по числу занимаемых байтов: все команды делятся на однобайтовые, двухбайтовые и трехбайтовые. При этом первый байт всегда отводится под код команды, а второй и третий байты содержат либо данные, либо адрес, по которому они находятся в памяти (рис. 4.6).

Восьмеричные коды всех однобайтовых, двухбайтовых и трехбайтовых команд приведены соответственно в табл. 4.1, 4.2 и 4.3. При этом в табл. 4.1 наряду с обычными указаны обобщенные коды, т. е. коды, содержащие кроме восьмерич­ных цифр кодовые переменные S, D и А. В табл. 4.1 если код команды содержит только цифры, это означает, что существует единственная команда с соответствующим кодом. Некоторые коды кроме цифр содержат буквы: S (первые И команд), D (третья команда) и А (последняя команда). Таким кодам соответствуют множества команд. При этом каждой команде из первых 11 команд, кроме третьей, соответствует группа конкретных команд, мнемокод которых вместо символа г (регистр) содержит обозначения конкретных регистров (В, С, D, Е, Н, L), либо символ памяти (М), либо символ аккуму­лятора (А). Соответствующий конкретный восьмеричный код команды вместо символа S должен содержать одну из цифр: О, 1, 2, 3, 4, 5, 6, 7 соответственно, т.
е. символу В в мнемо­коде соответствует цифра 0 в восьмеричном коде, символу С в мнемокоде — цифра 1 в восьмеричном коде и т. д,. . ., симво­лу М в мнемокоде — цифра 6 в восьмеричном коде и, наконец, символу А в мнемокоде — цифра 7 в восьмеричном коде. Для третьей команды в табл. 4.1 точно такая же аналогия соблюда­ется для пар символов гь г2 и D, S. Последняя команда табли­цы содержит символ А в мнемокоде и в восьмеричном коде. Она соответствует группе из восьми конкретных команд, в каж­дой из которых символ А принимает одно из значений: О, 1, ... ...,7.



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



Таблица 4.1 

Код

Команда

Код

Команда

 

 

Код

Команда

OS4

INR

r

 

051

DAD

H

 

370

RM

 

OS5

DCR

r

 

071

DAD

SP

311

RET

 

1DS

MOV

r1r2

301

POP

В

 

007

RLC

 

20S

ADD

r

 

321

POP

D

 

017

RRC

 

21S

ADC

r

 

341

POP

H

 

027

RAL

 

22S

SUB

r

 

361

POP

PSW

037

RAR

 

23S

SBB

r

 

305

PUSH

В

 

353

XCHG

24S

ANA

r

 

325

PUSH

D

 

343

XTHL

25S

XRA

r

 

345

PUSH

H

 

371

SPHL

26S

ORA

r

 

365

PUSH

PSW

351

PCHL

27S

CMP

r

 

002

STAX

В

 

166

HLT

 

003

INX

в

 

022

STAX

D

 

000

NOP

 

023

INX

D

 

012

LDAX

В

 

363

DI

 

043

INX

H

 

032

LDAX

D

 

373

El

 

063

INX

SP

300

RNZ

 

 

047

DAA

 

013

OCX

В

 

310

RZ

 

 

057

CMA

 

033

OCX

D

 

320

RNC

 

 

067

STC

 

053

OCX

H

 

330

RC

 

 

077

CMC

 

073

DCX

SP

340

RPO

 

 

3A7

RST

A

011

DAD

В

 

350

RPE

 

 

 

 

 

031

DAD

D

 

360

RP

 

 

 

 

 

Таблица 4.2 

Код

Команда

Код

Команда

306

ADI

 

<B2>

 

323

OUT

<B2>

 

316

ACI

 

<B2>

 

006

 

MVI

В

<B2>

 

326

SUI

 

<B2>

 

016

 

MVI

С

<B2>

 

336

SBI

 

<B2>

 

026

 

MVI

D

<B2>

 

346

ANI

 

<B2>

 

036

 

MVI

E

<B2)

 

356

XRI

 

<B2>

 

046

 

MVI

H

<B2>

 

366

ORI

 

<B2>

 

056

 

MVI

L

<B2>

 

376

CPI

 

<B2>

 

066

 

MVI

M

<B2>

 

333

IN

 

<B2>

 

076

 

MVI

A

<B2>

 

Таблица 4.3

 
Код

Команда

Код

Команда

 
302

JNZ

<В2><ВЗ>

344

СРО

<B2><B3>

 
312

JZ

<В2><ВЗ>

354

СРЕ

<B2><B3>

 
322

JNC

<В2><ВЗ>

364

СР

<B2><B3>

 
332

JC

<В2><ВЗ>

374

СМ

<B2><B3>

 
342

JPO

<В2><ВЗ>

315

CALL

<B2><B3>

 
352

JPE

<В2><ВЗ>

001

LXIB

<B2><B3>

 
362

JP

<В2><ВЗ>

021

LXI D

<B2><B3>

 
372

JM

<В2><ВЗ>

041

LXIH

<B2><B3>

 
303

JMP

<В2><ВЗ>

061

LXISP

<B2><B3>

 
304

CNZ

<В2><ВЗ>

062

STA

<B2><B3>

 
314

CZ

<В2><ВЗ>

072

LDA

<B2><B3>

 
324

CNC

<В2><ВЗ>

042

SHLD

<B2><B3>

 
334

СС

<В2><ВЗ>

052

LHLD

<B2><B3>

 



Как видно из табл. 4.2, микропроцессор КР580ИК80А может выполнять всего 18 двухбайтовых и 26 трехбайтовых команд, приведенных в табл. 4.3.

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

Для МП КР580ИК80А существуют следующие четыре воз­можных способа адресации: непосредственная, прямая, регист­ровая и косвенная.

Непосредственная адресация является наиболее экономичным способом хранения и поиска информации, поскольку необходи­мые данные содержит сама команда. Эти данные содержатся во втором и третьем байтах трехбайтовой команды или во вто­ром байте двухбайтовой команды. В случае трехбайтовой коман­ды младшие разряды 16-битового числа содержатся во втором байте команды, а старшие - в третьем (рис. 4.7,а).

Менее экономичной, но также довольно простой является прямая адресация. В этом случае во втором и третьем байтах команды содержится полный 16-разрядный адрес памяти. Млад­шим байтом адреса является <В2>, старшим — <ВЗ) (рис. 4.7,6). Таким способом можно адресоваться к любой ячейке адресного пространства памяти.

При регистровой адресации код команды содержит указание на регистр или пару регистров, в которых содержатся данные. Используемые в регистровой адресации команды являются однобайтовыми (рис. 4.7,в). Возможность указания пары ре­гистров в однобайтовой команде реализуется за счет того, что адреса регистров являются трехразрядными двоичными кодами.

Косвенная адресация отличается от регистровой лишь тем, что в регистровой паре, определяемой кодом команды, содержатся не данные, а полный 16-разрядный адрес ячейки памяти,в кото­рой имеются эти данные (рис. 4.7,г).


Старший байт адреса за­писывается в первом регистре пары, а младший байт — во вто­ром. Обычно указателем адреса при косвенной адресации явля­ются пара регистров Н, т. е. регистры Н, L, но иногда использу­ются и пары В и D.

При всевозможных пересылках данных из регистров в регист­ры или из памяти в регистры или обратно различают регистры — источники данных и регистры — приемники данных. Первые обо­значаются символом S (source — источник), вторые — симво­лом D (destination — место назначения). В регистровых парах В, С; D, Е и Н, L старшими являются первые регистры пар, т. е. регистры В, D, Н соответственно. Коды регистров общего назначения, пар регистров и флагов строго фиксированы (табл. 4.4).

В табл. 4.4 обозначение условия в мнемокоде команды в зависимости от значения флагов расшифровывается следую­щим образом: NZ — результат ненулевой; Z — результат нуле­вой; NC — нет переноса; С — есть перенос; РО - нет четности; РЕ — есть четность; Р — результат положительный (плюс) ; М -результат отрицательный (минус).



Рис. 4.7. Способы адресации: непосредственная (а), прямая (б), регист­ровая (в) и косвенная (г)

Все команды по функциональному признаку могут быть разбиты на следующие пять групп: группа команд пересылки данных, арифметические команды, логические команды, коман­ды переходов и команды управления и работы со стеком. Рас­смотрим работу наиболее типичных представителей этих групп команд, многие из которых вошли в описываемую ниже про­грамму-монитор (см. § 7.4).

4.6.1. ГРУППА КОМАНД ПЕРЕСЫЛКИ ДАННЫХ

В этой группе встречаются команды, пересылающие содержащиеся в них данные в регист­ры и в память, а также команды пересылки данных между ре­гистрами и между регистрами и памятью. Рассмотрим команды пересылки данных из одного регистра МП в другой, из регистра МП в ячейку ОЗУ и из ячейки ОЗУ в регистр МП. В мнемо­нике команд, используемых в данной книге, порядок пересыл­ки данных всегда предполагается в направлении от крайнего правого операнда к следующему слева операнду, отделенному от первого запятой.



Команда MOV rt, r2. Эта команда предназначена для пересыл­ки данных из регистра S (источник, или г2) в регистр D (прием­ник, или rt). В качестве регистра-источника и регистра-прием­ ника может выступать любой из регистров В, С, D, H, L или аккумулятор А. Содержимое регистра-источника при этом не меняется. В регистре-приемнике просто появляется копия содержимого регистра-источника. На рис. 4.8,а приведен формат этой команды. Чтобы получить конкретную команду, необхо­димо вместо символов D и S в формате команды рис. 4.8,я проставить из табл. 4.4 коды соответствующих регистров. На­пример, команда 01 010 000 В пересылает данные из регист­ра В в регистр D (в регистре D после выполнения команды бу­дут содержаться т© же данные, что и в регистре В). В восьмерич­ной системе это число (код команды) будет представлено как 120Q (см. список команд в приложении 1).

Команда MOV М, г. Эта команда может быть получена из пре­дыдущей заменой символов D кодом М из табл. 4.4. Команда пересылает данные из регистра-источника в ячейку памяти по адресу, указанному в регистровой паре Н, L. Регистром-источ­ником может служить любой регистр В, С, D, H, L или аккуму­лятор А. После выполнения команды в ячейке памяти появится копия содержимого регистра-источника. Содержимое самого регистра не изменится. Код конкретной команды получается фиксацией кода регистра-источника (рис. 4.8,6).



Рис. 4.8. Примеры размещения некоторых команд пересылки данных в байтах



Рис. 4.9. Примеры размещения некоторых арифметических команд в байтах

Команда MOV г, М. Команда также получается из первой за­меной символов S кодом М из табл. 4.4. Команда пересылает данные из ячейки памяти по адресу, указанному в регистровой паре Н, L, в регистр-приемник, в качестве которого может использоваться любой регистр В, С, D, H, L или аккумулятор А. После выполнения команды в регистре-приемнике появляется копия содержимого ячейки памяти (рис. 4.8,в).

На этом закончим рассмотрение примеров команд этой груп­пы.Отметим лишь, что все команды из группы пересылки дан­ных на значения флагов влияния не оказывают.

 



Содержание раздела