Система команд микропроцессора КР580вм80а на базе микро-ЭВМ "Электроника 580". Технические характеристики микро-ЭВМ, страница 9

Операцию вычитания заменяем сложением уменьшаемого, представленного в прямом коде, с вычитаемым, представленным в дополнительном коде. Если в результате получено число, содержащее нуль в старшем разряде, то результат является положительным числом, представленным в прямом коде. Если в результате получено число, содержащее единицу в старшем разряде, то результат является отрицательным числом, представленным в дополнительном коде. Для правильной интерпретации такого результата необходимо найти его прямой код, т.е. проинвертировать полученный результат с последующим прибавлением единицы младшего разряда.

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

Команды «вычитания» похожи на команды «сложения». Все рассматриваемые в данном разделе команды вычитают данные, на которые имеется указание в команде, из данных, находящихся в аккумуляторе. Другими словами, в аккумуляторе всегда размещается уменьшаемое, а имеющийся в составе команды «вычитания» адрес, задает местоположение вычитаемого.

Результат выполнения команды «вычитание» (разность) помещается в аккумулятор. Исходное значение уменьшаемого теряется. При этом соответствующим образом устанавливаются разряды регистра состояния.

Во всех командах «вычитания» флаг переноса устанавливается при наличии заема в старший разряд, в противном случае сбрасывается. Флаг дополнительного переноса устанавливается при наличии заема из старших четырех разрядов в младшие, в противном случае сбрасывается.

Для выполнения вычитания служат следующие команды:

Вычитание с регистром                                               SUB r

Косвенное вычитание с памятью                                 SUB М

Вычитание с непосредственными данными                          SUI, данные

4.2.2. Команды вычитания с заемом

Аналогично тому, как имеются команды «сложение с переносом», существуют команды «вычитание с заемом». Заем происходит, когда вычитаемое оказывается больше уменьшаемого. При этом устанавливается в 1 разряд переноса (заема).

К командам вычитания с заемом относятся:

Вычитание с регистром и заемом                                  SBB r

Косвенное вычитание с памятью и заемом                    SBB М

Вычитание с непосредственными данными и заемом    SBI, данные

Вычитание, выполняемое над числами двойного формата, иллюстрирует использование и команды «вычитание», и команды «вычитание с переносом». Соответствующий пример приведен в таблице 4.1. Десятичное число 12460 вычитается из десятичного числа 30812. Вычитание выполняется отдельно над старшими и младшими байтами.

Как видно, после вычитания младших байтов, для завершения вычитания необходим заем из старшего байта. Это означает, что в данном примере младший байт уменьшаемого меньше младшего байта вычитаемого. Следовательно, разряд переноса регистра состояния устанавливается в 1.

Таблица 4.1

Двоичное представление

Десятичное представление

старший байт

младший байт

Бит заема

1

Уменьшаемое

0111 1000

0101 1100

30 812

Вычитаемое

0011 0000

1010 1100

12 460

Разность

0100 0111

1011 0000

18 352

При выполнении обработки старших байтов используется команда «вычитание с переносом». В этой операции участвуют уменьшаемое, вычитаемое и бит заема. Вычитаемое и бит разряда переноса регистра состояния отнимаются от уменьшаемого.

4.2.3. Команды положительного и отрицательного приращения

Команды «приращение положительное» и «приращение отрицательное» являются в сущности специальными арифметическими командами. При выполнении команды «приращение положительное» к текущему содержимому регистра прибавляется 1. По команде «приращение отрицательное» из текущего содержимого регистра вычитается 1.