Страница 1 из 1

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

Добавлено: Вт янв 15, 2013 18:57:07
Сам-себе
В компиляторе AVR Studio4 просматривал работу команд
ADD═ Rd,Rr═ Суммирование без переноса Rd = Rd + Rr═
И
ADC Rd,Rr Суммирование с переносом Rd = Rd + Rr + C
И не каких различий между этими двумя командами в регистрах и портах не обнаружил. Скажите пожалуйста что это за С и куда она переносится?

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

Добавлено: Вт янв 15, 2013 19:04:20
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

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

Добавлено: Вт янв 15, 2013 19:47:27
Сам-себе
Понял что <С> это бит регистра SREG. Но в компиляторе все равно хоть с одной хоть с другой командой в SREG устанавливаются при переполнении одни и те же флаги H S N C. Ни как не могу уловить разницы.

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

Добавлено: Вт янв 15, 2013 20:06:00
SmarTrunk
Вроде, если бит переноса С=1 то команда ADC прибавит ее, и даст результат на единицу больше, чем команда ADD. Если бит преноса С=0, то разницы не будет.

То же самое с SUB - SBC, SUBI - SBCI

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

Добавлено: Вт янв 15, 2013 20:15:01
ploop
А как без него вы собираетесь складывать? Например 16 битное число с 32х-битным.

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

add r20,r16            
adc r21,r17                 
adc r22,null
adc r23,null
r16, r17 - 16-разрядное число
r20-r23 - 32-разрядное
null - регистр с нулём

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

Добавлено: Сб янв 19, 2013 21:22:54
YS
хоть с одной хоть с другой командой в SREG устанавливаются при переполнении одни и те же флаги H S N C
Устанавливаются - да. ADC учитывает перенос.

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

Добавлено: Вс фев 17, 2013 19:36:56
Сам-себе
Спасибо. Разобрался. Оказывается содержание нулевого бита С регистра SREG при команде ADC складывается с содержанием нулевого бита регистра РОН.