Страница 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 складывается с содержанием нулевого бита регистра РОН.