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

User Tag List

Страница 91 из 95 ПерваяПервая ... 878889909192939495 ПоследняяПоследняя
Показано с 901 по 910 из 943

Тема: ЭТЮДЫ

  1. #901
    Master Аватар для Bedazzle
    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    953
    Спасибо Благодарностей отдано 
    20
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    32 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    z80-heaven ресурс хороший, но там бывают неточности, например. В описании E_div_10 не упомянули, что деление приближенное. Все надо проверять.
    Меня печалит, что ресурсы периодически дохнут, и не везде подробности есть.
    Думаю, лучше на гитхаб класть.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm

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

  3. #902
    --- Аватар для Shadow Maker
    Регистрация
    01.03.2005
    Адрес
    Саранск
    Сообщений
    5,454
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    23 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это wikidot, а не сайт, она вряд ли подохнет. 15 лет уже работает. Но если боишься - сделай экспорт и заливай периодически на archive.org.
    Свирепый агрессивно-депрессивный мордовец!
    Не уверен - не напрягай!

    Не сдавайся. Дыши?

    Мордовия - Республика звука

  4. #903
    Veteran Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    1,893
    Спасибо Благодарностей отдано 
    108
    Спасибо Благодарностей получено 
    192
    Поблагодарили
    134 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Меня печалит, что ресурсы периодически дохнут
    Всё верно, лучше дублировать нужную инфу. Я обычно скачиваю к себе локально на NAS, плюс дублирую в свою группу ВК.

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

    Цитата Сообщение от ivagor Посмотреть сообщение
    В описании E_div_10 не упомянули, что деление приближенное.
    Там используется "трюк": умножаем на 26 и делим на 256, т.е. по сути умножаем на 0,1015625 - что очень хорошо приближается к 1/10. Для 8-битных чисел, под которые заточена процедура, точность получается достаточная.
    Всё делается сдвигами и парой сложений. Красиво придумано!
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  5. #904
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,666
    Спасибо Благодарностей отдано 
    90
    Спасибо Благодарностей получено 
    213
    Поблагодарили
    128 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Для 8-битных чисел, под которые заточена процедура, точность получается достаточная.
    Смотря для каких задач. Деление на 10 у меня в первую очередь ассоциируется с преобразованием bin->dec для печати, для этой цели я бы не стал использовать приближенную процедуру. Но задачи бывают разные, для интерполяции при воспроизведении звука я использовал деление через умножение, там точности достаточно.

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

    Если подумать, то E_div_10 нельзя использовать для преобразования bin->dec не только из-за неточности, но и из-за того, что она не вычисляет остаток.

  6. #905
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,666
    Спасибо Благодарностей отдано 
    90
    Спасибо Благодарностей получено 
    213
    Поблагодарили
    128 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хватит исправлять других, исправлю себя. Данная процедура будет правильно делить HL/C не при любых соотношениях HL и С. Но это можно легко поправить

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

    Код:
    DIV_HL_C:
    ; Делимое: [HL]
    ; Делитель: [C]
    ; Частное: [HL]
    ; Остаток: [A]
    	XRA A
    	MVI B,16
    LOOP:
    	DAD H
    	RAL
    	JC NOSKIP
    	CMP C
    	JC SKIP
    NOSKIP:
    	SUB C
    	INR L
    SKIP:
    	DCR B
    	JNZ LOOP
    	RET
    [свернуть]
    Последний раз редактировалось ivagor; 26.01.2020 в 11:49. Причина: убрал процедуру под спойлер

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

    Denn (26.01.2020)

  8. #906
    Veteran Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    1,893
    Спасибо Благодарностей отдано 
    108
    Спасибо Благодарностей получено 
    192
    Поблагодарили
    134 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Деление на 10 у меня в первую очередь ассоциируется с преобразованием bin->dec для печати
    Именно для этой задачи мне и понадобилось деление на 10
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  9. #907
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    175
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Именно для этой задачи мне и понадобилось деление на 10
    Самая быстрая процедура перевода в десятичный вид делением вообще не пользуется - в зависимости знака текущего остатка(сначала он равен исходному числу) в HL она вычитает или добавляет:
    40K, 20K, 10K, 4K, 4K, 2K, 1K, 400, 400, 200, 100, 40, 40, 20, 10,
    Параллельно при неотрицательном остатке в HL к A добавляется 4, 4, 2, 1.

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

    ivagor (26.01.2020)

  11. #908
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    4,666
    Спасибо Благодарностей отдано 
    90
    Спасибо Благодарностей получено 
    213
    Поблагодарили
    128 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Самая быстрая процедура перевода в десятичный вид делением вообще не пользуется
    Круто, но у меня получилось довольно громоздко. Оптимизировать можно, но скорее всего вариант с делением все же будет компактнее. Интересно бы сравнить с double dabble.

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

    Один момент не отметил - использовал флаг заема/переноса, не знака.

  12. #909
    Veteran Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    1,893
    Спасибо Благодарностей отдано 
    108
    Спасибо Благодарностей получено 
    192
    Поблагодарили
    134 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Вывод в DEC

    Цитата Сообщение от blackmirror Посмотреть сообщение
    Самая быстрая процедура перевода в десятичный вид делением вообще не пользуется - в зависимости знака текущего остатка(сначала он равен исходному числу) в HL она вычитает или добавляет:
    40K, 20K, 10K, 4K, 4K, 2K, 1K, 400, 400, 200, 100, 40, 40, 20, 10,
    Параллельно при неотрицательном остатке в HL к A добавляется 4, 4, 2, 1.
    Долгое время пользовался какой-то чужой процедурой, честно спёртой из кода какой-то игры (вроде РКшной?). Сейчас решил разобраться, как она устроена. Там тоже сделано вычитаниями констант: сначала вычитают 10000 пока не уйдут в минус, потом -1000, потом -100 и т.д.. В общем не сильно громоздко, но скорость очень зависит от значения исходного числа, мне показалось это "некрасивым", решил сделать по-своему.

    В итоге придумалось так. Исходник в [HL]. Сначала умножаем [AHL] на 6,5536 (тобишь *65536/10000), в результате в [A] у нас оказывается первая (слева) цифра, её выводим на экран. Обнуляем аккумулятор. Далее 4 раза умножаем [AHL] на 10 (3хDAD H + 2xDAD D) и на каждом шаге выводим, а затем обнуляем значение [A].
    Скорость не зависит от числа, а самый "тормозной" участок алгоритма - это деление на 10000 (два раза делим на 100 с помощью "марсианского" кода). Как-то так.
    Последний раз редактировалось Denn; 26.01.2020 в 17:40.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  13. #910
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,497
    Спасибо Благодарностей отдано 
    22
    Спасибо Благодарностей получено 
    35
    Поблагодарили
    27 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    самый "тормозной" участок алгоритма - это деление на 10000
    Если нужно вывести число, самый быстрый метод, на мой взгляд, перевод в BCD:

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

    Код:
    	LXI H,1234
    	CALL TOBCD
    	JMP $ ; десятичное число в регистрах B,C,D = 00,12,34
    
    TOBCD:  LXI B,0
    	LXI D,16
    L1:	DAD H
    	MOV A,D
    	ADC A
    	DAA
    	MOV D,A
    	MOV A,C
    	ADC A
    	DAA
    	MOV C,A
    	MOV A,B
    	ADC A
    	DAA
    	MOV B,A
    	DCR E
    	JNZ L1
    	RET
    [свернуть]

    С выводом незначащих нулей придётся повозиться, но это уже мелочи.

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

    Denn (27.01.2020), ivagor (26.01.2020)

Страница 91 из 95 ПерваяПервая ... 878889909192939495 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

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