Микропроцессорный комплект Z80. Книга 1 1990 г.

Система команд - флаги признаков. Очередность выполнения по циклам. Таблицы.


5.3. Флаги признаков

Каждый из двух флаговых регистров МП Z80 содержит по шесть информационных битов,
состояние которых устанавливается в соответствии с результатом операции. Флаги S, Z, C и P/V
используются в командах условного перехода, условного вызова подпрограмм и условного
возврата из подпрограмм. Флаги Ни N непосредственно программно не анализируются. Они
используются в двоично-десятичной арифметике.
S (F7) Sign - Флаг знака

Этот Флаг предназначен для обработки чисел со знаком. Флаг устанавливается,
когда результат операции отрицателен. Т.к. бит 7 является знаковым (любое отрицательное
число содержит единицу в 7 бите), то этот флаг копирует состояние 7 бита аккумулятора.

При программировании состояние этого флага условно кодируется как P (Plus, знак
плюс, S=0) и M (Minus, знак минус, S=1).
Z (F6) Zero - Флаг нуля

Флаг Z устанавливается или обнуляется в результате выполнения следующих
команд:

1. При 8-битных арифметических и логических операциях флаг устанавливается в 1,
если результат выполнения команды равен нулю. Если результат не равен нулю, флаг Z
обнуляется.

2. При командах поиска и сравнения флаг Z устанавливается в 1. когда содержимое
ячейки памяти адресуемой регистровой парой HL, совладает с содержимым аккумулятора.

3. После выполнения команды тестирования отдельного бита во флаг Z
записывается инвертированное значение проверенного бита.

4. Если при выполнении команд INI, IND, OUTI, OUTD результат декремента (В-1)
не равен нулю, то флаг Z=0. Когда результат (В-1)=0, флаг Z устанавливается.

5. Флаг Z устанавливается в 1, когда в результате выполнения команд IN r,(C)
содержимое регистра r обнуляется.

При программировании этот флаг следует условно кодировать как Z (Zero, результат
равен нулю, Z=1) и NZ (No Zero, результат не равен нулю, Z=0)
C (F0) Carry - Флаг переноса

На состояние этого флага влияют следующие команды:

1. Команды сложения устанавливают флаг C, когда есть Перенос от бита 7 к биту 8
результата сложения однобайтных чисел, или от бита 15 к биту 16 при сложении
двухбайтных чисел. Иначе C=0.

2. Команды вычитания устанавливают флаг, если есть заём, и сбрасывают, когда его

нет.

3. Команды RLA, RRA, RL t и RR t используют флаг C как бит связи между 7 и 0
битами.

4. После выполнения команд RLCA, RLC t, SLA t флаг C копирует значение бита 7
операнда.

5. После выполнения команд RRCA, RRC t, SRA t, SRL t флаг C копирует значение
бита 0 операнда.

6. Логические команды AND s, OR s и XOR s обнуляют флаг C.

7. Команда SCF устанавливает флаг C, а команда CCF его инвертирует.

При программировании флаг кодируется как C (Carry, был перенос, C=1) и NC (No
Carry, не было переноса, С=0).
P/V (F2) Parity/Overflow - Флаг чётности/переполнения

Этот флаг имеет несколько функций:

1. При арифметических операциях над числами со знаком он действует как флаг
переполнения V. т.к. диапазон представления чисел со знаком от -128 до +127, то при
операциях над ними возможен выход результата за эти пределы - переполнение. В этом
случае флаг, устанавливается в 1, сигнализируя об ошибочности результата. Логика
установки флага V в 1 такова:

а) если был перенос из 6-го бита в 7-ой, и не было переноса из 7-го бита во флаг C.

б) не было переноса из 6-го бита в 7-ой, но есть перенос из 7-го бита во флаг C.

Примеры:

1. Сложение

+76=

01001100

-114=

10001110

C=0

11011010=

-38 верно

V=0

2. Сложение

-1=

11111111

-1=

11111111

С=1

11111110=

-2 верно

V=0

3. Сложение

+82=

01010010

+94=

01011110

