Я работаю над ассемблерной программой для 6502 процессора, и считаю, что мне нужна быстрая, по возможности, раздельная процедура, в частности та, которая может принимать 16-битный дивиденд.
Я знаком с подпрограммами, найденными здесь, но обобщая процедуру разрыва на семь, найденную там, довольно сложна и беглый анализ общего алгоритма (с использованием целочисленного деления)
x/7 ~ = (x + x/8 + x/64...)/8
указывает на то, что для обработки 16-битного диапазона, вероятно, потребуется более 100 циклов из-за единственного регистра аккумуляторов 6502 и относительной медленности смещений бит памяти на 6502.
Я думал, что справочная таблица может помочь, но на 6502 я, конечно, ограничен таблицами поиска, которые имеют 256 байт или меньше. С этой целью можно было предположить существование двух 256-байтных поисковых таблиц, xdiv7 и xmod7, которые при использовании знакового однобайтового значения в виде индекса в таблице могут быстро получить результат байта, деленный на 7 или по модулю 7 соответственно. Однако я не знаю, как я мог бы использовать их, чтобы найти значения для полного 16-битного диапазона.
Параллельно мне также нужен алгоритм с модулем 7, хотя в идеале любое решение, которое может быть разработано с помощью деления, также даст результат mod7. Если требуются дополнительные предварительно вычислимые таблицы, я могу добавить их, если общие требования к памяти для всех таблиц не превышают примерно 3 тыс.
Хотя мне в конечном итоге нужен подписанный алгоритм деления, для него будет использоваться непознанный, потому что я могу обобщить его на подписанную подпрограмму по мере необходимости.
Будем очень благодарны любой помощи.