На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> арифмометр , вещественная арифметика
    Привет. Сделал, на masm32, арифмометр - а он не хочет работать с числами меньше еденицы. Да и округляет как-то странно. Посоветуйте - что не так или, хотя-бы - где не так. Код выкладывать не буду, прицеплю архив.
    Прикреплённый файлПрикреплённый файлfenix.zip (9,08 Кбайт, скачиваний: 62)
      Так у вас после определения '.' начинается беда. Смотрите:
      12345.1111 -> (((1 * 10 + 2) * 10 + 3) * 10 + 4) * 10 + 5) + 0.1 * 5 + 0.01 * 5 + 0.001 * 5 + 0.0001 * 5
      Вот что вы вычисляете.
      После фиксации . (с метки drob) вы не переводите символ в цифру, а используете последнее значение.

      Как вариант
      ExpandedWrap disabled
              mov  dl,al           ; копируем символ  *** новая строка
              and  al,0Fh           ;преобразуем символ  *** 17 строка файла asc2float.inc
              movzx eax,al          ;расширяем его
              mov  [edi],eax        ;и сохраняем
              cmp  dot,0            ;была точка?  *** 13 строка файла asc2float.inc
              jg   drob             ;да (dot > 0)
              cmp  dl,"."           ;это точка?   *** используем скопированный символ, а не подготовленный из al/eax
              je   c_dot            ;да
        Я бы не советовал использовать FPREM. Она-таки для другого. Чем FRNDINT не угодила?

        Добавлено
        4 знака после запятой жёстко зашито в коде. Режим округления никак не используется. Из-за FPREM, в общем-то.

        Добавлено
        И да, "великолепное" разделение по .inc. Кто так учил делать? О процедурах или хотя бы макросах ничего не рассказывали?
        Сообщение отредактировано: Qraizer -
          Цитата macomics @
          После фиксации . (с метки drob) вы не переводите символ в цифру, а используете последнее значение.

          Благодарю за подсказку - как обойти разделительный символ. Я перенёс обработку символов в начало "cycl" и всё заработало.

          Добавлено
          Цитата Qraizer @
          И да, "великолепное" разделение по .inc.

          Главное - удобно...и работает
          :rolleyes:
            Цитата cupoma58 @
            Главное - удобно...
            Нет. Удобно работать с конкретными сущностями, а не фрагментами их кусков. Я потратил три попытки понять, что там написано. Если б всё было оформлено по правилам, ответ был бы уже через полчаса, а не когда у меня нашлось время.
            Цитата cupoma58 @
            ...и работает
            Это вообще не аргумент. Подстановка на уровне текстовых фрагментов игнорирует любые языковые правила. Что такое макросы на препроцессоре и во что порой выливается их отладка, причём написаны они правильно и работают везде, по почему-то кроме как вот тут, тебе любой Cшник расскажет в красках. Т.к. фрагменты собираются в кучу без всякого контроля грамматическими конструкциями языка, ты вынужден контролировать это самостоятельно, компилятор тут тебе не помощник.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0241 ]   [ 16 queries used ]   [ Generated: 16.04.24, 06:04 GMT ]