Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 11:24   #1
Mr.Steroid
Пользователь
 
Регистрация: 28.09.2009
Сообщений: 52
По умолчанию Команда DIV

Всем Здравствуйте. Меня интересует команда DIV, а точнее принцип её работы. Допустим я хочу поделить 64-х разрядное делимое на 32-х разрядный делитель(EDX:EAX/ECX).
Меня интересует сам алгоритм, т.е. как в машине производится такое деление. Причём именно беззнаковое.
Mr.Steroid вне форума Ответить с цитированием
Старый 22.02.2012, 12:55   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Mr.Steroid
1) Если деление на число представляющее собой степень двойки, то сдвигами
2) Для реализации деления на заранее известное число можно использовать табличное преобразование (команда XLAT)
3) Деление через вычитание. Частное от деления можно представить как количество вычитаний делителя из делимого до тех пор, пока делимое сохраняет знак. Это дало возможность организовать деление путем повторения последовательности вычитаний с проверкой знака делимого. Если произошла перемена знака, то нужно уменьшить счетчик числа вычитаний на единицу, а делимое и делитель сложить. Теперь делимое будет равно остатку, а счетчик числа вычитаний равен частному. Так делили на ранних микропроцессорах Intel (i4004, i8080), которые еще не поддерживали команду деления
4) Деление через вычитание, сложение и сдвиги При делении двоичных чисел используют два алгоритма: алгоритм деления без восстановления и алгоритм деления с восстановлением. При делении с помощью вычитаний, сложений и сдвигов можно использовать две схемы. Схема а – делимое по мере вычисления сдвигается влево, делитель остается неподвижным. Схема б – делимое неподвижно, а делитель по мере вычисления сдвигается вправо. Цифры частного формируются по значению бита переноса CF, устанавливаемого при вычитании или сложении делителя и делимого, и сдвигаются влево. Таким образом, можно использовать четыре способа деления через вычитания, сложения и сдвиги.
Проиллюстрируем алгоритм деления без восстановления. Из делимого вычитается делитель, умноженный на степень двойки. Произведение числа на 2^n эквивалентно сдвигу этого числа на n разрядов влево. Если знак результата положительный, то нужно прибавить 2^n к частному, если знак результата отрицательный – частное не увеличивается. Когда знак результата меняется на отрицательный, вычитание заменяется сложением. Так повторяется при уменьшающихся степенях двойки до тех пор, пока не будет достигнута степень, равная нулю. Остатком считается последний положительный результат.
Mikl___ вне форума Ответить с цитированием
Старый 22.02.2012, 13:23   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Mr.Steroid Посмотреть сообщение
Всем Здравствуйте. Меня интересует команда DIV, а точнее принцип её работы. Допустим я хочу поделить 64-х разрядное делимое на 32-х разрядный делитель(EDX:EAX/ECX).
Меня интересует сам алгоритм, т.е. как в машине производится такое деление. Причём именно беззнаковое.
http://bibliofond.ru/view.aspx?id=34319 - тут описан один из примеров такой реализации
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос вставка текста между тегами <div> </div> nur91m Microsoft Office Word 2 19.10.2011 22:16
Команда System: запуск программы в свёрнутом режиме, Не работает команда /min Me777 Общие вопросы C/C++ 0 12.07.2011 11:49
Вычисление среднего арифметического элементов массива. Не выполняется команда div. Ibanez Wizard Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.03.2011 16:54
div тег как нижний слой для второго div тега dadli HTML и CSS 2 30.07.2010 01:12
Позиционирование двух плавающих DIV внутри одного DIV allocator HTML и CSS 5 22.07.2009 13:48