PDA

Просмотр полной версии : Задача



axor
15.12.2005, 22:43
Дано ADR=MASSIVE+64*Y+X.

Нужно быстро получить обратно:
Y=INT((ADR-MASSIVE)/64)
X=(ADR-MASSIVE)-Y*64

MASSIVE=ровному адресу.

jtn
15.12.2005, 23:11
;Hl=adr
ld a,h
sub massive/256
ld h,a
ld a,l
add hl,hl
add hl,hl
and #3f
ld l,a
;H-y, L-x

p.s. а лень чота думать дальше..

Titus
16.12.2005, 06:02
Дано ADR=MASSIVE+64*Y+X.

Нужно быстро получить обратно:
Y=INT((ADR-MASSIVE)/64)
X=(ADR-MASSIVE)-Y*64

MASSIVE=ровному адресу.

Если использовать de, то можно на 2 байта короче и 1 такт быстрее:
add hl,de (hl = ADR; de = -MASIVE)
ld a,l
and #3F (A = X)
add hl,hl
add hl,hl (h = Y)

axor
18.12.2005, 18:44
Благодарю ответивших.