Программирование в машинных кодах и на языке ассемблера 1993 г.

Расширение системы команд процессора - логические конструкции.


2.2. ЛОГИЧЕСКИЕ КОНСТРУКЦИИ

74. Сброс заданных битов в аккумуляторе - AND N.

Число N является маской. Оно содержит нули в тех битах, которые должны быть выключены в аккумуляторе и единицы в тех позициях, которые должны остаться без изменений. Например, AND 1101 1011B - выключает 2-ой и 5-ый биты.

Поскольку команда RES выключает биты только по одному, то для получения такого же результата пришлось бы давать последовательность:

RES 2,A RES 5,A

75. Проверка битов в аккумуляторе.

Задача состоит в том, чтобы выставить флаги так, как будто бы была выполнена команда AND для аккумулятора и для регистра или адреса, но содержимое аккумулятора при этом оставить без изменений.

LD reg,A - запомнили аккумулятор

LD HL,ADDR - указание на адрес

AND (HL) - логическое "И"

LD A, reg - восстановили аккумулятор

Команда LD на флаги не влияет.

76. Операция AND для флагового регистра и числа. Маскирование флагов .

переброска флаг. регистра через стек ввод маски маскирование

сохранение результата в rpl обратная переброска в регистр F через стек

AND F, N

PUSH AF POP rp LD A, N AND rpl LD rpl, A PUSH rp POP AF

!. Логические конструкции "ИЛИ".

77. Включение заданных битов в аккумуляторе.

OR N

Число N является маской. Оно содержит единицы в тех битах, которые должны быть включены в аккумуляторе и нули в тех позициях, которые должны остаться без изменений. Например: OR 0010 0100B - включает 2-ой и 5-й биты.

Поскольку команда SET включает биты только по одному, то для получения такого же результата пришлось бы давать последовательность :

SET 2, A SET 5,A

78. Проверка 16-разрядного регистра на 0.

LD A,rph OR rpl

В результате операции будет 0 (включится флаг Z) в том и только в том случае, если и старший и младший байт проверяемого регистра равны нулю.

79. Операция OR для флагового регистра и числа. Маскирование флагов.

OR F, N

PUSH AF

переброска флаг. регистра

POP rp

через стек

LD A, N

ввод маски

OR rpl

маскирование

LD rpl, A

сохранение результата в rpl

PUSH rp

обратная переброска в

POP AF

регистр F через стек

2.2.3. Логические конструкции "ИСКЛЮЧАЮЩЕЕ ИЛИ".

80. Переключение заданных битов в аккумуляторе.

XOR N

Число N является маской. Оно содержит единицы в тех битах, которые должны быть переключены в аккумуляторе и нули в тех битах, которые должны остаться без изменений. Например, XOR 0010 0100В - переключает 2-й и 5-й биты.

81. Инвертировать аккумулятор с установкой флагов.

XOR FF

Эта команда отличается от CPL тем, что в отличие от нее влияет на флаги.

82. Побитное сравнение. Сравнить аккумулятор с регистром и включить биты в тех позициях, которые отличаются.

XOR reg

2.2.4. Логические конструкции "HE".

84. Инвертировать содержимое заданного адреса.

CPL (ADDR) LD HL, ADDR

LD A,(HL) CPL

LD (HL),A

85. Инвертировать младший бит содержимого регистра.

INC reg

ИЛИ

DEC reg

Правда, здесь надо иметь в виду, что эти команды могут изменить прочие биты в регистре.

86. Инвертировать младший бит заданного адреса.

LD HL,ADDR INC (HL)

ИЛИ

LD HL,ADDR DEC (HL)

87. Инвертировать младший полубайт в аккумуляторе.

XOR 0F

88. То же, но старший.

XOR F0

89. Инвертировать содержимое регистровой пары.

CPL rp LD HL, FFFF

AND A SBC HL, rp

Повторно напоминаем, что поскольку для 16-разрядных регистров нет команды SUB, приходится использовать команду SBC, а она влечет за собой еще и вычитание содержимого флага переноса (флага С) , поэтому этот флаг надо предварительно занулить (очистить), что делается командой AND A.

2.2.5. Конструкции сдвига.

90. Логический сдвиг аккумулятора влево.

ADD A,A

91. Логический сдвиг влево содержимого HL. SLL HL ADD HL, HL

92. Логический сдвиг влево индексного регистра. SLL xy ADD xy, xy

93. Логический сдвиг вправо содержимого регистровой пары. SRL rp SRL rph

RR rpl

Ключевым здесь является то, что младший байт здесь должен не сдвигаться, а ротировать, чтобы "подхватить" содержимое флага переноса, образовавшееся в результате сдвига старшего байта.

94. Арифметический сдвиг вправо содержимого регистровой

пары.

SRA rp SRA rph

RR rpl

95. Логический сдвиг влево 16-разрядного числа, находящегося по заданному адресу.

SLL (ADDR) LD HL, ADDR

SLA (HL) INC HL

ИЛИ

LD xy,ADDR SLA (xy+0) RL (xy+1)

При сдвиге влево сначала сдвигается младший байт, а затем ротируется старший.

96. Логический сдвиг вправо 16-разрядного числа, находящегося по заданному адресу.

SRL (ADDR) LD HL, ADDR+1

SRL (HL) DEC HL RR (HL)

ИЛИ

LD xy,ADDR SRL (xy+1) RR (xy+0)

97. Обмен полубайтов в аккумуляторе.

RLCA RRCA

RLCA ИЛИ RRCA

RLCA RRCA

RLCA RRCA

98. Нормализация аккумулятора Аккумулятор сдвигается вле во до тех пор, пока его старший байт не будет равен 1. Не сдвигать, если в аккумуляторе содержится 0.

AND A - проверка аккумулятора на 0

JP M,END - выход, если старший бит = 1

JR Z, END - выход, если акк-р равен нулю

SHIFT: ADD A,A - сдвиг влево

JP P,SHI FT - повторить сдвиг, если стар

ший бит равен нулю

END: NOP

99. Нормализация содержимого регистровой пары HL.

LD A, H - проверка содержимого

OR L регистровой пары на ноль

JR Z,END - выход, если 0

SHIFT: ADD HL,HL - сдвиг влево

JR NC,SHIFT - сдвигать, пока не произойдет перенос

RR H - затем вернуть вправо на одну

RR L позицию

NOP

END

Примечание: ADD HL,HL влияет на флаг переноса, но не влия ет на флаг знака и флаг нуля.

2 .2.6. Конструкции ротации.

100.

Ротация

регистровой

пары вправо.

Проблема состоит в том,

чтобы младший бит младшего байта

был

перенесен в ст ' арший бит старшего байта.

RR

rp

RRC rpl

- младший бит копируется в С

RL rpl

- байт восстанавливается, но

флаг С остался

RR rph

- ротация старшего байта

RR rpl

- ротация младшего байта

101.

Ротация

регистровой

пары влево.

RL

rp

RLC rph

RR rph

RL rpl

RL rph

102 .

Ротация

регистровой

пары вправо через флаг переноса

RRC

rp

RR rph

RR rpl

103 .

Ротация

регистровой

пары влево через флаг переноса,

RLC

rp

RL rph

RL rpl

104.

Ротация

вправо 16-

разрядного числа, находящегося

указанному

адресу

, через флаг

переноса.

RRC

(ADDR)

LD HL,ADDR+1

RR (HL)

DEC HL

RR (HL)

ИЛИ

LD xy,ADDR RR (xy+1) RR (xy+0)

+

влево 16-разрядного через флаг переноса LD HL,ADDR RL (HL) INC HL RL (HL)

LD xy,ADDR RL (xy+0) RL (xy+1)

105. Ротация указанному адресу, RLC (ADDR)

ИЛИ

2.2.7. Конструкции для проверки регистров и адресов.

106. Проверка аккумулятора. Выставляются флаги в соответствии с содержимым, которое при этом не изменяется.

AND A или OR A

Оба варианта сбрасывают флаг переноса.

107. Проверка состояния регистра с выставлением флагов.

INC reg DEC reg

108. Проверка состояния заданного адреса.

LD HL,ADDR INC (HL) DEC (HL)

109. Проверка содержимого регистра.

LD A,rph OR rpl

110. Проверка содержимого индексного регистра.

PUSH xy POP rp LD A,rph OR rpl

111. Проверка 16-битного числа, находящегося по заданному

адресу.

LD HL,(ADDR) LD A, H OR L




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Всё о музыке - Только хиты.
Начало - хочу извиниться перед редакцией газеты ON-LINE...
Почта - Обратная связь: ответное письмо Alex'а из Нижнего Тагила, выставленного в прошлом номере в "Уголок ламера".
Новости - конкурент Enlight'у - Consul party в городе Сочи!
Обратная связь - контакты редакции.

В этот день...   29 марта