C=0

10110000=

-80 неверно!

V=1

В последнем примере произошла установка флага V. Это означает, что ошибка
должна быть программно учтена при анализе результата.

2. При выполнении логических операций, команд вращения и сдвига, а также
команды IN r,(C) флаговый бит 2 действует как флаг чётности P. Он устанавливается, когда
регистр содержит четное количество единиц, и обнуляется при нечетном количестве
единиц.

3. При выполнении команд LD A,I и LD A,R флаг P/V копирует состояние триггера
прерываний IFF2, что позволяет в любое время узнать состояние процессора.

4. Во время выполнения команд поиска CPI, CPIR, CPD и CPDR, а также команд
пересылки блоков LDI, LPIR, LDD и LDDR флаг P/V=1, пока содержимое счётчика байтов
(регистр BC) отлично от нуля. Когда BC=0, флаг P/V сбрасывается.

При программировании этот флаг условно кодируется как PO (Parity Odd, нечётно,
P/V=0) и PE (Parity Even, чётно, P/V=1).
H (F4) Halfoarry - Флаг полупереноса

Команды сложения, вычитания, инкремента, декремента и сравнения 8-битных
операндов устанавливают флаг H когда был перенос из третьего бита результата в
четвертый, или был заём от четвёртого бита к третьему. Этим он указывает команде DAA
требует ли результат десятичной коррекции.
N (F1) Addition/Subtraction - Флаг сложения/вычитания

Команды сложение, инкремента и логические команды обнуляют флаг N, а команды
вычитания, декремента, сравнения и инвертирования его устанавливают.

Состояние флага N используется командой DAA. Т.к. алгоритм корректировки
результата двоично-десятичных операций различен при сложении и вычитании, этот флаг
показывает, какое именно действие происходило перед этим.

В таблице 5.2 показано как выполнение команд влияет на регистр флагов. Команды,
которые здесь не представлены, не влияют ни на один флаг.

Таблица 5.2. Флаги признаков.

Регистр Флагов

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

F7

F6

F5

F4

F3

F2

F1

F0

Пояснения

S

Z

H

P/V

N

С

LD A,I; LD A,R

?

?

X

0

X

IF

0

P/V ^ IFF2

LDI; LDD

X

X

X

0

X

?

0

Если BC^0, то P/V=1

LDIR; LDDR

X

X

X

0

X

0

0

Если BC=0, то P/V=0

CPI; CPD; CPIR; CPDR

X

?

X

X

X

?

1

Если BC^0, то P/V=1

Если BC=0, то P/V=0

Если A^(HL), то Z=0

Если A=(HL), то Z=1

ADD s; ADC s

?

?

X

?

X

V

0

?

8-битовые арифметические

SUB s; SBC s; CP s; NEG

?

?

X

?

X

V

1

?

команды

AND s

?

?

X

1

X

P

0

0

Логические

OR s; XOR s

?

?

X

0

X

P

0

0

команды

INC t

?

?

X

?

X

V

0

Только 8-битовые

DEC t

?

?

X

?

X

V

1

команды

ADD HL,dd; ADD IX,pp; ADD IY,rr

X

X

X

0

?

16-битовые -

ADC HL,dd

?

?

X

X

X

V

0

?

арифметические

SBC HL,dd

?

?

X

X

X

V

1

?

команды

DAA

?

?

X

?

X

P

?

CPL

X

1

X

1

CCF

X

X

X

0

?

SCF

X

0

X

0

1

RLCA; RLA; RRCA; RRA

X

0

X

0

?

Вращение аккумулятора

RLC t; RRC t; RL t; RR t; SLA t;

?

?

X

0

X

P

0

?

Группа команд вращения и

SRA t; SRL t

сдвига

RLD;RRD

?

?

X

0

X

P

0

Перестановка тетрад

BIT b,t

X

?

X

1

X

X

1

Z ^ инверсия sb

IN r,(C); INF

?

?

X

?

X

P

0

INI; IND; OUTI; OUTD

X

?

X

X

X

X

1

Блочные команды

ввода-вывода:

