Цитата Сообщение от ivagor Посмотреть сообщение
В дополнение/окончание темы bin2bcd с использованием daa. Оказывается достаточно давно на форуме уже была ссылка на такую процедуру (там много чего).
Эти процедуры нельзя считать окончанием темы, поскольку на форуме были и более оптимизированные варианты. Вообще использовать 32х разрядное умножение/деление для генератора случайных чисел идея так себе. Лучше взять CRC32 и на выходе сделать XOR старшей и младшей половины, это явно будет менее 3000 тактов. А вот то, что в делении торчит add hl,bc / jc $+4 / sbc hl,bc вообще никуда не годится. Мы уже выяснили, что нужно вычитать или добавлять делитель в зависимости от знака остатка, переходя в другую ветку, если знак поменялся. Это следует из тех соображений, что после вычитания и сдвига мы должны получить 2A-2B или 2A если вычитание было ошибочным и мы делали коррекцию. При следующем вычитании мы получим 2A-2B-B или 2A-B, которое равно 2A-2B+B, то есть делать коррекцию не нужно!
Даже 8080 при всех своих ограничениях может весьма эффективно делить число любой длины на 16 разрядное, и немного менее эффективно чем zx80 одолеть и 32х разрядный делитель, правда в последнем случае ему придётся грузить делитель или минус делитель в BC частями.