Как известно, тривиальное выполнение целого деления путем нормализации операндов, выполнении деления, и приведения результата к порядку целого приводит к floor(a/b). Вот, например, паскалевская реализация:
, ntr , . включили нормализацию
, avx , . нормализовали делитель
15 , stx , 1 . сумматор - в пустое место выше стека,
. делимое - из стека на сумматор
, avx , . нормализовали делимое
15 , a/x , 2 . поделили (указатель стека декрементирован командой stx, поэтому 2)
, ntr , 3 . выключили нормализацию
1 , a+x , 11b . прибавили 0 с целым порядком,
. лежащий по известному смещению по регистру 1
. это выдвигает дробную часть из сумматора
Проблема в том, что современный Си требует деления с округлением в сторону нуля - чтобы конформная этому делению операция % была остатком (со знаком делителя), а не модулем (со знаком делимого). Задача реализовать сишное деление с минимальным количеством добавленных к приведенному коду команд.