МИКРОКОНТРОЛЛЕР AVR - МИКРОКОНТРОЛЛЕР AVR

Если содержимое R1 и R2 равно -100, то результатом сложения этих чисел будет -200 или $38, что является положительным числом. При этом флаг N будет сброшен в 0, показывая, что результат положителен, однако будет установлен флаг V, означающий, что на самом деле это не так.

При чтении предыдущего абзаца вы, возможно, заметили, что при помощи флагов N и V можно определить настоящий знак результата. Именно это и делает флаг знака S в регистре состояния. Если вы внимательно изучите описание команд, то увидите, что этот флаг принимает следующее значение:

S = N ^ V.

Использование флага S позволяет рассматривать результат как 9-разрядное число со знаком, где старшим (знаковым) разрядом как раз и является флаг S. Как было отмечено при описании флага V, он устанавливается в 1, когда бит 7 результата имеет неправильное значение, то есть результат не представлен правильным числом со знаком в дополнительном коде. Выполнив операцию «Исключающее ИЛИ» над значениями флага V и бита 7 результата, который хранится в бите N, вы получите реальный знак результата. В первом примере (100 + 100) происходит установка в 1 флагов V и N, в результате флаг S будет равняться нулю (1 ^ 1 = 0). Во втором примере (-100 - 100) флаг N сбрасывается в 0, а флаг V устанавливается в 1, поэтому флаг S будет равняться единице, указывая на то, что результат отрицательный.

Go to Top