16 битовое деление используя 8 битные регистры

Тема в разделе "WASM.BEGINNERS", создана пользователем assorted, 15 фев 2007.

  1. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Подскажите алгоритм деления
    Допустим,
    al:bl -делимое
    cl:dl -делитель

    Никому не попадалось?
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    мм.. обычно если делимое 16-разрядное то делитель - 8.
    а так.. вычитать из делимого делитель, смотреть знак результата, сдвигать делимое вправо итд.. если деление со знаком, то сложнее, хотя можно запомнить знак и превратить все числа в положительные
    поищи что-нибудь по ключевым словам "деление с восстановленем остатка" и "деление без восстановления остатка".
     
  3. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    неясно, с какой целью интересуетесь :)
    здесь кое-что есть на эту тему - может, поможет ;)
     
  4. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    А использовать 16/32-разрядные регистры нельзя? :)
    алгоритм беззнакового деления с двойной точностью числа (с*256+d)/(a*256+b)
    вычисляются такие q (остаток) и r (частное), что c=a*r+q
    c*256+d=(ar+q)*256+d=r(a*256+b)+q*256+d-rb
    величина q*256+d-rb считается остатком от первоначального деления, если она отрицательна, делаем декримент r до тех пор, пока она не станет положительной
     
  5. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Примерный двоичный алгоритм:

    1) расширяем числа:
    0:0:al:bl = x
    cl:dl:0:0 = y
    пусть q = x - остаток
    2) повторять пункты 3-6 нижеперечисленное от i = 15 до 0
    3) вычисляется бит результата i
    4) вычитаем q = q-y (да, вычитание будет многобайтное)
    5) если результат
    больше нуля - бит результата 1
    меньше нуля - бит результата 0, восстановить остаток q = q+y (многобайтное сложение)
    6)сдвинуть y на 1 бит врпаво (многобайтный сдвиг)
    7)цикл закончен - есть результат, и есть q - остаток

    Зы - здесь возможно глюк в номере выичляемого, бита результата ... писал по памяти ...