Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава В. Арифметические операции и операции в двоично-десятичном формате 2 1 7 На самом деле девятиразрядное число 1 0 0 0 0 0 0 0 0 есть не что иное, как 256, т . е . то же самое максимальное значение диапазона + единица, и мы здесь выполнили две операции : прибавили к уменьшаемому эти самые 256, а затем выполнми вычита­ ние, но уже в положительной области для всех участвующих чисел. А что резуль­ тат? Он будет равен 255 , т. е. тому самому числу, которое, как мы договорились, с п к р и е дставляет собой -1 . То есть вычитание в такой системе происходит автоматиче­ правильно, независимо от знака участвующих чисел. Немного смущает только · эта самая операция нахождения дополнения до 2-х, точ­ нее, в нашем случае, до 256 - как ее осуществить на практике, если схема всего имее т 8 разрядов? В дальнейшем мы увидим, что на практике она не нужна, - при вычитании и в микроконтроллерах, и в обычных электронных счетчиках все осу­ ществляется автоматически. Впрочем, в микропроцессорах есть и отдельная команда, которая возвращает до­ полнение до 2-х. В большинстве ассемблеров она называется neg, от слова «нега­ тивный», потому что просто-напросто меняет знак исходного числа, если мы дого­ вариваемся считать числа «со знаком», и опредеЛяется как операция вычитания из нуля . Рассмотрим из любопытства, как ее можно было бы осуществить «вручную», не ком о бращаясь в Действительности к девятому разряду. Для этого выпишем столби­ какие-нибудь числа (далее для примера: 2 и 240), результаты операции нахож­ дения их дополнения до 2-х, и результат еще одной манипуляции, которая пред­ ставляет собой вычитание единицы из дополнения до 2-х, или, что то же самое, просто вычитания исходного числа из наивысшего числа диапазона (25 5 ) : Исходное число 2 0 0 0 0 0 0 1 0 Дополнение до 2-х 256 - 2 = 254 1 1 1 1 1 1 1 0 Дополнение до 1 255 - 2 = 253 1 1 1 1 1 1 0 1 Исходное число 240 1 1 1 1 0 0 0 0 Дополнение до 2-х 256 - 240 = 1 6 0 0 0 1 0 0 0 0 Дополнение до 1 255 - 240 = 1 5 0 0 0 0 1 1 1 1 Если мы сравним двоичные представления в верхней и нижней строках в каждом случае, то увидим, что их можно получить друг из друга инверсией каждого из би­ тов. Эта операция называется нахождением обратного кода или дополнения до 1 (потому что число, из которого вычитается, содержит единицы во всех разрядах). Для десятичной системы аналогичная операция называется дополнением до 9-ти. Для нахождения дополнения до 1 девятый разряд не требуется, да и схему можно построить так, чтобы никаких вычитаний не производить, а просто переворачивать биты. Но не ищите в микроконтроллерах специальной операции инверсии битов - для этого вызывается именно команда нахождения дополнения до 1 (в АVR­ ассемблере она обозначается сот и определяется как операция вычитания из $ FF).

RkJQdWJsaXNoZXIy MTExODQxMg==