Арифметика двух регистров

Тема в разделе "WASM.BEGINNERS", создана пользователем Antolflash, 28 фев 2009.

  1. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Как организовать правильное знаковое перемножение (imul) ТРЁХ чисел, если при произведении первого числа на второе число заполняется не только eax, но и более старшие разряды edx, и как теперь это умножить на третье число??? Если опять использовать imul eax, то мы не учтём старших разрядов.
    Тот же вопрос и про вычетание числа < 32 бит из ПАРЫ регистров.
     
  2. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Правильно ли я полагаю, что нужно скопировать содержимое edx куда-то (например push edx), произвести перемножение с третьим числом, а затем перемножить бывшее значение edx с третьим множителем и прибавить этот результат к edx. ??
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    не легче использовать FPU?
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    imul наводит на мысль о том, что числа со знаком.. в таком случае данная схема не будет работать. легче ФПУ в данном случае действительно, чем загоняцо следить за разрядностью и знаком числа
     
  5. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    знак что-то меняет? Как я понимаю знак - это самый старшый разряд обоих регистров, так? Надо будет разобраться, будет ли этот старший разряд переписываться, в случаи, когда в него по правилам суммирования должна занестись +1 (т.е. перенос в старший разряд при сложении)
     
  6. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Переписывается(
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Antolflash
    Хочешь 64 бита используешь пару регистров, не хочешь используешь 32 бита.

    Не так. Отрицательные числа хроняться в дополнителном коде.
    Поэтому изминения знака neg меняет не только старший разряд но и все.
     
  8. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Да, вспомнил, сначала идёт побитовый NOT, и потом добавляется +1 в младший разряд.
     
  9. Antolflash

    Antolflash New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    167
    Не могу я в голове удержать алгоритм куда-что сохранять и домножать со сложением, так что обойдутся умножением с произведением в пределе 32бит, в дальнейшем изучу FPU.
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Чего там "изучать" то, 3 инструкции ?
    Код (Text):
    1. fild a    ;грузим 1-е  
    2. fimul b  ;умнож. на 2-е
    3. fimul c  ;умнож. на 3-е
    4. fistp q  ;сохраняем результат