На самом деле, метки - это числовые адреса команд. Поскольку, к памяти обращаемся мы побайтно, а адрес метки дан для 16-битной организации адресного пространства, то адрес-метку нужно умножать на два.
Причем, <метка>*2 адресует один байт, а <метка>*2+1 адресует следующий байт. Поэтому у вас в примере ошибка - старшая и младшая часть слова у вас будут равны одному и тому же байту из памяти.
FreshMan, для AVR метки во флэш-памяти представляют собой адрес в машинных словах. А машинное слово у 8-битных AVR-ок равно, как ни странно, 16 битам, т.е. 2-м байтам. Доступ к памяти с помощью команд LPM/SPM производится с точностью до байта.
Допустим метка DAT имеет значение 7 и надо достать оттуда один байт. Так как машинное слово равно двум байтам, то 7*2=14. Вот и надо достать байт по адресу 14.
Чтобы быть ещё более точным, то адресация в словах работает только в сегменте кода (.cseg). В сегменте данных (.dseg) и EEPROM (.eseg) адреса в байтах.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Как ни странно, и байт и слово может иметь другой размер.
Название «байт» (слово byte представляет собой сокращение словосочетания BinarY TErm — «двоичный терм») было впервые использовано в 1956 году В. Бухгольцем (англ. Werner Buchholz) при проектировании первого суперкомпьютера IBM 7030 (англ.) для пучка одновременно передаваемых в устройствах ввода-вывода шести битов. Позже, в рамках того же проекта, байт был расширен до восьми бит.
Ряд ЭВМ 1950-х и 1960-х годов (БЭСМ-6, М-220) использовали 6-битовые символы в 48-битовых или 60-битовых машинных словах. В некоторых моделях ЭВМ производства Burroughs Computer Corporation (англ.) (ныне Unisys) размер символа был равен 9 битам. В советской ЭВМ Минск-32 использовался 7-битный байт. Постепенно 8-битные байты стали стандартом де-факто; с начала 1970-х в большинстве компьютеров байты состоят из 8 бит, а размер машинного слова кратен 8 битам.
Alexeyslav, да, оно конечно так, но сегодня понятие "байт" устоялось в значении "группа из 8-ми бит".
FreshMan, например у архитектуры ARM, в оригинальном наборе инструкций, 32-битное машинное слово. Позже у ARM появился режим Thumb, в котором машинное слово 16-битное.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Gudd-Head, 8051 это CISC. И к нему термин "машинное слово" применимо с оговорками. Там, скорее, "длинна команды".
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
команда ADC прибавляет флаг переноса, т.е. "1", если с младшими случается переполнение, поэтому к старшему нужно прибавить "0" именно командой ADC, а если прибавим командой ADD, то в случае переполнения младших старшему ничего не перепадет.
p.s. Если применять ADC к младшему байту, то к нему может прибавиться результат предыдущей любой операции влияющей на флаг переноса.... Во загнул как
После такого мальца спутники мимо Венеры пролетают. FreshMan, когда паять и программировать вживую начнем? А то такое ощущение, что голой теорией занимаетесь.
zero648 писал(а):команда ADC прибавляет флаг переноса, т.е. "1", если с младшими случается переполнение
а что будет когда со старшим случится переполнение ?
pyzhman писал(а): А то такое ощущение, что голой теорией занимаетесь.
неа....., счас я занимаюсь голым ремонтом ,а в передишках штудирую асм для разминки мозгов
похожие мигалки я уже паял и програмировал на Си, а тут стало интерестно как же вся эта кухня работает на асме