В том то и дело, что в реальных программах индексная адресация нужна крайне редко, и все эти редкие случаи успешно решаются основными регистрами.
Конечно можно придумать кучу примеров в вакууме, работающих только в вакууме. В реальности же в IX нужно сначала что-то записать, потом с ним работать. Если программа маленькая, то обычные регистры свободны, и делается все быстро без IX. Если большая, то IX используется часто, и тоже подлежит замене.
Та же адресация (ix+10h) не используется просто так. Никто не пишет
ld ix,NN
or (ix+10h)
все пишут
ld hl,NN+#10
or (hl)
аналогично, если адрес используется, и используется смещение
ld ix,NN
or (ix+0)
or (ix+#10)
то
ld hl,NN
or (hl)
ld hl,NN+#10
or (hl)
Если смещение используется несколько раз, то это говорит о том, что оно в цикле. Такое использование решается выводом обращения через другой регистр с его сохранением (из-за цикла сохранение становится в разы дешевле).
Если хочется дергать значения многих переменных, то обращение напрямую через
ld a,(NN)
быстрее и эффективнее.
и т.д.
IX представляет зачастую только академический интерес. Может быть полезен для более наглядного кода. Но для быстродействующего и занимающего мало памяти кода его применение крайне редкое.

