Микропроцессор Z80 -основные характеристики

         

Операции сдвига


RLCA                 -----------------¬

---------¬    ----¬  ¦ ------------¬  ¦

¦00000111¦    ¦ C ¦<-+-¦ 7 <---- 0 ¦<--

L---------    L----    L------------

RLC r                     RLC (HL)

---------¬ ------T---¬    ---------¬ ---------¬

¦11001011¦ ¦00000¦ r ¦    ¦11001011¦ ¦00000110¦

L--------- L-----+----    L--------- L---------

RLC (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00000110¦

L--------- L--------- L-------- L---------

RLC (IY+d)



---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00000110¦

L--------- L--------- L-------- L---------

RLA           --------------------------¬

---------¬    ¦ ----¬    ------------¬  ¦

¦00010111¦    L-¦ C ¦<---¦ 7 <---- 0 ¦<--

L---------      L----    L------------

RL r                      RL (HL)

---------¬ ------T---¬    ---------¬ ---------¬

¦11001011¦ ¦00010¦ r ¦    ¦11001011¦ ¦00010110¦

L--------- L-----+----    L--------- L---------

RL (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00010110¦

L--------- L--------- L-------- L---------

RL (IY+d)

---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00010110¦

L--------- L--------- L-------- L---------

RRCA          -----------------¬

---------¬    ¦  ------------¬ ¦  ----¬

¦00001111¦    L->¦ 7 ----> 0 ¦-+->¦ C ¦

L---------       L------------    L----

RRC r                     RRC (HL)

---------¬ ------T---¬    ---------¬ ---------¬

¦11001011¦ ¦00001¦ r ¦    ¦11001011¦ ¦00001110¦

L--------- L-----+----    L--------- L---------

RRC (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00001110¦

L--------- L--------- L-------- L---------

RRC (IY+d)

---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00001110¦

L--------- L--------- L-------- L---------

RRA           ---------------------------¬


---------¬    ¦  ------------¬    ----¬  ¦

¦00011111¦    L->¦ 7 ----> 0 ¦--->¦ C ¦---

L---------       L------------    L----

RR r                      RR (HL)

---------¬ ------T---¬    ---------¬ ---------¬

¦11001011¦ ¦00011¦ r ¦    ¦11001011¦ ¦00011110¦

L--------- L-----+----    L--------- L---------

RR (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00011110¦

L--------- L--------- L-------- L---------

RR (IY+d)

---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00011110¦

L--------- L--------- L-------- L---------

     ----¬    ------------¬

     ¦ C ¦<---¦ 7 <---- 0 ¦<-0

     L----    L------------

SLA r                     SLA (HL)

---------¬ ------T---¬    ---------¬ ---------¬

¦11001011¦ ¦00100¦ r ¦    ¦11001011¦ ¦00100110¦

L--------- L-----+----    L--------- L---------

SLA (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00100110¦

L--------- L--------- L-------- L---------

SLA (IY+d)

---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00100110¦

L--------- L--------- L-------- L---------

        ------------¬    ----¬

     -->¦ 7 ----> 0 ¦--->¦ C ¦

     ¦  L------------    L----

     ¦   ^

     L----

SRA r                     SRA (HL)

---------¬ ------T---¬    ---------¬ ---------¬

¦11001011¦ ¦00101¦ r ¦    ¦11001011¦ ¦00101110¦

L--------- L-----+----    L--------- L---------

SRA (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00101110¦

L--------- L--------- L-------- L---------

SRA (IY+d)

---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00101110¦

L--------- L--------- L-------- L---------

        ------------¬    ----¬

     0->¦ 7 ----> 0 ¦--->¦ C ¦

        L------------    L----

SRL r                     SRL (HL)

---------¬ ------T---¬    ---------¬ ---------¬



¦11001011¦ ¦00111¦ r ¦    ¦11001011¦ ¦00111110¦

L--------- L-----+----    L--------- L---------

SRL (IX+d)

---------¬ ---------¬ --------¬ ---------¬

¦11011101¦ ¦11001011¦ ¦   d   ¦ ¦00111110¦

L--------- L--------- L-------- L---------

SRL (IY+d)

---------¬ ---------¬ --------¬ ---------¬

¦11111101¦ ¦11001011¦ ¦   d   ¦ ¦00111110¦

L--------- L--------- L-------- L---------

                                   ----------------¬

RLD                                ¦               Ў

---------¬ ---------¬     ------T-----¬   ------T-----¬

¦11101101¦ ¦01101111¦     ¦ 7-4 ¦ 3-0 ¦   ¦ 7-4 ¦ 3-0 ¦

L--------- L---------     L-----+------   L-----+------

                                   ^        ¦ ^    ¦

                                   L--------- L-----

                                A               (HL)

                                   ---------¬ -----¬

RRD                                ¦        Ў ¦    Ў

---------¬ ---------¬     ------T-----¬   ------T-----¬

¦11101101¦ ¦01100111¦     ¦ 7-4 ¦ 3-0 ¦   ¦ 7-4 ¦ 3-0 ¦

L--------- L---------     L-----+------   L-----+------

                                   ^               ¦

                                   L----------------

                                A               (HL)

Микропроцессор Z80 имеет весьма развитую систему операций сдвигов. В неё входят арифметические сдвиги вправо и влево (инструкции SLA и SRA), логический сдвиг вправо (SRL), циклические сдвиги вправо и влево через флажок переноса (RRA, RR, RLA, RL) и без флажка переноса (RRCA, RRC, RLCA, RLC). Кроме того, имеются две весьма специфические инструкции так называемого десятичного сдвига, обеспечивающие “вращение” младшего полубайта аккумулятора  и полубайтов ячейки памяти, адрес которой располагается в регистровой паре HL (RLD и RLC). Схемы выполнения сдвигов приведены выше одновременно со структурами их кодов операций.

Инструкции RLCA, RLA, RRCA и RRA обеспечивают циклический сдвиг содержимого аккумулятора.


Только эти четыре инструкции имелись в системе команд микропроцессора Intel 8080, что порой весьма сильно осложняло его программирование. Эти инструкции сбрасывают флажки H и N, а во флажок C заносится значение выдвинутого из аккумулятора разряда.

Инструкции RLC, RL, RRC и RR являются аналогами инструкций RLCA, RLA, RRCA и RRA, обеспечивающими циклический сдвиг содержимого любого регистра общего назначения, а также ячейки памяти, адресуемой либо содержимым регистровой пары HL, либо суммой содержимого одного из индексных регистров и 8-разрядного смещения, входящего в состав команды. Заметим, что эти инструкции способны выполнить сдвиг содержимого аккумулятора, однако они выполняются в два раза медленнее, чем команды RLCA, RLA, RRCA и RRA, и занимают два байта памяти вместо одного. Инструкции RLC, RL, RRC и RR изменяют состояние флажков S, Z и P/V в соответствии с полученным результатом (последний содержит признак чётности результата); во флажок C заносится значение выдвинутого разряда; флажки H и N обнуляются. Таким образом, использование двухбайтовых команд вида RLC A вместо однобайтовых вида RLCA может потребоваться в тех случаях, когда необходимо проанализировать результат операции сдвига, отражаемый флажками S, Z и P/V.

Инструкции SLA и SRA выполняют арифметический сдвиг влево и вправо содержимого аккумулятора, любого регистра общего назначения или ячейки памяти, адрес которой находится в регистровой паре HL или определяется суммированием содержимого одного из индексных регистров и 8-разрядного смещения. Инструкция SRL аналогична инструкции SRA, но выполняет логический сдвиг вправо (разница заключается в том, что при арифметическом сдвиге вправо значение старшего (знакового) разряда операнда не изменяется, а при логическом сдвиге в старший разряд заносится нуль). Все эти инструкции влияют на флажки аналогично инструкциям RLC, RL, RRC и RR: сбрасывают флажки H и N; заносят во флажок C значение выдвинутого разряда операнда; устанавливают или сбрасывают флажки S, Z и P/V в соответствии с полученным результатом (флажок P/V содержит признак чётности результата).

Операции RLD и RRD обменивают местами три полубайта: младший полубайт аккумулятора и оба полубайта ячейки памяти, адресуемой содержимым регистровой пары HL. Содержимое старшего полубайта аккумулятора не изменяется. Эти команды могут использоваться при преобразовании двоично-десятичных упакованных чисел (по две цифры в байте) в распакованный формат (код цифры – в младшем полубайте, код зоны – в старшем) и обратно. Они не оказывают влияния на флажок C, сбрасывают флажки H и N и устанавливают или сбрасывают флажки S, Z и P/V в соответствии с результатом, получившимся в аккумуляторе (флажок P/V является признаком чётности результата).


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