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

Discussion in 'WASM.BEGINNERS' started by Antolflash, Feb 28, 2009.

  1. Antolflash

    Antolflash New Member

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

    Antolflash New Member

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

    dgs New Member

    Blog Posts:
    0
    Joined:
    Jun 23, 2008
    Messages:
    434
    не легче использовать FPU?
     
  4. Freeman

    Freeman New Member

    Blog Posts:
    0
    Joined:
    Feb 10, 2005
    Messages:
    1,385
    Location:
    Ukraine
    imul наводит на мысль о том, что числа со знаком.. в таком случае данная схема не будет работать. легче ФПУ в данном случае действительно, чем загоняцо следить за разрядностью и знаком числа
     
  5. Antolflash

    Antolflash New Member

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

    Antolflash New Member

    Blog Posts:
    0
    Joined:
    Dec 14, 2008
    Messages:
    167
    Переписывается(
     
  7. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 17, 2003
    Messages:
    2,409
    Location:
    Fryazino
    Antolflash
    Хочешь 64 бита используешь пару регистров, не хочешь используешь 32 бита.

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

    Antolflash New Member

    Blog Posts:
    0
    Joined:
    Dec 14, 2008
    Messages:
    167
    Да, вспомнил, сначала идёт побитовый NOT, и потом добавляется +1 в младший разряд.
     
  9. Antolflash

    Antolflash New Member

    Blog Posts:
    0
    Joined:
    Dec 14, 2008
    Messages:
    167
    Не могу я в голове удержать алгоритм куда-что сохранять и домножать со сложением, так что обойдутся умножением с произведением в пределе 32бит, в дальнейшем изучу FPU.
     
  10. leo

    leo Active Member

    Blog Posts:
    0
    Joined:
    Aug 4, 2004
    Messages:
    2,542
    Location:
    Russia
    Чего там "изучать" то, 3 инструкции ?
    Code (Text):
    1. fild a    ;грузим 1-е  
    2. fimul b  ;умнож. на 2-е
    3. fimul c  ;умнож. на 3-е
    4. fistp q  ;сохраняем результат