Pppdddff
Скачать 1.31 Mb.
|
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; SRA t; SRL t ? ? X 0 X P 0 ? Группа команд вращения и сдвига RLD; RRD ? ? X 0 X P 0 Перестановка тетрад BIT b,t X ? X 1 X X 1 Z ← инверсия s b 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); LD A,(DE) 1 OCR(4) MRD(3) LD (BC),A; LD (DE),A 1 OCR(4) MWR(3) 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; CPI; CPD 2 CBR(4); OCR(4) MRD(3) MWR(3) LDIR; LDDR; CPIR; CPDR 2 CBR(4); OCR(4) MRD(3) MWR(3) IOP(5) IOP(5) в M4 только когда 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); DEC (HL) 1 OCR(4) MRD(3) MWR(3) INC (ii+d); DEC (ii+d) 3 CBR(4); OCR(4) ORD(3) IOP(5) MRD(4) MWR(3) ii: IX или IY 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; SBC HL,dd; ADD ii,pp 2 CBR(4); OCR(4) IOP(4) IOP(3) ADD ii,pp – это ADD IX,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; RLA; RRA 1 OCR(4) 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; SET b,r RES b,r 2 CBR(4); OCR(4) BIT b,(HL) 2 CBR(4); OCR(4) MRD(4) SET b,(HL) RES b,(HL) 2 CBR(4); OCR(4) MRD(4) MWR(3) BIT b,(ii+d) 4 CBR(4); CBR(4) ORD(3) OCR(5) MRD(4) SET b,(ii+d); RES b,(ii+d) 4 CBR(4); CBR(4) ORD(3) OCR(5) MRD(4) MWR(3) ii: IX или IY 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; JR NC,e; JR NZ,e 2 OCR(4) ORD(3) IOP(5) IOP(5) – при невыполнении условия 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) RST 38H 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). 6. Система прерываний Прерывания служат для приостановки прямого выполнения программы, с тем, чтобы процессор смог отреагировать на определенный запрос, сформированный периферийный устройством в зависимости от какого-либо обстоятельства. Реакция ЦП на запрос выражается в переходе к выполнению некоторой программы, которая называется программой обработки прерывания (Interrupt- Service Routine - ISR). После её окончания продолжается выполнение прерванной программы 2 . Путём присвоения приоритетов запросам можно добиться, чтобы ЦП реагировал, прежде всего, на наиболее важное событие, игнорируя запросы либо прерывая ISR менее важных. В отличие от циклического опроса, при котором программно проверяется выполнение определенного условия, и для которого требуется время выполнения и место в памяти, прерывание обеспечивает практически мгновенную реакцию, т.к. не зависит от периода опроса, отсутствие программы опроса, как таковой, выражается в экономии памяти. Различные варианты применения прерываний являются эффективным средством повышения производительности микропроцессорной системы. 6.1. Разрешение и запрещение прерываний Для приёма запросов на прерывания микропроцессор Z80 имеет два входа: INT и NMI. Различие между ними - в приоритете и маскируемоести. INT (маскируемое прерывание) может быть программно запрещено или разрешено. Необходимость в запрещении (маскировании) прерываний возникает, например, когда условия работы в реальном масштабе времени делают нежелательным прерывание данного участка программы. Состояние "запретить прерывания" либо "разрешить прерывания" запоминается программно-доступный триггером IFF1 (Interrupt Flip Flop) внутри ЦП. Посредством команды разрешения прерываний EI (Enable Interrupt) либо запрещения прерываний DI (Disable Interrupt) этот триггер соответственно устанавливается либо сбрасывается. В некоторых случаях для сохранения его текущего состояния требуется промежуточная память, в качестве которой предусмотрен триггер IFF2. При сбросе ЦП сигналом /RESET оба триггера сбрасываются, блокируя требования на маскируемые прерывания. Посредством команды EI их можно разблокировать. Когда прерывание принимается, IFF1 и IFF2 также автоматически сбрасываются, чтобы предотвратить дальнейшие прерывания до тех пор, пока они не будут разрешены новой командой EI. Применение EI внутри IBR дает следующие две возможности: 2 Для корректного возврата в прерванную программу предусмотрено следующее: -при входе в ISR адрес возврата автоматически сохраняет я в стеке; -внутри ISR программно предпринимаются меры для сохранения содержимого регистров ЦП двумя способами: а) смена блока регистров командами EXX, EX AF,AF'. б) пересылка в стек командой PUSH. Важное обстоятельство: при выполнении команды EI поступивший в это время запрос на прерывание будет блокирован до тех пор, пока не выполнится следующая за EI команда. Цель такой задержки состоит в том, чтобы гарантировать (после команды EI) возможность выполнения команды возврата из ISR (RET или RETI). NMI (немаскируемое прерывание) имеет более высокий по отношению к INT приоритет и не монет быть запрещено программным способом. Таким образом, если оно затребовано каким- либо периферийным устройством, то ЦП, безусловно, прерывает текущую программу. Этот вид прерываний предназначен, как правило, для очень важных событий (отказ, спад напряжения питания и др.). В отличие от INT. когда состояния IFF1 и IFF2 совпадают, при подтверждении немаскируемого прерывания IFF1 сбрасывается, а IFF2 остается без изменений. Это делается для того, чтобы на время обработки NMI сохранить состояние IFF1. которое имелось до приема /NMI. После окончания NMI-SR по команде возврата RETN состояние IFF1 восстанавливается из IFF2. Команды LD A,I и LD A,R предоставляют возможность тестирования IFF2: они пересылают содержимое IFF2 в P/V-флаг. Т. о значение IFF2 может использоваться для ветвления программы. В таблице 6.1 в компактном виде представлены все действия, влияющие на состояние триггеров разрешения прерываний. Таблица 6.1. Состояние триггеров разрешения прерываний |