Команда Ассемблер ADC

Обсуждаем контроллеры компании Atmel.
Ответить
Сам-себе
Родился
Сообщения: 4
Зарегистрирован: Пт янв 27, 2012 19:32:14

Команда Ассемблер ADC

Сообщение Сам-себе »

В компиляторе AVR Studio4 просматривал работу команд
ADD═ Rd,Rr═ Суммирование без переноса Rd = Rd + Rr═
И
ADC Rd,Rr Суммирование с переносом Rd = Rd + Rr + C
И не каких различий между этими двумя командами в регистрах и портах не обнаружил. Скажите пожалуйста что это за С и куда она переносится?
Реклама
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: Команда Ассемблер ADC

Сообщение blackx »

C - это Carry Flag, или флаг переноса в регистре SREG (или как он там у AVR наз-ся, уже забыл).

Carry Flag устанавливается тогда, когда происходит переполнение при выполнении арифмет. операции:

160 + 200 = 105 (360 > 255) , флаг переноса устанавливается в 1.
10 - 30 = 235 (-20 < 0), флаг переноса устанавливается в 1.

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

О, нашел про регистр доку http://www.atmel.com/images/doc0856.pdf
Изображение only pure true norwegian blackx Изображение
Реклама
Сам-себе
Родился
Сообщения: 4
Зарегистрирован: Пт янв 27, 2012 19:32:14

Re: Команда Ассемблер ADC

Сообщение Сам-себе »

Понял что <С> это бит регистра SREG. Но в компиляторе все равно хоть с одной хоть с другой командой в SREG устанавливаются при переполнении одни и те же флаги H S N C. Ни как не могу уловить разницы.
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

Re: Команда Ассемблер ADC

Сообщение SmarTrunk »

Вроде, если бит переноса С=1 то команда ADC прибавит ее, и даст результат на единицу больше, чем команда ADD. Если бит преноса С=0, то разницы не будет.

То же самое с SUB - SBC, SUBI - SBCI
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Команда Ассемблер ADC

Сообщение ploop »

А как без него вы собираетесь складывать? Например 16 битное число с 32х-битным.

Код: Выделить всё

add r20,r16            
adc r21,r17                 
adc r22,null
adc r23,null
r16, r17 - 16-разрядное число
r20-r23 - 32-разрядное
null - регистр с нулём
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Команда Ассемблер ADC

Сообщение YS »

хоть с одной хоть с другой командой в SREG устанавливаются при переполнении одни и те же флаги H S N C
Устанавливаются - да. ADC учитывает перенос.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
Сам-себе
Родился
Сообщения: 4
Зарегистрирован: Пт янв 27, 2012 19:32:14

Re: Команда Ассемблер ADC

Сообщение Сам-себе »

Спасибо. Разобрался. Оказывается содержание нулевого бита С регистра SREG при команде ADC складывается с содержанием нулевого бита регистра РОН.
Ответить

Вернуться в «AVR»