Цитата:
Сообщение от Spectator
|
Видел я этот пример. Не подходит он.
Поставлю задачу более конкретно. mod высчитывается в подпрограмме.
Обращение к подпрограмме идет с разными входными данными.
Входные данные:
HL - делимое
С - делитель
(т.е.) надо найти HL mod C
Выходные данные:
A = HL mod C
Самый простой способ - вычитание (HL - C) в цикле до тех пор, пока HL не станет отрицательным. Прибавив к нем вычитаемое получим значение mod-а.
Вот набросал код. Кто может посмотреть наметанным глазом и сказать что-нибудь про его работоспособность. Просто используется флаг переноса, а с флагами у меня беда

.
MOD:
LD B,0 ;создаем пару BC
_Loop:
AND A ;Сброс флага переноса для SBC
SBC HL,BC ;HL <- HL - BC - Carry
JR NC,_Loop ;Если HL >= BC, то переходим в SUB
RET ;Возврат