Я запутался в адресации. Читая гайд по авр (индексные переходы) застопорился на умножение адреса на два. Таблица переходов это всего лишь строка данных в памяти, содержащая адреса Way0…Way4. Обратите внимание на то, что данные у нас двубайтные слова dw!!! Если же мы хотим адресовать расположенные данные, например вложенную таблицу адресов переходов, то адреса нужно умножать на два. Началось с вопроса "если у нас есть таблица с адресами, то умножать каждый адрес надо на два, но почему?" В процессе написания, кажется, самому себе ответил, но хочу перепроверить Возьмём область памяти 0х01 0х02 ... 0хFF Где каждый номер соответствует байту памяти. Возьмём байт 0хАА. Если бы в байте 0хАА и 0хАВ лежала бы двубайтовая инструкция, то для счётчика адрес инструкции был бы 0х55 (0хАА / 2), верно? Могу ли я тогда адресовать конкретно байт 0хАА, если в памяти каждому адресу соответствует 2 байта (в дебаге строка памяти имеет 16 байт, но здесь всего 8 адресов)? И как тогда работает в той же архитектуре х86? Там же, вроде, каждому адресу соответствует байт. А здесь каждому адресу два байта. Исправьте если не прав, пожалуйста
Комментарии: 6
Vga
так и есть да и ртл-сдр - это тоже телевизор, так-то) РС адресует по словам, да. А LPM - побайтно.
Sobol
.ORG тоже пословно?
Vga
умножение требуется если у тебя почему-то указатель в словах, а надо читать через лпм (но конкретно для таблицы переходов выгоднее хранить там команды JMP <нужный адрес> и прыгать на нужный джамп при помощи IJMP) посмотри в доке на ассемблер
Sobol
Вроде, да. Я прост уточняю понимание. А то бывает, что долго не уточняешь, думаешь, что понимаешь, а как только на практике прошляпился, приходит осознание, что ничерта ты не понял
Vga
помимо того что это образцовый вопрос для консультации с документацией - я банально не помню ответ
Dimon
В твоем примере получается максимальный номер (адрес) 0xFF то есть можно адресовать максимум 256 ячеек(байт) памяти, а так как в контроллере памяти больше, то на адрес каждой ячейки надо выделить по два байта, то есть 0x0000, 0x0001 поэтому на 8 ячеек(байт) памяти и уходит 16 байт на адреса (8 по 2 байта) Во вот тут подробно расписано и про то зачем на два умножать тоже https://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-flash-rom.html#more-82