Да код и не нужен.
О таком преобразовании я что-то и не подумал.
Да код и не нужен.
О таком преобразовании я что-то и не подумал.
цель задачи
(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
LW(17.12.2021)
Вы полагаете расчет, даже с использование таблицы квадратов, будет быстрее табличной выборки?
Да, предполагал, что если 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
Последний раз редактировалось 0xDEAD; 08.06.2022 в 19:33.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)