User Tag List

Показано с 1 по 10 из 18

Тема: Таблица переходов (computed goto)

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    если количество переходов не больше 255/3
    таблица должна быть выровнена на 256 байт

    Код:
      ld h, high table
      ld l,a
      rl a
      add a,l
      ld l, a
      jp (hl)
    table:
      jmp subr1
      jmp subr2
      ...
    такты не считал - но вроде тоже можно юзать

    - - - Добавлено - - -

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Без использования HL задачу можно решить, например, так:
    Код:
    ADD A,A ;4
    LD (JT+1),A ;13
    JT: JR JUMP_TBL ;12
    JUMP_TBL:
    JR ROUTINE1 ;12
    JR ROUTINE2 ;12
    JR ROUTINE3 ;12
    ....
    Исполняется за 41 такт. Достоинства: не используется HL. Недостатки: нельзя размещать в ПЗУ; дистанция перехода ограничена.
    ну или так - если оптимизация по скорости и памятью можно жертвовать:
    Код:
      add a,a
      add a,a
      ld (jt+1),a
    jt:
      jr jump_tbl
    jump_tbl:
      jmp subr1
      nop
      jmp subr2
      nop
      ...
    jmp кстати выполняется за 10 тактов а не за 12 как jr
    Последний раз редактировалось shurik-ua; 10.01.2019 в 04:12.

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    таблица должна быть выровнена на 256 байт
    Спасибо, хорошие варианты. В первом из них ошибка - исправляю и считаю такты по твоим вариантам ниже:
    Код:
      ld h, high table ;7
      ld l,a ;4
      add a,a ;4
      add a,l ;4
      ld l, a ;4
      jp (hl) ;4
    table:
      jmp subr1 ;10
      jmp subr2
      ...
    Тут получается переход через 37 тактов; дистанция перехода не ограничена. По достоинствам/недостаткам сравнимо с моим вариантом, который 41 такт, но быстрее. Спасибо.

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    ну или так - если оптимизация по скорости и памятью можно жертвовать
    Когда требуется размещать таблицу с выравниванием на 256 байт - то экономия памяти в 1 байт на подпрограмму - мелочь. Как же я сам не догадался, что можно команды jp размещать через nop! Это ведь существенно ускоряет вычисление адреса для jp (hl).
    Код:
      add a,a ;4
      add a,a ;4
      ld (jt+1),a ;13
    jt:
      jr jump_tbl ;12
    jump_tbl:
      jp subr1 ;10
      nop
      jp subr2
      nop
      ...
    Тоже хорошая идея. Исполняется за 43 такта - сравнимо с моим вариантом ld (jt+1),a и jr/jr, который исполняется за 41 такт. Но в твоём варианте зато нет ограничения на дистанцию перехода.
    Цитата Сообщение от shurik-ua Посмотреть сообщение
    jmp кстати выполняется за 10 тактов а не за 12 как jr
    Это да, но для jp надо затратить лишние 4 такта на дополнительную команду add a,a. Так что суммарно получается проигрыш в 2 такта. Но годится, если нужно снять ограничения на дистанцию перехода.

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

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

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

Похожие темы

  1. частотная таблица
    от goodboy в разделе Музыка
    Ответов: 36
    Последнее: 26.07.2017, 13:41
  2. Программы переходов экрана
    от AAA в разделе Софт
    Ответов: 2
    Последнее: 19.03.2013, 18:02
  3. Настроечная таблица
    от Addison в разделе Софт
    Ответов: 11
    Последнее: 19.07.2009, 20:15
  4. Кворум + 5V + TV = Шахматная Таблица
    от JeRrS в разделе Кворум
    Ответов: 1
    Последнее: 07.10.2006, 14:19
  5. Имитация GOTO из машкода
    от Jukov в разделе Программирование
    Ответов: 7
    Последнее: 01.10.2006, 15:12

Ваши права

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