|
KrNews
#05
24 июля 1998 |
|
Кодерам - Процедуры быстрого деление и умножение.

3) В ZX РЕВЮ была процедура деления
ужасно неоптимальная (у меня подозрение,
что тот кто ее прислал просто списал ее
из книги по какому нибудь i-8085, не
используя дополнительные команды Z-80).
В DE - делимое, в C - делитель,
результат в HL, остаток в A.
;DIVIDE DE/C=HL
ORG 40000
ENT
LD DE,768
LD C,3
CALL DIV
RET
DIV LD B,16
LD HL,0
LD A,H
DV1 RL E
RL D
RLA
SUB C
JR NC,DV2
ADD A,C
DV2 CCF
RL L
RL H
DJNZ DV1
RET
4) Смысл оттуда же, в 1.51 раз
быстрее и на байт меньше.
Множимое -D
множитель - E
результат - DE
;MULTIPLY DxE=DE; 0<=result<65535
ORG 40000
ENT
LD DE,#FEFF
CALL MULT
RET
MULT XOR A
LD B,8
MU1 RRA
RR E
JR NC,MU0
ADD A,D
MU0 DJNZ MU1
RRA
RR E
LD D,A
RET
Другие статьи номера:
Похожие статьи:
В этот день... 29 ноября