INIR; INDR; OTIR; OTDR

X

1

X

X

X

X

1

Если B^0, то Z=0

Если В=0, то Z=1

5.4. Очереднос^пь выполнения по
циклам

Для обозначения действий микропроцессора в каждой машинном цикле в таблице 5.3
приняты следующие сокращения:
OCR (operation code read) - чтение кода операции;

CBR (control byte read) - чтение управляющего байта кода операции (ED, DD, FD, CB),
IOP (internal CPU-operation) - внутренние операции ЦП, выходные сигналы управления
неактивны;

MRD (memory read) - чтение байта из косвенно адресованной ячейки памяти;

MRH (memory rend, high byte) - чтение старшего байта 16-разрядного слова из косвенно

адресованной ячейки памяти;
MRL (memory read, low byte) - чтение младшего байта 16-разрядного слова из косвенно

адресованной ячейки памяти;
MWR (memory write) - запись байта в косвенно адресованную ячейку памяти;
MWH (memory write, high byte) - запись старшего байта 16-разрядиого слова в косвенно

адресованную ячейку памяти,
MWL (memory write, low byte) - запись младшего байта 16-разрядного слова в косвенно

адресованную ячейку памяти;
ORD (operand read) - чтение операнда-байта, непосредственно представленного в команде;
ORH (operand read, high byte) - чтение старшего байта 16-разрядного слова, непосредственно

представленного в команде;
ORL (operand read, Ion byte) - чтение младшего байта 16-разрядного слова, непосредственно

представленного в команде;
PRD (port read) - ввод данных из порта;
PWR (port write) - вывод данных в порт;
SRH (stack read, high byte) - чтение из стека старшего байта;
SRL (stack read, low byte) - чтение из стека младшего байта;
SWH (stack write, high byte) - запись в стек старшего байта;
SWL (ataok write, low byte) - запись в стек младшего байта;
INTA (interrupt .acknowledge) - подтверждение прерывания микропроцессором;
SPI (stack pointer increment) - инкремент указателя стека в конце цикла;
SPD (atack pointer deorement) - декремент указателя стека в конце цикла;
(n) - продолжительность цикла в периодах тактовой частоты.

Таблица 6.3. очередность выполнения по циклам

Тип команды

Байт

Цикл M1

Цикл M2

Цикл M3

Цикл M4

Цикл M5

Пояснение

LD r1,r2

1

OCR(4)

LD r,n

2

OCR(4)

ORD(3)

LD r,(HL)

1

OCR(4)

MRD(3)

LD (HL),r

1

OCR(4)

MWR(3)

LD r,(ii+d)

3

CBR(4); OCR(4)

ORD(3)

IOP(5)

MRD(3)

ii: IX или IY

LD (ii+d),r

3

CBR(4); OCR(4)

ORD(3)

IOP(5)

MWR(3)

LD (HL),n

2

OCR(4)

ORD(3)

MWR(3)

LD A,(BC);

1

OCR(4)

MRD(3)

LD A,(DE)

LD (BC),A;

1

OCR(4)

MWR(3)

LD (DE),A

LD A,(nn)

3

OCR(4)

ORL(3)

ORH(3)

MRD(3)

LD (nn),a

3

OCR(4)

ORL(3)

ORH(3)

MWR(3)

LD A,i

2

CBR(4); OCR(5)

i: I или R

LD i,A

2

CBR(4); OCR(5)

i: I или R

LD dd,nn

3

OCR(4)

ORL(3)

ORH(3)

LD ii,nn

4

CBR(4); OCR(4)

ORL(3)

ORH(3)

ii: IX или IY

LD HL,(nn)

3

OCR(4)

ORL(3)

ORH(3)

MRL(3)

MRH(3)

LD (nn),HL

3

OCR(4)

ORL(3)

ORH(3)

MWL(3)

MWH(3)

LD dd,(nn)

4

CBR(4); OCR(4)

ORL(3)

ORH(3)

MRL(3)

MRH(3)

LD (nn),dd

4

CBR(4); OCR(4)

ORL(3)

