Да код и не нужен.
О таком преобразовании я что-то и не подумал.
Вид для печати
Да код и не нужен.
О таком преобразовании я что-то и не подумал.
цель задачи
(Number)=(Number)-(Number)*c/#10000
оптимизацию по скорости может кто предложить?Код:;трехбайтное число
Number
low db 0
med db 0
high db 0
;определение множителя
ld hl,Tabl
and #7F
jr z,.gtm01
add a,l
ld l,a
ld c,(hl)
;c - множитель
;high
ld a,(high)
and #7F
ld b,a
; умножение hl=c*b
sub c
jr nc,.gtm02
ld a,c
sub b
.gtm02 rra
ld h,TableSqr/#100
ld l,a
ld e,(hl)
inc h
ld d,(hl)
ld a,b
add a,c
rra
ld l,a
ld a,(hl)
dec h
ld l,(hl)
ld h,a
and a
sbc hl,de
;med
push hl
ld a,(med)
; умножение hl=a*c
ld b,a
sub c
jr nc,.gtm03
ld a,c
sub b
.gtm03 rra
ld h,TableSqr/#100
ld l,a
ld a,b
add a,c
rra
ld e,(hl)
inc h
ld d,(hl)
ld l,a
ld a,(hl)
dec h
ld l,(hl)
ld h,a
and a
sbc hl,de
pop de
ld a,l
ld l,h
ld h,#00
;hla = med*c
;de = high*c
;сложим
add hl,de
ld b,a
ex de,hl
;low
ld a,(low)
ld h,a
sub c
jr nc,.gtm04
ld a,c
sub h
.gtm04 rra
ld l,a
ld a,h
add a,c
rra
ld h,TableSqr/#100+1
ld c,(hl)
ld l,a
ld a,(hl)
sub c
add a,b
jr nc,.gtm05
inc de
.gtm05 ld hl,(low)
ld a,(high)
or a
sbc hl,de
sbc a,0
ld (low),hl
ld (high),a
.gtm01
выровнять Tabl на параграф не предлагать
Вместо длинного вычисление множителя через таблицу, не подойдёт-ли чтонибудь простое, вроде CPL или NEG?
Умножать MED однобайтово, а LOW вообще не умножать.
- - - Добавлено - - -
(Number)=(Number)-(Number)*c/#10000
изменить так:
(Number)=(Number)-(Number)*#100/#10000+(Number)*nn/#10000
то есть вернуться обратно к nn
Вы полагаете расчет, даже с использование таблицы квадратов, будет быстрее табличной выборки?
Да, предполагал, что если TableSqr выравнена, а Tabl не выровнена, то такое возможно. Но раз нет, то нет.
Хотя вариант имеет право на жизнь
Прошло всего-то 14 лет - а кто-то проверял, как это работает? Я проверил (понадобилось). Немного не так работает, как заявлено.
оставляет в А значение 22, хотя должно быть 23.Код:ld a, 23
sub 23
adc a, 22
То есть, формула должна быть:
sub x+1
adc a, x
а не
sub x
adc a, x-1
К этому:
претензий нет.Код:add a,-75
sbc a,-1-75