Показать сообщение отдельно
Старый 16.07.2012, 21:07   #3   
Форумец
 
Аватар для r_c_m
 
Сообщений: 595
Регистрация: 27.03.2004
Возраст: 47

r_c_m вне форума Не в сети
Цитата:
Сообщение от 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 ;Возврат