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

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 34

Тема: Оптимизация в HL

  1. #1
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Восстановление буфера прямой

    Нужна скоростная операция:

    В HL содержится число (0..447) кратное 3.

    Требуется быстро разделить HL на 3 и результат умножить на 4.

    HL=(HL/3)*4
    Последний раз редактировалось drbars; 17.08.2013 в 00:47.

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    hl=hl*155h
    так?
    С уважением,
    Jerri / Red Triangle.

  4. #3
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    hl=hl*155h
    так?
    ну вот пример:

    HL = #12F

    HL/3 = #065

    HL*4=#194

  5. #4
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ага
    12f*155=193 9b
    447/3*4=254h

    447*155h=253 6b
    С уважением,
    Jerri / Red Triangle.

  6. #5
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ситуация какая... буфер для восстановление байта на экране занимает 3 байта буфера на байт экрана (word:adr, byte:data)

    А процедура восстановления жрёт 4 байта на восстановление байта экрана... Нужно расчитать точку входа в процедуру по размеру буфера...

    В HL у нас размер буфера.

  7. #6
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    округлять наверное
    считает то правильно
    С уважением,
    Jerri / Red Triangle.

  8. #7
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Подумаю ещё, может чего оптимизирую.

    Пример на асме есть? мне циклы нельзя городить в процедуре
    Последний раз редактировалось drbars; 16.08.2013 в 23:41.

  9. #8
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а может будет достаточно ld l,h:ld h,a:inc hl
    С уважением,
    Jerri / Red Triangle.

  10. #9
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    а может будет достаточно ld l,h:ld h,a:inc hl
    Не совсем понял, всё таки...

    ---------- Post added at 03:24 ---------- Previous post was at 02:45 ----------

    Может задачу иначе поставить?

    Вот процедура восстановления циклом:
    Поскольку буфер заполняется командой PUSH, то конец буфера фикированный, а начало в HL.

    C = конец буфера.

    Тормозно, но работает. 4 байта не могу в буфере хранить, нет места.

    Код:
    	LD SP,HL	; HL = начало текущего буфера
    RES_LN	POP DE
    	DEC SP
    	POP AF
    	LD (DE),A
    	LD HL,#0000
    	ADD HL,SP
    	LD A,H
    	CP C
    	JP NZ,RES_LN
    Стеком выгодно делать, если цикл развернуть... Иначе видимо нет.
    А чтобы развернуть, нужно расчитать точку входа

    Код:
    RES_LN	LD E,(HL)
    	INC HL
    	LD D,(HL)
    	INC HL
    	LD A,(HL)
    	INC HL
    	LD (DE),A
    	LD A,H
    	CP C
    	JP NZ,RES_LN
    Последний раз редактировалось drbars; 17.08.2013 в 00:33.

  11. #10
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    может, посмотреть в сторону последовательности pop de:ldi
    байты фона отдельно, адреса отдельно
    ?

Страница 1 из 4 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Оптимизация Амиги 1230/50 под мр3
    от Alex2 в разделе Amiga
    Ответов: 52
    Последнее: 10.01.2017, 01:23
  2. оптимизация форума
    от SMT в разделе Форум
    Ответов: 33
    Последнее: 04.04.2005, 13:18

Ваши права

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