В компиляторе AVR Studio4 просматривал работу команд
ADD═ Rd,Rr═ Суммирование без переноса Rd = Rd + Rr═
И
ADC Rd,Rr Суммирование с переносом Rd = Rd + Rr + C
И не каких различий между этими двумя командами в регистрах и портах не обнаружил. Скажите пожалуйста что это за С и куда она переносится?
Команда Ассемблер ADC
- Реклама
- blackx
- Говорящий с текстолитом
- Сообщения: 1518
- Зарегистрирован: Пт дек 28, 2012 21:56:46
- Откуда: St. Petersburg
Re: Команда Ассемблер ADC
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
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 
Re: Команда Ассемблер ADC
Понял что <С> это бит регистра SREG. Но в компиляторе все равно хоть с одной хоть с другой командой в SREG устанавливаются при переполнении одни и те же флаги H S N C. Ни как не могу уловить разницы.
Re: Команда Ассемблер ADC
Вроде, если бит переноса С=1 то команда ADC прибавит ее, и даст результат на единицу больше, чем команда ADD. Если бит преноса С=0, то разницы не будет.
То же самое с SUB - SBC, SUBI - SBCI
То же самое с SUB - SBC, SUBI - SBCI
Re: Команда Ассемблер ADC
А как без него вы собираетесь складывать? Например 16 битное число с 32х-битным.
r16, r17 - 16-разрядное число
r20-r23 - 32-разрядное
null - регистр с нулём
Код: Выделить всё
add r20,r16
adc r21,r17
adc r22,null
adc r23,null
r20-r23 - 32-разрядное
null - регистр с нулём
- Реклама
Re: Команда Ассемблер ADC
Устанавливаются - да. ADC учитывает перенос.хоть с одной хоть с другой командой в SREG устанавливаются при переполнении одни и те же флаги H S N C
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Команда Ассемблер ADC
Спасибо. Разобрался. Оказывается содержание нулевого бита С регистра SREG при команде ADC складывается с содержанием нулевого бита регистра РОН.


