Сообщение от laimas
|
Можно и посмеяться. Только если речь идет о 8-бит процессоре, то каким боком тут JavaScript вам поможет, неужто вы и браузер под нее писать будете?
Алгоритм извлечения квадратного корня, ассемблер. Это не для 8-бит, но это дает представление о решениях. Переложить этот ассемблер на 8-бит для того же Z80 можно.
На Си - sqrt(double).
Z80 это тот же i80, но с интересной особенностью - второй набор регистров, между которыми можно переключаться. Если программировать для 8-бит ЭВМ, к примеру 80С51, значит надо брать ее среду разработки. JS в эту среду ну никак не входит, и какая от него польза в этом контексте не понимаю. )
|
Ну, я кажется в названии тему подчеркнул "Заготовка" для ассемблера.
Т.е. JS алгоритм расписал так, будто переменные - регистры. И их можно только сдвигать, складывать и маскировать.
Причём, сейчас я учусь писать на
Verilog, а там и вовсе регистры двигать не надо - только проводники (Wire) смещаешь.
Данная тема ещё к тому, что 17 лет назад разрабатывал (в уме, тетради) множитель 32-битных чисел (без тактирования) на
ТТЛ-логике. Т.е. тупо, 32 штуки 32-битных сумматоров + 32 мультиплексора. Получилось что-то около 20 миллионов транзисторов (1 бит сумматора ~42 транзистора). Схема работает (в уме) без тактов: Подаёшь операнды X и Y, тут же снимаешь их произведение без стробирования.
Тогда я думал, что возвести в квадрат без умножения нельзя. А извлечь квадратный корень - тем более! Т.е. тактировать надо.
Если Вы понимаете, то Verilog-схему очень тяжело отлаживать. Легче расписать всё на Си или JS, отладить, отловить баги. А потом перевести на язык ассемблера i8080/Z80 или описать в Verilog.
Причём, средства Verilog позволяют какрас сдвиг регистров заменить на сдвиг проводников. Т.е. вместо 32 тактов можно воспроизвести 32 копии одного узла со смещением проводков на 1/2 бита. И схема уже без тактовой частоты выдаст квадратный корень целого числа.
Надеюсь, теперь более-менее ясно, зачем я на JS пишу то, что хочу написать на 8-битном процессоре? А потом перевести и в ПЛИС через Verilog. Просто, JS - самый доступный инструмент и я его достаточно знаю. Если бы я сразу бы взялся писать на Z80 - повесился бы.
Ведь в JS можно всё собирать в логи. Каждый шаг...
Вот...
А у меня эта функция извлечения корня хондрит. И не понимаю, почему...
P.S.: Алгоритм
извлечения квадратного корня, ассемблер помог, Спасибо за ссылку.
Правда, я не понимаю, как он работает. Т.е. да, в Visual Studio в отладке всё по шагам вижу, но не понимаю принцип. Свой (на JS выше) я написал сам и представляю, как он действует. А этот, готовый, вроде бы и похож на мой... Сдвиги, сумма и т.д.
Короче, надо копаться.