User Tag List

Страница 8 из 13 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 121

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

  1. #71

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

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Они еще не видели LD A,SRL (ix+d); LD A,SET 7,(IX+d)
    Ну вот эти, действительно незадокументированы.
    А клоны команд по кодам ED XX - я не считаю недок. Это издержки неполной дешифрации, а в Z-180 280 по кодам "двойников" появились новые команды. И ED 00-3F задействовали.

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

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

  2. #72

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bsivko Посмотреть сообщение
    Сейчас нет фтп-доступа. Как только, обязательно посмотрю.
    http://freestuff.grok.co.uk/rom-dis/csrd-rtf.zip

    Цитата Сообщение от thims Посмотреть сообщение
    IX и IY - это фича Z80 для поддержки языков высокого уровня.
    То-то я смотрю, что мне IX понадобился когда я писал 42-символьный редактор, а оказывается, я не сообразил просто - если есть редактор, значит я уже пишу язык высокого уровня! Все гениальное просто.

  3. #73

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

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    http://freestuff.grok.co.uk/rom-dis/csrd-rtf.zip
    Предложенная процедура весьма специфична.
    Во-первых ПЗУ. Здесь применить мета-программирование не получится. Плюс афаик, совсем не приветствуется использование ячеек памяти ОЗУ для хранения каких-либо данных. Завуалированный переход от фон-неймана к гарварду..
    Во-вторых, загрузка и запись на ленту не требуют быстродействия. Например задержка LD-DELAY может, IIRC, варьиороваться ~ от 70 до 500 тактов. В связи с этим оптимизировать тут можно только память. А судя по объединению LOAD и VERIFY память очень даже экономили. Несмотря на то, что в конце 16к осталось много места.

    Для оптимизации в любом случае придется переписать процедуру.

  4. #74

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Однако это есть еще один пример подходящей для использования индексных регистров задачи, которая не есть язык высокого уровня и не использует шлобальное пространство имен. В LB-BYTES/SA-BYTES IX используется как альтернатива HL - указатель текущей ячейки памяти, а сам HL - как пара обычных 8-битных РОН. А вот в SAVE-ETC IX используется как полноценный индексный регистр в динамической памяти, и используется грамотно и красиво. Так что IX нужен, кто не умеет использовать - подтягивайтесь, учитесь. Меня он сильно выручает когда не хватает регистров и не хочется писать в стек.

  5. #75

    Регистрация
    18.01.2005
    Адрес
    Калининград, Россия
    Сообщений
    110
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    То-то я смотрю, что мне IX понадобился когда я писал 42-символьный редактор, а оказывается, я не сообразил просто - если есть редактор, значит я уже пишу язык высокого уровня!
    Ключевые слова выделены. Про понятие о том, что такое поддержка микропроцессорами языков высокого уровня - третий выделенный блок ключевых слов.

  6. #76

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Гм... Чего это я завелся-то... Никто никому же не запрещает считать, что по-настоящему IX и IY нужны только для поддержки ЯВУ, а использование их в других целях - изврат, непрофессионализм, непотребный расход памяти и/или тактов и признак лоха.

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

  8. #77

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Индексная адресация - мощное средство для поддержки объектно-ориентированного программирования. Да, объектно-ориентированно можно программировать и на ассемблере. Тут уже говорили о структурах - это частный случай объектов.

    Когда программа должна обслуживать одновременно много однотипных объектов - тогда и нужна индексная адресация. Например, она часто используется в музыкальных плеерах. Почти все AY-, биперные и цифровые плееры ее используют. В музыкальном плеере объект - это состояние канала. Поскольку каналы однотипные, то логично их обслуживать одной программой. А поскольку состояние каждого канала занимает несколько байт - то естественно использование индексной адресации. Подпрограммам обслуживания канала в одном из индексных регистров передается адрес в памяти, где хранится состояние этого канала. Подпрограммы обращаются к состоянию канала только посредством индексной адресации. При изменении логики работы плеера нужно менять меньше кода, чем если бы подпрограммы обслуживания каналов не использовали индексной адресации, а дублировались для каждого канала. Также достигается универсальность: одни и те же подпрограммы могут обслуживать любое количество каналов, ограниченное только объемом памяти под состояние.

    В играх тоже часто возникает необходимость обслуживать одновременно несколько однотипных объектов. Например, это могут быть монстры и другие независимые персонажи. Если состояние каждого объекта занимает больше, чем два-три байта - то и здесь естественным и выгодным в плане скорости является использование индексной адресации.

    Операционные системы работают с объектами. Если одновременно открыто несколько файлов - то состояние каждого файла (FCB) должно храниться где-то в памяти, а подпрограммы работы с этим состояниям естественно используют индексную адресацию. Кроме файлов, операционные системы работают со многими другими объектами, такими как потоки (Threads), объекты синхронизации (Event, Mutex, Semaphor) и др.

    Менеджеры окон работают с окнами - это тоже объекты. И даже когда я писал свой первый менеджер окон - то использовал в нем индексную адресацию, хоть я тогда и не знал точно, что это такое - "объектно-ориентированное программирование".

    Современная тенденция такова, что индексная адресация добавляется в те микроконтроллеры, где ее раньше не было. Например, новые 8-битные микроконтроллеры семейства PIC16 и даже "маленькие" PIC12 в последние годы получили новые команды индексной адресации, что существенно расширяет возможности этих контроллеров.

    В этом свете удалять индексную адресацию оттуда, где она уже была - верх безумия.

    Наличие двух индексных регистров тоже важно, так как позволяет работать одновременно с двумя объектами. Это важно в тех случаях, когда происходит взаимодействие объектов. Если бы был только один индексный регистр - то для реализации взаимодействия объектов его либо приходилось бы постоянно переключать с одного объекта на другой, либо копировать состояние одного из объектов. Обе названные альтернативы вызывают лишние затраты процессорного времени.

  9. #78

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Вопрос не о полезности индексной адресации, она безусловно полезна и без всякого ООП (которое я, кстати, очень не люблю, но это дело вкуса). Вопрос о корявости индексной адресации и ее тормознутости в Z80. Понятно, что добавлена она была в процессор, как надстройка, посему ни с точки зрения экономии места, ни с точки зрения скорости не дает особых преимуществ относительно ее реализации несколькими командами.
    В том же процессоре 6502, она заложена изначално и очень быстра и экономична.
    Вот.

  10. #79

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    без всякого ООП (которое я, кстати, очень не люблю, но это дело вкуса).
    Тут дело не во вкусе, а в необходимости. Вот представь себе: игра, в ней враги, их много, и у каждого свое состояние. Как писать код, обслуживающий врагов, без ООП (в явном или неявном виде)?

    Какие другие парадигмы программирования ты используешь? Вот, например, из этого списка:
    http://ru.wikipedia.org/wiki/%D0%9F%...BD%D0%B8%D1%8F
    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос о корявости индексной адресации и ее тормознутости в Z80. Понятно, что добавлена она была в процессор, как надстройка, посему ни с точки зрения экономии места, ни с точки зрения скорости не дает особых преимуществ относительно ее реализации несколькими командами.
    Позволь не согласиться. Если твоя программа работает с некоторой структурой данных, причем доступ к ее членам происходит не последовательно - то индексная адресация существенно быстрее, чем ее замена косвенной адресацией. Так, например, команда:

    LD A,(IX+n) занимает 3 байта и выполняется за 19 тактов, тогда как ее замена в общем случае (без ограничений на расположение структуры в памяти) требует двухбайтового сложения:

    LD BC,n ; 10 тактов
    ADD HL,BC ; 11 тактов
    LD A,(HL) ; 7 тактов

    Всего 5 байт и 28 тактов, места больше на 67%, по времени дольше на 47%, к тому же, требуются две хорошие регистровые пары (HL,BC), тогда как при использовании индексной адресации они свободны.

    Можно ли было сделать лучше? Да, но ненамного. Сохраняя общую структуру Z80, теоретически можно убрать только префикс (DD/FD) и связанные с ним 4 такта. Остальные 19-4=15 тактов неизбежно останутся: они нужны для выборки кода команды, смещения, 16-битного сложения и обращения в нужную ячейку памяти.
    Цитата Сообщение от Titus Посмотреть сообщение
    В том же процессоре 6502, она заложена изначално и очень быстра и экономична.
    Быстра и экономична? Это смотря с чем сравнивать. Учитывая, что у 6502 нет 16-битных регистров и 16-битного сложения, затраты на "обход" косвенной адресации очень значительны. А по машинным циклам, думаю, получается примерно то же самое. В самом деле, для выполнения команды 6502:

    LDA (0x36),Y

    требуется:
    1) считать код команды (1 байт)
    2) считать адрес косвенного обращения (1 байт)
    3) считать байт по адресу 0x36 (младший байт базового адреса обращения)
    4) считать байт по адресу 0x37 (старший байт базового адреса обращения)
    5) 16-битное сложение базового адреса обращения и индексного регистра (как правило, 2 машинных цикла)
    6) считать содержимое памяти по адресу обращения.

    Итого 7 машинных циклов - против 5 у Z80. Ну или ладно, зачтем Z80 6 циклов, потому что один из них длинный (5 тактов). Что-то не вижу большого выигрыша.

    ---------- Post added at 18:29 ---------- Previous post was at 18:21 ----------

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

    Если же вести речь о простой индексной адресации вида:
    LDA addr,X

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

    Я видел хитрые приемы построения программ для организации массива структур с использованием простой индексной адресации. Эти приемы накладывают на программу существенные ограничения. Универсальность кода страдает очень сильно. Впрочем, для игр Atari или NES этого было вполне достаточно. Я анализировал атариевский плеер музыки - именно там использовались эти приемы. Музыка, 4 канала - и известно, что больше не будет. Тогда, конечно, ограничения индексной адресации не играют большой роли.

  11. #80

    Регистрация
    27.03.2005
    Адрес
    CПб
    Сообщений
    711
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Итого 7 машинных циклов - против 5 у Z80. Ну или ладно, зачтем Z80 6 циклов, потому что один из них длинный (5 тактов). Что-то не вижу большого выигрыша.
    5 или 6 циклов в зависимости от того, есть ли переход через страницу при сложении с Y. И у 6502 1 цикл это 1 такт.

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

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

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

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

Ваши права

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