ORH(3)

MWL(3)

MWH(3)

LD ii,(nn)

4

CBR(4); OCR(4)

ORL(3)

ORH(3)

MRL(3)

MRH(3)

ii: IX или IY

LD (nn),ii

4

CBR(4); OCR(4)

ORL(3)

ORH(3)

MWL(3)

MWH(3)

ii: IX или IY

Тип команды

Байт

Цикл M1

Цикл M2

Цикл M3

Цикл M4

Цикл M5

Пояснение

LD SP,HL

1

OCR(6)

LD SP,ii

2

OCR(6)

ii: IX или IY

PUSH qq

1

OCR(5); SPD

SWH(3); SPD

SWL(3)

PUSH ii

2

CBR(4); OCR(5); SPD

SWH(3); SPD

SWL(3)

ii: IX или IY

POP qq

1

OCR(4)

SRL(3); SPI

SRH(3); SPI

POP ii

2

CBR(4); OCR(4)

SRL(3); SPI

SRH(3); SPI

ii: IX или IY

EX DE,HL

1

OCR(4)

EX AF,AF'; EXX

1

OCR(4)

EX (SP),HL

1

OCR(4)

SRL(3); SPI

SRH(4)

SWH(3); SPD

SWL(5)

EX (SP),ii

1

CBR(4); OCR(4)

SRL(3); SPI

SRH(3)

SWH(3); SPD

SWL(5)

ii: IX или IY

LDI; LDD;

2

CBR(4); OCR(4)

MRD(3)

MWR(3)

CPI; CPD

LDIR; LDDR;

2

CBR(4); OCR(4)

MRD(3)

MWR(3)

IOP(5)

IOP(5) в M4

CPIR; CPDR

только когда BC^0

ALU r

1

OCR(4)

ALU означает:

ALU n

2

OCR(4)

ORD(3)

ADD, ADC, SUB,

ALU (HL)

1

OCR(4)

MRD(3)

SEC, AND, OR,

ALU (ii+d)

3

CBR(4); OCR(4)

ORD(3)

IOP(5)

MRD(3)

XOR или CP

INC r; DEC r

1

OCR(4)

INC (HL);

1

OCR(4)

MRD(3)

MWR(3)

DEC (HL)

INC (ii+d);

3

CBR(4); OCR(4)

ORD(3)

IOP(5)

MRD(4)

MWR(3)

ii: IX или IY

DEC (ii+d)

DAA

1

OCR(4)

CPL

1

OCR(4)

NEG

2

CBR(4); OCR(4)

CCF; SCF

1

OCR(4)

NOP; HALT

1

OCR(4)

DI; EI

1

OCR(4)

IM0; IM1; IM2

2

CBR(4); OCR(4)

ADD HL,dd

1

OCR(4)

IOP(4)

IOP(3)

ADC HL,dd;

2

CBR(4); OCR(4)

IOP(4)

IOP(3)

ADD ii,pp - это

SBC HL,dd;

ADD IX,pp или

ADD ii,pp

ADD IY,rr

INC dd; DEC dd

1

OCR(6)

INC ii; DEC ii

2

CBR(4); OCR(6)

ii: IX или IY

RLCA; RRCA;

1

OCR(4)

RLA; RRA

ROT r

2

CBR(4); OCR(4)

ROT означает: RLC,

ROT (HL)

2

CBR(4); OCR(4)

MRD(3)

MWR(3)

RL, RRC, RR, SLA,

ROT (ii+d)

4

CBR(4); CBR(4)

ORD(3)

OCR(5)

MRD(4)

MWR(3)

SRA или SRL.

RLD; RRD

2

CBR(4); OCR(4)

MRD(3)

IOP(4)

MWR(3)

BIT b,r;

2

CBR(4); OCR(4)

SET b,r

RES b,r

BIT b,(HL)

2

CBR(4); OCR(4)

MRD(4)

SET b,(HL)

2

CBR(4); OCR(4)

MRD(4)

MWR(3)

RES b,(HL)

BIT b,(ii+d)

4

