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

User Tag List

Показано с 1 по 7 из 7

Тема: Быстро переместить 384b

  1. #1
    Activist
    Регистрация
    17.01.2005
    Адрес
    Belarus, Minsk
    Сообщений
    402
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Question Быстро переместить 384b

    Подскажите быструю процедуру "смещения вниз" куска памяти в 384b на несколько байт(от 2 до 40), например из #8000 в #8010. Ничего кроме след. кода на ум не пришло:
    Код:
    	;HL - ист., DE - приёмник
    	LD BC,$19FF
    .ldd:	DB $ED,$A8,$ED,$A8,$ED,$A8,$ED,$A8 ;LDD
    	DB $ED,$A8,$ED,$A8,$ED,$A8,$ED,$A8 ;LDD
    	DB $ED,$A8,$ED,$A8,$ED,$A8,$ED,$A8 ;LDD
    	DB $ED,$A8,$ED,$A8,$ED,$A8,$ED,$A8 ;LDD
    	DJNZ .ldd
    Спасибо.
    Последний раз редактировалось Aprisobal; 20.01.2005 в 15:06. Причина: ыц2
    ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
    ATM-Turbo 512 v4.50, Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO

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

  3. #2
    Member Аватар для MadCat!
    Регистрация
    17.01.2005
    Адрес
    Россия, Белгород
    Сообщений
    65
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aprisobal
    Подскажите быструю процедуру "смещения вниз" куска памяти в 384b на несколько байт(от 2 до 40), например из #8000 в #8010. Ничего кроме след. кода на ум не пришло:
    ...
    Спасибо.
    быстро - PUSH/POP, но там свои ограничения
    МультиАватар есть здесь

  4. #3
    Member Аватар для Corpsegrinder
    Регистрация
    19.01.2005
    Адрес
    Chelyabinsk
    Сообщений
    110
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Всё зависит от того для чего тебе нужно перемещать.

    вообще можно через стэк типа вот этого:

    ld sp,откуда+384
    pop hl
    ld (куда+384-2),hl
    pop hl
    ld (куда+384-4),hl
    ...
    192 раза

    или через LDD
    ld hl,otkuda+384
    ld de,kuda+384
    dup 384
    ldd
    edup

    тогда то, что ты перетаскиваешь не затрётся, порсто, если втупую делать последовательно, тогда оно будет копировать в те места, которые ему ещё предстоит скопировать, но он ещё не скопировал

  5. #4
    Member Аватар для Looker
    Регистрация
    16.01.2005
    Адрес
    Severodonetsk, Ukraine
    Сообщений
    92
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aprisobal
    Подскажите быструю процедуру "смещения вниз" куска памяти в 384b на несколько байт(от 2 до 40), например из #8000 в #8010. Ничего кроме след. кода на ум не пришло:
    Код:
    	;HL - ист., DE - приёмник
    	LD BC,$19FF
    
    	DJNZ .ldd
    Только вроде bc,#18ff.
    С регистром С действительно лучше перестраховаться.
    Вообще, если тебе нужен не полностью развернутый код и полная относительность, то лучше ничего не придумаешь.

    Другое дело, если адрес откуда-куда меняется не очень часто.
    Тогда можно поизвращаться со стеком.
    Можно, как предложил Corpsegrinder, можно еще извратней...
    Если такой вариант подойдет, можем поизвращаться...

  6. #5
    Activist
    Регистрация
    17.01.2005
    Адрес
    Belarus, Minsk
    Сообщений
    402
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Arrow

    Спасибо за все ответы.
    Цитата Сообщение от Looker
    Только вроде bc,#18ff.
    Надо $19FF, т.к. переносится 384 байта => при переполнении регистра C регистр B уменьшится на единицу => в регистре B станет искомое число повторов цикла.
    Цитата Сообщение от Looker
    Другое дело, если адрес откуда-куда меняется не очень часто.
    Да, источник всегда один и тот же. Забыл в первом посте написать.

    В аттач засунул исходник, в котором переброска реализована через стек. Надеюсь кому-нибудь пригодится.
    Получилось так: 6144 тактов у 384 команд LDD против 5398 тактов при переброске через стек. Не слишком много, но иногда важен каждый такт.
    Ещё: в процедурах переброски не использовал IX,IY и AF' - теоретически получается медленнее, хоть и больше данных забираем за раз.
    Вложения Вложения
    • Тип файла: zip stack.zip (704 байт, Просмотров: 331)
    Последний раз редактировалось Aprisobal; 05.02.2005 в 02:05. Причина: так
    ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
    ATM-Turbo 512 v4.50, Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO

  7. #6
    Member Аватар для Looker
    Регистрация
    16.01.2005
    Адрес
    Severodonetsk, Ukraine
    Сообщений
    92
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мдя, именно это я имел ввиду.

    Народ, если кому еще чего надо - спрашивайте, интересно будет подумать.

  8. #7
    Veteran Аватар для jtn
    Регистрация
    15.01.2005
    Адрес
    Kievska Rus
    Сообщений
    1,149
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    надо пригласить McBuster'a. он любил конкурсы кодерские устраивать.

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

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

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

Ваши права

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