Информация об изменениях

Сообщение Re[5]: Как написать компилятор Бейсика для Dendy? от 29.10.2024 12:33

Изменено 29.10.2024 19:26 netch80

Re[5]: Как написать компилятор Бейсика для Dendy?
Здравствуйте, Worminator X, Вы писали:

WX>Здравствуйте, netch80, Вы писали:


N>>Деление тупейшее сдвигом и вычитанием, хотя записать можно достаточно оптимально.


WX>Можно на каком-нибудь примере? Или хотя бы название алгоритма, чтобы загуглить.


Просто restoring division, хотя под этим именем чаще понимают аппаратную реализацию. Или schoolbook division. Фактически там примерно такое:

unsigned remainder = dividend;
unsigned quotient = 0;
unsigned temp_divisor = divisor << MAX_SHIFT;
for (step = 0; step < MAX_SHIFT; ++step) {
  quotient = quotient << 1;
  if (remainder >= temp_divisor) { remainder -= temp_dividor; ++quotient; }
}


Но это хорошая форма для процессора, где не нужно ужиматься в 8 бит. А то, что я имел в виду, что видел где-то очень компактный вариант именно для 6502, но уже не помню детали.
Re[5]: Как написать компилятор Бейсика для Dendy?
Здравствуйте, Worminator X, Вы писали:

WX>Здравствуйте, netch80, Вы писали:


N>>Деление тупейшее сдвигом и вычитанием, хотя записать можно достаточно оптимально.


WX>Можно на каком-нибудь примере? Или хотя бы название алгоритма, чтобы загуглить.


Просто restoring division, хотя под этим именем чаще понимают аппаратную реализацию. Или schoolbook division. Фактически там примерно такое:

unsigned remainder = dividend;
unsigned quotient = 0;
unsigned temp_divisor = divisor << MAX_SHIFT;
for (step = 0; step < MAX_SHIFT; ++step) {
  quotient <<= 1;
  if (remainder >= temp_divisor) { remainder -= temp_divisor; ++quotient; }
  temp_divisor >>= 1;
}


Но это хорошая форма для процессора, где не нужно ужиматься в 8 бит. А то, что я имел в виду, что видел где-то очень компактный вариант именно для 6502, но уже не помню детали.