CBR(4); CBR(4)

ORD(3)

OCR(5)

MRD(4)

SET b,(ii+d);

4

CBR(4); CBR(4)

ORD(3)

OCR(5)

MRD(4)

MWR(3)

ii: IX или IY

RES b,(ii+d)

JP nn; JP cc,nn

3

OCR(4)

ORL(3)

ORH(3)

JR e

2

OCR(4)

ORD(3)

IOP(5)

JR C,e; JR Z,e;

2

OCR(4)

ORD(3)

IOP(5)

IOP(5) - при

JR NC,e; JR NZ,e

невыполнении условия

JP (HL)

1

OCR(4)

JP (ii)

2

CBR(4); OCR(4)

ii: IX или IY

DJNZ e

2

OCR(5)

ORD(3)

IOP(5)

IOP(5), если B^0

CALL nn

3

OCR(4)

ORL(3)

ORH(4); SPD

SWH(3); SPD

SWL(3)

CALL cc,nn

3

OCR(4)

ORL(3)

ORH(4); SPD

SWH(3); SPD

SWL(3)

cc

CALL cc,nn

3

OCR(4)

ORL(3)

ORH(3)

cc не выполняется

RET

1

OCR(4)

SRL(3); SPI

SRH(3); SPI

RET cc

1

OCR(4)

SRL(3); SPI

SRH(3); SPI

cc

Тип команды

Байт

Цикл M1

Цикл M2

Цикл M3

Цикл M4

Цикл M5

Пояснение

RET cc

1

OCR(4)

cc не выполняется

RETI; RETN

2

CBR(4); OCR(4)

SRL(3); SPI

SRH(3); SPI

RST p

1

OCR(5); SPD

SWH(3); SPD

SWL(3)

IN A,(n)

2

OCR(4)

ORD(4)

PRD(4)

IN r,(C); INF

2

CBR(4); OCR(4)

PRD(4)

INI; IND

2

CBR(4); OCR(5)

PRD(4)

MWR(3)

INIR; INDR

2

CBR(4); OCR(5)

PRD(4)

MWR(3)

IOP(5)

IOP(5), если B^0

OUT (n),A

2

OCR(4)

ORD(4)

PWR(4)

OUT (C),r

2

CBR(4); OCR(4)

PWR(4)

OUTI; OUTD

2

CBR(4); OCR(5)

MRD(3)

PWR(4)

OTIR; OTDR

2

CBR(4); OCR(5)

MRD(3)

PWR(4)

IOP(5)

IOP(5), если B^0

Подтверждение прерывания:

NMI

-

OCR(5); SPD

SWH(3); SPD

SWL(3)

См. рис. 6.4

INT, Режим 0

-

INTA(6;) SPD

SWH(3); SPD

SWL(3)

При команде RST p

-

INTA(6)

ORL(3)

ORH(4); SPD

SWH(3); SPD

SWL(3)

При команде CALL

INT, Режим 1

-

INTA(7;) SPD

SWH(3); SPD

SWL(3)

RST38H

INT, Режим 2

-

INTA(7); SPD

SWH(3); SPD

SWL(3)

MRL(3)

MRH(3)

См. рис. 6.13

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

OCR, CBR - цикл извлечения кода операции (рис. 4.2)

MRD, MRH, MRL, - цикл чтения из памяти (рис. 4.4)
ORD, ORH, ORL,
SRH, SRL

MWR, MWH, MWL - цикл записи в память (рис. 4.4)
SWH, SWL

PRD - цикл ввода (рис. 4.6)

PWR - цикл вывода (рис. 4.6)

INTA - цикл подтверждения маскируемого прерывания (рис 4.9).




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
HOT GAMES - Лучшая десятка от Magic Soft & ее анализ за последние десять недель.
Лаборатория - Kак конвеpтиpовать гpафику PC or Amiga на Спектpум
Хит-парад - 10 лучших программ,по итогам продаж фирмы Welcome.
Вокруг света - Все что вы хотели знать о "Силиконе".
Basics Of Machine Code - Part 2

В этот день...   21 ноября