Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объясните назначение флага переноса (С). Можно ли использовать этот флаг при работе с числами со знаком. Если да, то как.

Поиск

Ответ:

Разряд 0 - С (флаг переноса). Этот флаг указывает на переполнение в результате выполнения какой-либо арифметической или логической операции. Флаг переноса устанавливается различными командами и может опрашиваться напрямую. К операциям, изменяющим этот флаг, относятся сложение, вычитание, циклические сдвиги и некоторые логические операции.
Результат сложения двух 32-разрядных чисел без знака может оказаться 33-разрядным, поэтому возможное переполнение будет сохранено во флаге переноса C — девятый разряд регистра состояния ST1. Та же самая программа может быть использована для сложения 32‑разрядных чисел со знаком. В этом случае может возникнуть так называемое знаковое переполнение (флаг OV – ниже более подробно).

Дополнительно:
Например, переполнение в старшем разряде может возникать при сложении двух однобайтовых чисел. В результате сложения возникает переполнение в старшем разряде, и устанавливается флаг переноса. В случае сложения, флаг С устанавливается, если возникает перенос в самом старшем разряде, в случае же вычитания он устанавливается в том случае, если в этом разряде возникает "заем".

Этот принцип важен для арифметических операций, которые выполняются над данными, состоящими из нескольких байтов. Рассмотрим еще один пример. Результат -3 можно получить или с помощью сложения (команда add) чисел +12 и -15, или же с помощью вычитания (команда sub) числа +15 из числа +12.

Для этих операций отрицательный результат определяют по флагам S и N. Возможность получить одинаковые результаты как в случае прибавления отрицательного, так и в случае вычитания положительного числа, возмещает отсутствие в наборе команд семейства AVR команды addi (сложение восьмиразрядных констант). Вычитание отрицательных значений дает такой же результат, что и при сложении положительных.

Существует еще один вариант: константа вначале загружается в какой-либо регистр, а затем содержимое обоих регистров складывается с помощью команды add. Если речь идет о такой константе как 1, то лучше просто воспользоваться командой inc. Этот разряд условий всегда устанавливается, если результат какой-либо арифметической или логической операции равен нулю. В противном случае, флаг Z сбрасывается.

 

Флаг переноса CF (англ. Carry flag) — флаг регистра признаков 8086-совместимых процессоров, который устанавливается (1), если в результате операции из старшего бита происходит перенос при сложении или заемe при вычитании, иначе CF сбрасывается. Кроме того, CF используется в логических и унарных операциях.

Такая архитектура означает, что, например, при 32-битном машинном слове результат сложения фактически получается 33-битный — 32 бита в регистре и ещё один бит в cf.

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

Числа могут быть как знаковые, так и беззнаковые. Знаковые числа всегда представляются в дополнительном коде. Это значит, что если сложить число со своим двоичным дополнением, то в результате получится ноль.

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

При выполнении арифметических операций (сложение и вычитание) в микроконтроллере TMS320x24x следует учитывать особенности архитектуры центрального процессора, состоящие в следующем:

ü реально все операции в АЛУ выполняются над 32-разрядными операндами. Двоичный результат в пределах 32-разрядной сетки оказывается правильным независимо от того, рассматриваются ли эти числа программистом как числа без знака или как числа со знаком в дополнительном коде. Отличия проявляются только в формировании признаков результата операции: флаг переноса С формируется как признак переполнения при выполнении арифметических операций над 32-разрядными числами без знака, а флаг переполнения OV – как признак переполнения при выполнении операций над 32-разрядными числами со знаком в дополнительном коде (ниже см. более подробно);

 

Флаг переноса CF (Carry Flag) индицирует перенос или заем при выполнении арифметических операций. Переносом называется ситуация, когда в результате выполнения правильной, в общем, команды образуется число, содержащее более 16 двоичных разрядов и, следовательно, не помещающееся в регистр или ячейку памяти. Пусть, например, в регистре АХ содержится число 60000, а в регистре ВХ - 40000. При выполнении команды сложения

add AX,BX в регистре-приемнике результата, которым в данном случае будет служить регистр АХ, должно быть записано число 100000, которое, разумеется, там поместиться не может. В этом случае и устанавливается флаг CF, по состоянию которого можно установить, что произошел перенос и, следовательно, содержимое АХ (которое в данном случае будет равно 100000 - 65536 = 34464) не является правильным результатом.

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

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



Поделиться:


Последнее изменение этой страницы: 2016-04-07; просмотров: 1283; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.114.228 (0.011 с.)