Индексная адресация - мощное средство для поддержки объектно-ориентированного программирования. Да, объектно-ориентированно можно программировать и на ассемблере. Тут уже говорили о структурах - это частный случай объектов.
Когда программа должна обслуживать одновременно много однотипных объектов - тогда и нужна индексная адресация. Например, она часто используется в музыкальных плеерах. Почти все AY-, биперные и цифровые плееры ее используют. В музыкальном плеере объект - это состояние канала. Поскольку каналы однотипные, то логично их обслуживать одной программой. А поскольку состояние каждого канала занимает несколько байт - то естественно использование индексной адресации. Подпрограммам обслуживания канала в одном из индексных регистров передается адрес в памяти, где хранится состояние этого канала. Подпрограммы обращаются к состоянию канала только посредством индексной адресации. При изменении логики работы плеера нужно менять меньше кода, чем если бы подпрограммы обслуживания каналов не использовали индексной адресации, а дублировались для каждого канала. Также достигается универсальность: одни и те же подпрограммы могут обслуживать любое количество каналов, ограниченное только объемом памяти под состояние.
В играх тоже часто возникает необходимость обслуживать одновременно несколько однотипных объектов. Например, это могут быть монстры и другие независимые персонажи. Если состояние каждого объекта занимает больше, чем два-три байта - то и здесь естественным и выгодным в плане скорости является использование индексной адресации.
Операционные системы работают с объектами. Если одновременно открыто несколько файлов - то состояние каждого файла (FCB) должно храниться где-то в памяти, а подпрограммы работы с этим состояниям естественно используют индексную адресацию. Кроме файлов, операционные системы работают со многими другими объектами, такими как потоки (Threads), объекты синхронизации (Event, Mutex, Semaphor) и др.
Менеджеры окон работают с окнами - это тоже объекты. И даже когда я писал свой первый менеджер окон - то использовал в нем индексную адресацию, хоть я тогда и не знал точно, что это такое - "объектно-ориентированное программирование".
Современная тенденция такова, что индексная адресация добавляется в те микроконтроллеры, где ее раньше не было. Например, новые 8-битные микроконтроллеры семейства PIC16 и даже "маленькие" PIC12 в последние годы получили новые команды индексной адресации, что существенно расширяет возможности этих контроллеров.
В этом свете удалять индексную адресацию оттуда, где она уже была - верх безумия.
Наличие двух индексных регистров тоже важно, так как позволяет работать одновременно с двумя объектами. Это важно в тех случаях, когда происходит взаимодействие объектов. Если бы был только один индексный регистр - то для реализации взаимодействия объектов его либо приходилось бы постоянно переключать с одного объекта на другой, либо копировать состояние одного из объектов. Обе названные альтернативы вызывают лишние затраты процессорного времени.




Ответить с цитированием