Микропроцессор Z80



Операции сдвига - часть 4


Только эти четыре инструкции имелись в системе команд микропроцессора 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 является признаком чётности результата).




Содержание  Назад  Вперед