@Timebird

Как разделить два числа в Assembler при помощи цикла?

Необходимо, допустим, разделить число 154 на 3. Как это сделать при помощи цикла? Идею понял: надо вычитать из числа по 3 до тех пор, пока не достигнем нулевой отметки и, соответственно, остаток в одну переменную записать, количество итераций таких вычитаний -- в другую. Но как это сделать без помощи операций div и/или idiv? Компилятор AVR Studio почему-то их не распознает.
  • Вопрос задан
  • 1015 просмотров
Пригласить эксперта
Ответы на вопрос 3
@sitev_ru
sitev.ru - мой блог ...
Видимо как-то так... набросал, но не проверял... потестируйте, плиз...
mov eax, 154
mov ecx, 0
loop1:
inc ecx
sub eax, 3
jb loop1


P.S. Это для x86
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
Хотелось бы уточнить.
1. Размеры делимого и делителя.
2. Знаковые или беззнаковые?
3. Нужен ли остаток?
4. Делим на константу или на что-то заранее неизвестное?

Вот для примера 16-битное беззнаковое делить на произвольное 8-битное беззнаковое, как я понял, без остатка.
www.avr-asm-tutorial.net/avr_en/calc/DIV8E.html

А вот так работает деление на константу (в данном случае на 6).
stackoverflow.com/questions/34136339/how-does-divi...
Ответ написан
Вам не жалко процессорных циклов для такого алгоритма деления ?
Количество итераций не должно превышать разрядность делимого - это в самом плохом случае (деление на 2).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы