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

User Tag List

Страница 103 из 103 ПерваяПервая ... 99100101102103
Показано с 1,021 по 1,023 из 1023

Тема: ЭТЮДЫ

  1. #1021
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    284
    Спасибо Благодарностей получено 
    489
    Поблагодарили
    331 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    Cool Деление на 102 с хвостиком)

    Намедни возникла нужда сделать вывод большого (более 65535) числа в десятичном виде, в Килобайтах и с одним знаком после запятой.
    Исходное число хранится в трёх байтах, т.о. оно может принимать значения от 0 до 16777216.
    Соответственно, при выводе требуется "разбить" исходное число как бы на две составляющие: целую часть и остаток.
    Тут всё просто, целая часть это старшие биты начиная с десятого и выше, а остаток это десять младших бит.

    Собственно задачка - преобразовать число остатка (0..1023) в соответствующие значения десятых (0..9).
    Тобишь значение 512 должно нам давать ",5" и т.д.
    Чисто математически решение сводится к делению значения остатка на константу 102,4.
    Для гуру это конечно же "не вопрос", а я традиционно люблю изобретать велосипед, поэтому на решение был убит очень нескучный вечер
    Но результатом я дико доволен, в связи с чем решил поделиться.

    Ранее у меня был исследован вопрос быстрого деления на 10, 100, 1000, и в хозяйстве были заготовки такого кода,
    который я и стал пытаться приспособить для решения данной задачи. Вроде бы 102 с хвостиком и 100 - это примерно одно и то же...
    Но не тут-то было, ошибка набегала столь фатальная, что такой вариант оказался абсолютно неприемлем.
    Были попытки предварительно "чуть подкрутить" делимое (а также результат), чтобы хотя бы явные значения типа 512->0,5 были некривые. Но в итоге получалось громоздко и некрасиво.
    В какой-то момент уже даже хотел сдаться, плюнуть, и сделать втупую сравнениями с переходными значениями и выдачей константы...
    Но вдруг осенило! Давно не получал такого удовлетворения от неожиданно найденного решения, если честно.

    Суть пока не рассказываю, просто готовый код


    Код:
    ; в [HL] остаток (0..1023)
    MOV D,H
    MOV E,L
    DAD H
    DAD H
    DAD H
    DAD D
    DAD D
    MOV A,H
    RRC
    RRC
    ANI 0Fh
    ; в [A] точное значение десятых (0..9)
    П.С. может кому-то даже пригодится)
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

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

  3. #1022
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    5,787
    Спасибо Благодарностей отдано 
    283
    Спасибо Благодарностей получено 
    640
    Поблагодарили
    400 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    ; в [HL] остаток (0..1023)
    MOV D,H
    MOV E,L
    DAD H
    DAD H
    DAD D
    MOV A,H
    RAR
    ; в [A] точное значение десятых (0..9)

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

    Denn (26.01.2021)

  5. #1023
    Junior Аватар для mdk
    Регистрация
    19.10.2019
    Адрес
    г. Электроугли
    Сообщений
    24
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    28
    Поблагодарили
    11 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Суть пока не рассказываю, просто готовый код
    [точное значение десятых] = [остаток] * 10 / 1024
    либо:
    [точное значение десятых] = [остаток] * 5 / 512

Страница 103 из 103 ПерваяПервая ... 99100101102103

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

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

Эту тему просматривают: 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

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

Ваши права

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