![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.09.2009
Сообщений: 52
|
![]()
Всем Здравствуйте. Меня интересует команда DIV, а точнее принцип её работы. Допустим я хочу поделить 64-х разрядное делимое на 32-х разрядный делитель(EDX:EAX/ECX).
Меня интересует сам алгоритм, т.е. как в машине производится такое деление. Причём именно беззнаковое. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Mr.Steroid
1) Если деление на число представляющее собой степень двойки, то сдвигами 2) Для реализации деления на заранее известное число можно использовать табличное преобразование (команда XLAT) 3) Деление через вычитание. Частное от деления можно представить как количество вычитаний делителя из делимого до тех пор, пока делимое сохраняет знак. Это дало возможность организовать деление путем повторения последовательности вычитаний с проверкой знака делимого. Если произошла перемена знака, то нужно уменьшить счетчик числа вычитаний на единицу, а делимое и делитель сложить. Теперь делимое будет равно остатку, а счетчик числа вычитаний равен частному. Так делили на ранних микропроцессорах Intel (i4004, i8080), которые еще не поддерживали команду деления 4) Деление через вычитание, сложение и сдвиги При делении двоичных чисел используют два алгоритма: алгоритм деления без восстановления и алгоритм деления с восстановлением. При делении с помощью вычитаний, сложений и сдвигов можно использовать две схемы. Схема а – делимое по мере вычисления сдвигается влево, делитель остается неподвижным. Схема б – делимое неподвижно, а делитель по мере вычисления сдвигается вправо. Цифры частного формируются по значению бита переноса CF, устанавливаемого при вычитании или сложении делителя и делимого, и сдвигаются влево. Таким образом, можно использовать четыре способа деления через вычитания, сложения и сдвиги. Проиллюстрируем алгоритм деления без восстановления. Из делимого вычитается делитель, умноженный на степень двойки. Произведение числа на 2^n эквивалентно сдвигу этого числа на n разрядов влево. Если знак результата положительный, то нужно прибавить 2^n к частному, если знак результата отрицательный – частное не увеличивается. Когда знак результата меняется на отрицательный, вычитание заменяется сложением. Так повторяется при уменьшающихся степенях двойки до тех пор, пока не будет достигнута степень, равная нулю. Остатком считается последний положительный результат. |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
![]() Цитата:
Правильно поставленная задача - три четверти решения.
|
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
макрос вставка текста между тегами <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 |