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

User Tag List

Страница 5 из 13 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 121

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

  1. #41

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

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    Если нужна индексная адресация, то они весьма удобны. Через HL сделать конечно можно (имитировать индексную адресацию), но нужно будет потратить куда больше тактов, чем использовать IX or IY, например, заменяем команду or (ix+10h)
    В том то и дело, что в реальных программах индексная адресация нужна крайне редко, и все эти редкие случаи успешно решаются основными регистрами.

    Конечно можно придумать кучу примеров в вакууме, работающих только в вакууме. В реальности же в 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 представляет зачастую только академический интерес. Может быть полезен для более наглядного кода. Но для быстродействующего и занимающего мало памяти кода его применение крайне редкое.
    Последний раз редактировалось bsivko; 25.06.2012 в 08:28.

  2. #42

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что насчёт реэнтерабельности и переменных на стеке?
    Куда тут без IX/IY?

  3. #43

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

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Куда тут без IX/IY?
    Не говорю о том, что IX и IY нельзя использовать. Но в абсолютном большинстве случаев их использовать накладно по ресурсам.

    Пример успешного использования IX:

    Код:
    ; внешний цикл. 100 раз. 
    
    ; внутренний цикл. 100 раз. 
    ; что-то делается со всеми регистрами общего назначения
    ; 100 раз.
    ; конец внутреннего цикла
    ; результат - в BC. Его нужно суммировать где-то.
    ; 
    
    add ix, bc
    ; конец внешнего цикла
    Т.е. иметь регистр надо ввиду, но его использование срабатывает редко.

    Такая же ситуация с командами работы с битами (set, bit, res). Их использование крайне ограничено по тем же причинам. Можно сколько угодно говорить что например

    set 4, d

    можно заменить только на какую-нибудь душераздирающую конструкцию вида

    Код:
    push af
    ld a,d
    or #10
    ld d,a
    pop af
    но на практике зачастую серия команд программы может быть преобразована так, что регистр пройдет через аккумулятор и в нужное время будет установлен нужный бит.

    Но например если работаем с (hl), то такая конструкция

    set 7,(hl)

    выгодней, нежели

    Код:
    ld a,(hl)
    or #80
    ld (hl),a

  4. #44

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    аналогично, если адрес используется, и используется смещение

    ld ix,NN
    or (ix+0)
    or (ix+#10)

    то

    ld hl,NN
    or (hl)
    ld hl,NN+#10
    or (hl)
    несколько не соглашусь. тут либо пример плохой либо одно из двух. выполнение ld ix,nn = 14тактов. ld hl,nn 10тактов. + каманда or жрёт 10 тактов (если я верно понял содержание таблицы). т.е. получается в вашем примере 30тактов на выполнение простого куска. тут в данном случае ld ix,nn or (ix+n) будет безусловно быстрее. и воо многих других случаях. когда нужно пересохранять основные регистры и потом восстанавливать, индексные спасают.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  5. #45

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

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    несколько не соглашусь. тут либо пример плохой либо одно из двух. выполнение ld ix,nn = 14тактов. ld hl,nn 10тактов. + каманда or жрёт 10 тактов (если я верно понял содержание таблицы). т.е. получается в вашем примере 30тактов на выполнение простого куска. тут в данном случае ld ix,nn or (ix+n) будет безусловно быстрее. и воо многих других случаях. когда нужно пересохранять основные регистры и потом восстанавливать, индексные спасают.
    в моем справочнике:

    or (hl) - 7 тактов
    ld hl,NN - 10
    or (ix+s) - 19
    ld ix, NN - 14

    итого: 19+19+14=42 vs 10+7+10+7=34
    и память 11 vs 8

  6. #46

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

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    В том то и дело, что в реальных программах индексная адресация нужна крайне редко
    В каких реальных программах? Вы знакомы со всеми программами? Я вот успешно применяю и IX и IY. И мне удобно. Когда мы обрабатываем, например описатель FCB файла или иной блок с инфой о файле. На начало блока ставим индексный регистр и вуаля! Без них пришлось бы весьма туго. И ещё много много примеров можно сказать, где они нужны.

    ---------- Post added at 11:18 ---------- Previous post was at 11:15 ----------

    Цитата Сообщение от bsivko Посмотреть сообщение
    Но в абсолютном большинстве случаев их использовать накладно по ресурсам.
    Смотря что считать абсолютным большинством. Если как замену HL - то да. Но иногда и в этом плане он полезен, когда HL занят и сохранять/восстанавливать накладно. Регистры индексные! Они нужны для индексной адресации. Если вы не в курсе зачем её применяют - не повод этим гордиться. Наоборот, есть повод подучиться, узнать. Что и как.

    Скрытый текст

    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
    [свернуть]

  7. #46
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #47

    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    всё вопрос отпал...проверил, вариант с hl быстрее. каманда or (ix+n) жрёт 19 тактов...извиняюсь!
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #48

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

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    Если хочется дергать значения многих переменных, то обращение напрямую через
    Да? А если у нас не один набор переменных, а несколько? Что прикажете делать?

    Скрытый текст

    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
    [свернуть]

  10. #49

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

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    Когда мы обрабатываем, например описатель FCB файла или иной блок с инфой о файле. На начало блока ставим индексный регистр и вуаля! Без них пришлось бы весьма туго. И ещё много много примеров можно сказать, где они нужны.
    Где на это можно посмотреть?

  11. #50

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

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    аналогично, если адрес используется, и используется смещение

    ld ix,NN
    or (ix+0)
    or (ix+#10)

    то

    ld hl,NN
    or (hl)
    ld hl,NN+#10
    or (hl)
    Пример безусловно, когда ix накладно использовать. Некорректный. IX и IY используют, например, когда у нас есть некие наборы данных, которые мы упорядочиваем по смещениям. Достаточно установить на начало область индексный регистр - как мы получаем доступ к структуре. И можем моментально менять адреса разных структур. Иначе, придется заниматься вычислениями и сохрананениями восстановлениями. Индексы ведь не используют, когда надо обратиться к одной переменной. Смысла нет, так что пример некорректный.

    ---------- Post added at 11:28 ---------- Previous post was at 11:25 ----------

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

    ---------- Post added at 11:30 ---------- Previous post was at 11:28 ----------

    Ведь есть много случаев, когда компактность и понятность кода важнее скорости. Если мы не демках говорим. Пусть будет на 10-30 тактов дольше, но без сумасшедших сохранений, перемещений и восстановлений. Т.е. не надо путать время-критичный код от логики.

    Скрытый текст

    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
    [свернуть]

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

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

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

Эту тему просматривают: 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

Ваши права

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