При выполнении команды «инверсия» над аккумулятором осуществляется поразрядное инвертирование содержимого аккумулятора, т. е. каждый бит, имевший значение логической 1, принимает значение логического 0 и наоборот, при этом формируется обратный код (дополнение до 1) слова данных. Это однобайтовая команда, выполняемая за 4 машинных такта. При ее выполнении значения разрядов слова состояния не изменяются.
Следующий пример иллюстрирует выполнение логической команды CMA:
Содержимое аккумулятора |
1001 0110 |
Результат (аккумулятор) |
0110 1001 |
Часто возникает необходимость получения дополнительного кода (дополнения до 2). Его можно сформировать путем образования обратного кода и последующего положительного приращения содержимого аккумулятора.
5.2.3. Команды сравнения
Часто возникает ситуация, когда требуется сравнить два двоичных числа.
Сравнить два двоичных числа можно при помощи команды «вычитание».Для этого слово-маска вычитается из данных, находящихся в аккумуляторе. Если эти два слова данных равны, устанавливается в 1 разряд нулевого результата в регистре состояния. Если значение данных в аккумуляторе меньше, чем значение эталонных данных, то в 1 устанавливается разряд переноса, так как имеет место заем. Если значение данных в аккумуляторе больше значения эталонных данных, то ни один из разрядов регистра состояния не устанавливается в 1.
Однако сравнению с помощью команды «вычитание» присущ тот недостаток, что в результате ее выполнения происходит потеря исходного содержимого аккумулятора.
От этого недостатка свободна команда «сравнение». Выполнение этой команды аналогично выполнению команды «вычитание», однако ее результат не загружается в аккумулятор. Хотя по окончании операции исходные данные в аккумуляторе не изменяются, разрядам слова регистра состояния, присваиваются значения, соответствующие особенностям полученного результата:
- флаг нуля (Z) устанавливается, если содержимое регистра или байта данных совпадает с содержимым аккумулятора;
- флаги знака (S) и переноса (С) устанавливаются, если содержимое регистра или байта данных больше содержимого аккумулятора;
- флаг вспомогательного переноса (АС) устанавливается, если содержимое младших четырех разрядов регистра или байта данных больше содержимого соответствующих разрядов аккумулятора;
- флаг четности (Р) устанавливается если байт разности между содержимым аккумулятора и содержимым регистра или байта данных содержит четное число единиц.
Существует три вида команд сравнения:
Сравнение регистра с аккумулятором CMP r
Сравнение косвенно адресуемой памяти с
аккумулятором CMP М
Сравнение непосредственных данных с
аккумулятором CPI, данные
5.2.4. Команды циклического сдвига
Команды «циклический сдвиг» 1-байтовые. При выполнении данных операций содержимое флагов регистра состояния не изменяется за исключением флага переноса. Флаг переноса участвует в выполнении этих операций, и его значение изменяется по мере передачи данных в него и из него.
Существует четыре вида команд циклического сдвига:
Циклический сдвиг аккумулятора влево RLС
Циклический сдвиг аккумулятора вправо RRC
Циклический сдвиг аккумулятора влево
через бит переноса RAL
Циклический сдвиг аккумулятора вправо
через бит переноса RAR
При выполнении команды «циклический сдвиг аккумулятора влево» содержимое старшего разряда аккумулятора передается в его младший разряд и в разряд переноса (С) регистра состояния. Содержимое каждого разряда аккумулятора перемещается в соседний, старший разряд.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.