Важная информация

User Tag List

Страница 6 из 13 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 121

Тема: Неиспользуемые и редкоиспользуемые команды

  1. #51
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Массив записей, в котором нужно периодически выдирать конкретное поле, попробуйте без ix сделать.

  2. #52
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,259
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот развели флейм... Все же можно посчитать!
    Возьмем за базу такую реализацию:
    Код:
    ld hl,xx
    and/or/xor (hl)
    Суммарный размер таких вот конструкций будет 4*N (N- количество обращений), время на выполнение- 17*N.

    Альтернатива:
    Код:
    ld ix,xx
    and/or/xor (ix+idx)
    Размер будет 7+3*(N-1), время 14+19*(N-1).

    Считаем, когда индексные регистры будут выгоднее по памяти:
    4N > 7+3(N-1) => N > 4
    Считаем, когда индексные регистры будут выгоднее по времени:
    17N > 14+19(N-1) => N < 3

    Отсюда простой вывод, что индексные регистры удобее для следующих ситуаций:
    - нечастый доступ к полям структур в случайном порядке (при последовательном обращении проще inc/dec hl/l)
    - доступ к структурам глобальных переменных (другие регистры обычно заняты)

  3. #53
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    ld hl,xx
    and/or/xor (hl)
    Проблема в том, что этот xx в массиве записей нужно сначала получить расчетом в зависимости от индекса в массиве и смещения в записи.

  4. #54
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,259
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Проблема в том, что этот xx в массиве записей нужно сначала получить расчетом в зависимости от индекса в массиве и смещения в записи.
    ld bc,xx*sizeofRecord
    add ix,bc

  5. #55
    Member
    Регистрация
    16.02.2011
    Адрес
    г. Харьков
    Сообщений
    99
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Думаю, можно согласиться, что ld b,b и т.п. пустышки вроде nop бесполезны, но лишь как издержка архитектуры данного процессора. Однако практически все команды используются, а какие где чаще или реже - смотря какие задачи решаются.

    p.s. Кстати, Эллочка обходилась всего 30 словами. Так что, не стоит демонстрировать свое неумение пользоваться всеми возможностями процессора, а лучше расширять свой "словарный запас"

  6. #56
    Member
    Регистрация
    25.04.2009
    Адрес
    Gomel, Belarus
    Сообщений
    32
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    Пример безусловно, когда ix накладно использовать. Некорректный. IX и IY используют, например, когда у нас есть некие наборы данных, которые мы упорядочиваем по смещениям. Достаточно установить на начало область индексный регистр - как мы получаем доступ к структуре. И можем моментально менять адреса разных структур. Иначе, придется заниматься вычислениями и сохрананениями восстановлениями. Индексы ведь не используют, когда надо обратиться к одной переменной. Смысла нет, так что пример некорректный.
    Замечу, что с передачей структур в функцию конкурирует другой метод. А именно - копирование необходимой информации в ту область памяти, на которую настроена функция.

    Цитата Сообщение от Vadim Посмотреть сообщение
    Например - файловый коммандер. У нас 2 панели. Так? Нужно хранить параметры для левой и правой панели, по сути одни и те же. Можно завести переменные, и работать с ними. 2 набора процедур или вычислять адреса переменных, а можно на переменные указывать индексным регистром и при вызове процедуры ставить в него нужное значение.
    В общем случае я согласен с этим примером. Могу добавить ещё один. Если мы делаем игру для двух игроков, поведение каждого из которых одинаково, то можем создать две области памяти, в каждой из которых одинаково хранится информация каждого из игроков. И впоследствии, если хотим обработать игрока X, то устанавливаем в нужное значение индексный регистр и запускаем.

    Для большинства же рабочих функций (которые влазят "на экран") если мы передаем более 4-х параметров (A, BC, DE, HL) с помощью структур (IX/IY или каким-то другим способом) является серьезным поводом задуматься о том, правильно ли мы разработали функцию.

    Кроме того замечу, что IX/IY - это "аналоги" глобального пространства имен в языках высшего уровня. Другими словами, если мы задействовали где-то IX, и где-то у нас есть другая процедура, использующая IX, то это переменное использование нужно контролировать, и в случае проблем это стоит долгих часов отладки.

    Цитата Сообщение от Vadim Посмотреть сообщение
    Ведь есть много случаев, когда компактность и понятность кода важнее скорости. Если мы не демках говорим. Пусть будет на 10-30 тактов дольше, но без сумасшедших сохранений, перемещений и восстановлений. Т.е. не надо путать время-критичный код от логики.
    С этим согласен.
    Только у меня речь идет о компактности и быстроте реализации, а не о понятных программах, которые занимают столько места и времени, сколько им позволяет пользователь.
    Последний раз редактировалось bsivko; 25.06.2012 в 11:27.

  7. #57
    Guru Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    Для большинства же рабочих функций (которые влазят "на экран") если мы передаем более 4-х параметров (A, BC, DE, HL) с помощью структур (IX/IY или каким-то другим способом) является серьезным поводом задуматься о том, правильно ли мы разработали функцию.
    А как быть если это необходимо? Например тот же дисковый ввод вывод. 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
    [свернуть]

  8. #58
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    судя по всему, bsivko никогда не работал со структурами... о чем тут говорить?

  9. #59
    Member
    Регистрация
    25.04.2009
    Адрес
    Gomel, Belarus
    Сообщений
    32
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    А как быть если это необходимо? Например тот же дисковый ввод вывод. Int13 на ПЦ, расширенные функции, номер сектора (32 бит или более) передают уже в дескрипторе, там же адрес DTA, кол-во секторов и код операции. Немалое кол-во операндов? Но ведь или мы их расположим в регистрах или в дескрипторе, иначе никак. Ну либо разложим в ряд вызовов, который "рассуют" параметры по нужным местам, но тогда проигрываем в скорости.
    There are many ways to skin a cat (;

    Мастерство инженера тем и определяется, чтобы видеть большое количество способов и использовать тот, который наиболее подходящий к ситуации.

    Так, например тут не назван случай, когда проект сдавать надо прямо сейчас, и времени на оптимизацию без индексов нет.

    ---------- Post added at 11:17 ---------- Previous post was at 11:16 ----------

    Цитата Сообщение от psb Посмотреть сообщение
    судя по всему, bsivko никогда не работал со структурами... о чем тут говорить?
    Судя по всему, вы переходите на личности. Высказывайтесь по существу и уважайте мнение и опыт других людей.

  10. #60
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    Высказывайтесь по существу
    а я высказался вообще-то, по существу. со структурами вы не знакомы, поэтому у вас возникают вопросы, зачем нужен индексный регистр. когда у вас будет куча структур байт по 100 и 30 разных подпрограмм использующих/меняющих отдельные поля - тогда будет видно, дороже будут IX/IY или дешевле. вам уже привели примеры с FCB и прочим, вас это не устраивает. о чем дальше-то дискуссию вести? это вы здесь не уважаете опыт и мнение других людей, я лишь обобщил это.

Страница 6 из 13 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Основные команды Atari 65
    от Andrey_Ak в разделе Atari
    Ответов: 71
    Последнее: 06.03.2017, 18:27
  2. Недокументированные команды
    от MadCat! в разделе Программирование
    Ответов: 46
    Последнее: 02.02.2011, 13:49
  3. Команды Z80
    от e2e4 в разделе Для начинающих
    Ответов: 11
    Последнее: 02.07.2010, 21:13
  4. Команды Z80
    от Almaz в разделе Программирование
    Ответов: 1
    Последнее: 28.10.2007, 12:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •