входные данные result_lh
сумма двух квадратов
выходные данные L - result_l
Код:
count_round
; LDY rezult_h ; y=(rezult_h)
; LDA rezult_l ; a=(rezult_l)
; STA factor_2 ; (factor2)=(rezult_l)
ld de,(rezult_1)
; d(y=result_h)
; e=factor2
; LDX #0 ; x=0
; STX rezult_l ; rezult_l=0
; LDA #8
; STA factor_1 ; ctr=8 repeat 16 times
ld bc,#0800
; b=factor_1
; c=x
ld l,0
; l=rezult_l
count_loop
; CPX rezult_l ; x=(result_l)?
ld a,c
cp l
; BCC skip_decr ; jr nc
jr nc,skip_decr
; BNE no_chek_round ; jr nz
jr nz,no_chek_round
; CPY #$40 ; '@' ; y(rezult_h)=#40?
ld a,d
cp #40
; BCC skip_decr ; jr nc
jr nc,skip_decr
no_chek_round
; TYA
; SBC #$40 ; '@' ; y(result_h)-#40
; TAY
ld a,d
sbc a,#40
ld d,a
; TXA
; SBC rezult_l ; x-result_l
; TAX
ld a,c
sbc a,l
ld c,a
skip_decr
; ROL rezult_l ; rezult_l*2
rl l
; ASL factor_2 ; <(factor2)(result_l)
; TYA
; ROL A ; <y
; TAY
; TXA
; ROL A ; <x
; TAX
sla e
rl d
rl c
; ASL factor_2 ; <(factor2)(result_l)
; TYA
; ROL A ; <y
; TAY
; TXA
; ROL A ; ;<x
; TAX
sla e
rl d
rl c
; DEC factor_1
; BNE count_loop
djnz count_loop
; RTS
ret