Цитата Сообщение от Bolt Посмотреть сообщение
Denn, давай разделим 00115 на 7 в десятичной системе.

1. Сдвигаем 00115 влево на одну позицию, 0|0115?. 0 меньше 7, поэтому ?=0, итого 0|01150
2. Сдвигаем, 00|1150?. 00 меньше 7, поэтому опять 0. 00|11500.
3. 001|1500?, 1 меньше 7, 001|15000.
4. 0011|5000?, 11 больше 7, вычитаем, остаётся 4|50001.
5. 45|0001?, 45 больше 7, вычитаем 6 раз, остаётся 3|00016.

5 разрядов, 5 шагов. Остаток в аккумуляторе, частное там, где было делимое.
К сожалению, это не продвинуло меня ни на шаг к разгадке. Наверное у меня не хватает мозгов(
Нет, чисто машинально я понимаю ЧТО здесь происходит, скажем так - в пределах каждой строчки в отдельности. Но какова цель всех этих действий, мне не понятно.
Общего алгоритма я не понимаю((

Грубо говоря, то же банальное деление подсчётом кол-ва вычитаний делителя - ясно и прозрачно, мне понятен общий принцип и каким образом каждый шаг ведёт к результату. Аналогично при делении в столбик: на каждом шаге понятно что происходит и зачем это всё делается.
Здесь же, я вижу что выполняются некие действия непонятного назначения, на промежуточных этапах в регистрах получаются совершенно непонятные значения...
Я подробно прокрутил уже много примеров через этот алгоритм, но никакой логики увидеть не смог.


Цитата Сообщение от Bolt Посмотреть сообщение
Деление в столбик. Выдвинули разряд, сравнили, записали цифру в частное. Только частное приписываем справа к делимому, чтобы регистры не занимать.

В коде то же самое, но в двоичной системе.
Возможно имеет смысл действительно рассматривать происходящее не в 16-ричном виде, а в двоичном. Или попробовать разобраться и написать с нуля алгоритм деления в классический столбик, может тогда придёт понимание.

- - - Добавлено - - -

Цитата Сообщение от ivagor Посмотреть сообщение
Думаю это принципиальный момент. В контексте данного алгоритма DAD H и RAL это не умножение на 2/сдвиг влево AHL, это деление на 2/сдвиг вправо C относительно AHL. Все относительно, вручную мы привыкли сдвигать делитель вправо относительно делимого, а здесь двигают делимое влево относительно делителя (так делают в большинстве процедур деления для 8080, т.к. команды сдвига влево есть только для A). Но результат одинаковый. И в качестве бонуса такой сдвиг обнуляет младший бит L.
С этим как раз у меня проблем нет. Очень часто пользуюсь сдвигами при программировании, и всегда оптимизирую - кручу в ту сторону, в какую ближе, а уж "перекинуть" байты местами для получения обратной картины не вопрос.
В данном случае мне глобально не понятен смысл всех этих действий, каким образом они ведут к результату.