[an error occurred while processing this directive]
|
На счёт алгоритма: это псевдокод стандарта кодирования речи и я к его разработке ни какого отношения не имею, а о мативах разработчиков по выполнению тех или иных операций я лишь могу догадываться... А моя задача состоит в том что бы это всё реализовать на асме, так что бы результаты полностью совпадали, то есть все выходные данные с точностью до последнего знака в точности совпадали...
А вот о моей тупости по поводу того что умножить на 2 это тоже самое что и сложить 2 раза, а следовательно сдвиг влево можно заменить двумя сложениями - возражения принимаются. Но тут есть своё НО, содержимое Т нельзя увеличить в 2 раза, так как в нём может произойте переполнение, чего бы крайне не хотелось... Поэтому необходимо применить 2 МАКа, то есть:
ldr *ar3,16,a ;1 – acc=ATMP(IP)<<16+4000h
mac *ar2,a ;3 - acc=acc+(RC*ATMP(IB)+(RC*ATMP(IB)
mac *ar2,a
bc lab2,anov ;5 - If AA0 overflowed...
...
lab4:
...
sth a,*ar3+ ;1 - ATMP(IP)=ah
Экономия составляет не по 4 цикла на аккумулятор, а всего по 2 (к стати в вашем случае программы экономия составит не 10000, а всего 5000 так как съекономили по 4 МЦ на аккумулятор и в общей сложности 8*625=5000МЦ), то есть только (2+2)*625=2500МЦ. Совсем не Весело...
Но и на этом спасибо, как говорится спасибо за идею...
Я ещё маленько намутил, применив вместо BC команду BCD, в следствии чего ещё маленько МЦ получилось отыграть....
E-mail: info@telesys.ru