Массив записей, в котором нужно периодически выдирать конкретное поле, попробуйте без ix сделать.
Массив записей, в котором нужно периодически выдирать конкретное поле, попробуйте без ix сделать.
Вот развели флейм... Все же можно посчитать!
Возьмем за базу такую реализацию:
Суммарный размер таких вот конструкций будет 4*N (N- количество обращений), время на выполнение- 17*N.Код:ld hl,xx and/or/xor (hl)
Альтернатива:
Размер будет 7+3*(N-1), время 14+19*(N-1).Код:ld ix,xx and/or/xor (ix+idx)
Считаем, когда индексные регистры будут выгоднее по памяти:
4N > 7+3(N-1) => N > 4
Считаем, когда индексные регистры будут выгоднее по времени:
17N > 14+19(N-1) => N < 3
Отсюда простой вывод, что индексные регистры удобее для следующих ситуаций:
- нечастый доступ к полям структур в случайном порядке (при последовательном обращении проще inc/dec hl/l)
- доступ к структурам глобальных переменных (другие регистры обычно заняты)
Думаю, можно согласиться, что ld b,b и т.п. пустышки вроде nop бесполезны, но лишь как издержка архитектуры данного процессора. Однако практически все команды используются, а какие где чаще или реже - смотря какие задачи решаются.
p.s. Кстати, Эллочка обходилась всего 30 словами. Так что, не стоит демонстрировать свое неумение пользоваться всеми возможностями процессора, а лучше расширять свой "словарный запас"
Замечу, что с передачей структур в функцию конкурирует другой метод. А именно - копирование необходимой информации в ту область памяти, на которую настроена функция.
В общем случае я согласен с этим примером. Могу добавить ещё один. Если мы делаем игру для двух игроков, поведение каждого из которых одинаково, то можем создать две области памяти, в каждой из которых одинаково хранится информация каждого из игроков. И впоследствии, если хотим обработать игрока X, то устанавливаем в нужное значение индексный регистр и запускаем.
Для большинства же рабочих функций (которые влазят "на экран") если мы передаем более 4-х параметров (A, BC, DE, HL) с помощью структур (IX/IY или каким-то другим способом) является серьезным поводом задуматься о том, правильно ли мы разработали функцию.
Кроме того замечу, что IX/IY - это "аналоги" глобального пространства имен в языках высшего уровня. Другими словами, если мы задействовали где-то IX, и где-то у нас есть другая процедура, использующая IX, то это переменное использование нужно контролировать, и в случае проблем это стоит долгих часов отладки.
С этим согласен.
Только у меня речь идет о компактности и быстроте реализации, а не о понятных программах, которые занимают столько места и времени, сколько им позволяет пользователь.
Последний раз редактировалось bsivko; 25.06.2012 в 11:27.
А как быть если это необходимо? Например тот же дисковый ввод вывод. Int13 на ПЦ, расширенные функции, номер сектора (32 бит или более) передают уже в дескрипторе, там же адрес DTA, кол-во секторов и код операции. Немалое кол-во операндов? Но ведь или мы их расположим в регистрах или в дескрипторе, иначе никак. Ну либо разложим в ряд вызовов, который "рассуют" параметры по нужным местам, но тогда проигрываем в скорости.
Скрытый текст
Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
ZX Evolution Rev B.
Color 48 + Beta Disk Interface +FDD+YM2149F
Орель-08БК
Pentagon-48 (недоссобранный кем-то)
Pentagon-128 (полуубитый)
Кворум-128 (в ремонте)
Магик-05 (в ремонте)
Robotron 1715
Корвет ПК8020 и ПК8010
Amstrad CPC 464
Amstrad CPC 6128[свернуть]
судя по всему, bsivko никогда не работал со структурами... о чем тут говорить?
There are many ways to skin a cat (;
Мастерство инженера тем и определяется, чтобы видеть большое количество способов и использовать тот, который наиболее подходящий к ситуации.
Так, например тут не назван случай, когда проект сдавать надо прямо сейчас, и времени на оптимизацию без индексов нет.
---------- Post added at 11:17 ---------- Previous post was at 11:16 ----------
Судя по всему, вы переходите на личности. Высказывайтесь по существу и уважайте мнение и опыт других людей.
а я высказался вообще-то, по существу. со структурами вы не знакомы, поэтому у вас возникают вопросы, зачем нужен индексный регистр. когда у вас будет куча структур байт по 100 и 30 разных подпрограмм использующих/меняющих отдельные поля - тогда будет видно, дороже будут IX/IY или дешевле. вам уже привели примеры с FCB и прочим, вас это не устраивает. о чем дальше-то дискуссию вести? это вы здесь не уважаете опыт и мнение других людей, я лишь обобщил это.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)