Операцию вычитания заменяем сложением уменьшаемого, представленного в прямом коде, с вычитаемым, представленным в дополнительном коде. Если в результате получено число, содержащее нуль в старшем разряде, то результат является положительным числом, представленным в прямом коде. Если в результате получено число, содержащее единицу в старшем разряде, то результат является отрицательным числом, представленным в дополнительном коде. Для правильной интерпретации такого результата необходимо найти его прямой код, т.е. проинвертировать полученный результат с последующим прибавлением единицы младшего разряда.
Однако быстрее и легче не создавать специальную программу вычитания, а возложить реализацию этой операции непосредственно на микропроцессор.
Команды «вычитания» похожи на команды «сложения». Все рассматриваемые в данном разделе команды вычитают данные, на которые имеется указание в команде, из данных, находящихся в аккумуляторе. Другими словами, в аккумуляторе всегда размещается уменьшаемое, а имеющийся в составе команды «вычитания» адрес, задает местоположение вычитаемого.
Результат выполнения команды «вычитание» (разность) помещается в аккумулятор. Исходное значение уменьшаемого теряется. При этом соответствующим образом устанавливаются разряды регистра состояния.
Во всех командах «вычитания» флаг переноса устанавливается при наличии заема в старший разряд, в противном случае сбрасывается. Флаг дополнительного переноса устанавливается при наличии заема из старших четырех разрядов в младшие, в противном случае сбрасывается.
Для выполнения вычитания служат следующие команды:
Вычитание с регистром 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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.