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

User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 30 из 30

Тема: 32 бит деление

  1. #21
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По аналогии со второй версией без восстановления остатка, сделал подобную версию и с восстановлением

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

    Код:
    ; BC = HLBC/DE, HL = HLBC%DE
    ; Restoring division
    DIV32:
    		ld a,b
    		call DIV32_8
    		push af
    		ld a,c
    		call DIV32_8
    		pop bc
    		ld c,a
    		ret
    		
    ; A = HLA/DE, HL = HLA%DE
    DIV32_8:
    		ld b,8
    DIV321:
    		add a,a
    		adc hl,hl
    		jr c, DIV322
    		sbc hl,de
    		jr nc, DIV323
    		add hl,de
    		djnz DIV321
    		ret
    DIV322:
    		ccf
    		sbc hl,de
    DIV323:
    		inc a
    		djnz DIV321
    		ret
    [свернуть]

    +7 байт, но она быстрее и 2в1 - тут не только 32/16=16, но и 24/8=8 (кстати без восстановления остатка тоже во второй версии эта фишка есть, забыл там написать).
    В итоге у каждого метода (restoring и non-restoring) по два варианта: компактный и побыстрее. Если сравнивать методы, то очевидно restoring компактнее, non-restoring быстрее. Можно еще немного ускорить за счет некоторого увеличения размера, но не сильно, тут уже каждый сам может при желании доработать.
    Последний раз редактировалось ivagor; 21.02.2021 в 06:12. Причина: Поправил сопроводительный текст, в комментариях к программе сразу было правильно

  2. Этот пользователь поблагодарил ivagor за это полезное сообщение:

    Evgeny Muchkin (01.03.2021)

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

    По умолчанию

    снова возник вопрос:
    вот эти процедуры деления, там написано в комментариях: DE = HLDE/BC, HL = HLDE%BC
    я не сильно спец в таких вещах, но модуль числа то там зачем? или это остаток? или как?
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  4. #23
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А разве остаток от деления и "модуль числа" не одно и то-же?
    (на самом деле, модуль числа это совсем другое, но я понял, что ты имел ввиду деление по модулю)
    Последний раз редактировалось b2m; 04.03.2021 в 14:27.

  5. #24
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Избавиться в приведенных процедурах деления от вычисления остатка и сохранить вычисление правильного частного не получится. Хотя если быть очень занудным, то можно так: полностью развернуть и тогда можно будет убрать одну операцию ближе к завершению деления. Экономия мизерная, но если остаток совсем не нужен, размер не важен, зато важен каждый такт, то почему бы и нет (сам так делал). Можно наоборот - вычислять только остаток без частного, вот тут процедуру можно упростить, ускорить и сократить.

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

    По умолчанию

    хотелось бы вернуться к банным борашкам. Возникла потребность в делении 32:32, наверное даже с остатком. Можете помочь, товарищи знатоки?!
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  7. #26
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    Возникла потребность в делении 32:32, наверное даже с остатком
    С уклоном в скорость или компактность?

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

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    С уклоном в скорость или компактность?
    ну скорость бы хотелось.... наверное.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #28
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сравнительно быстрый вариант, но без фанатизма

    Код:
    ;BCBC'=BCBC'/DEDE'
    ;HLHL'=BCBC'%DEDE'
    DIV323232:
    		ld hl,0
    		exx
    		ld hl,0
    		ld a,b
    		exx
    		push bc
    		call DIV328
    		exx
    		ld b,a
    		ld a,c
    		exx
    		call DIV328
    		exx
    		ld c,a
    		exx
    		pop bc
    		ld a,b
    		call DIV328
    		push af
    		ld a,c
    		call DIV328
    		pop bc
    		ld c,a
    		ret
    DIV328:
    		ld b,8
    DIV328loop:
    		add a,a
    		adc hl,hl
    		exx
    		adc hl,hl
    		exx
    		sbc hl,de
    		exx
    		sbc hl,de
    		exx
    		jr nc,DIV328_
    		add hl,de
    		exx
    		adc hl,de
    		exx
    		djnz DIV328loop
    		ret
    DIV328_:
    		inc a
    		djnz DIV328loop
    		ret
    [свернуть]

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

    По умолчанию

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

  11. #30
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,843
    Спасибо Благодарностей отдано 
    654
    Спасибо Благодарностей получено 
    1,818
    Поблагодарили
    1,044 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    если заставлять её делить 32бита просто на 2 (или подобные значения), то выдаёт мусор.
    Если заставлять делить 32 бита на 2 или 3 или на много что еще с получением результата не помещающегося в 16 бит, то нужно использовать другую процедуру. А в той процедуре написано: BC = HLBC/DE, HL = HLBC%DE и она работоспособна в данных пределах.

  12. Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    Barmaley_m (04.11.2023), Reobne (30.10.2023)

Страница 3 из 3 ПерваяПервая 123

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

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

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

Похожие темы

  1. Ответов: 0
    Последнее: 21.01.2021, 17:46
  2. Вопрос про EIS-деление
    от litwr в разделе ДВК, УКНЦ
    Ответов: 1
    Последнее: 16.12.2019, 20:28
  3. умножение/деление в алгоритмах ZX игр
    от bigral в разделе Программирование
    Ответов: 27
    Последнее: 18.10.2019, 13:20
  4. Деление/умножение
    от Serdjuk в разделе Программирование
    Ответов: 51
    Последнее: 25.04.2018, 15:54
  5. деление синхросигнала
    от Splinter в разделе Изображение
    Ответов: 3
    Последнее: 01.08.2005, 02:53

Ваши права

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