| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Практ. задачи связанные с Компьютерными Науками |
| Автор: flowex 16.10.2005, 10:59 |
| В данной теме мне бы хотелась рассмотреть некоторые задачи компьютерного моделирования основных математических концепций, на которых основаны большинство компьютерных систем.. Эту тему я создал для того, чтобы самому разобраться в некоторых моментах моделирования. Итак, начнём. Вот список задач, предлагаемых на обсуждение в этой теме на этот момент: I. 1. Эмулировать при помощи JScript работу процессора, работающего по Фон-Неймановской системе. В результате мы должны получить следующее: в файле data.txt должны содержаться основные команды процессора (go, ip и др.) и поступающие данные; хочется добиться того, чтобы в этом текстовом файле можно было бы реализовывать разные операции типа сложение, деление, нахождение НОД, вычисление факториала числа.. В роли процессора играет файл CPU.js Его память лучше также реализовать в текстовом документе. 2. a. Видоизменить процессор так, чтобы он соответствовал архитектуре RISC. b. Видоизменить процессор так, чтобы он соответствовал архитектуре CISC. II. Создать свой тип вещественных чисел. При поступлении на вход обычного десятичного числа, скрипт должен преобразовывать его в какой-то код (что-то типа стандарта IEEE) и хранить в памяти, откуда можно вызывать его и производить над ним определённые действия (прибавить к другому, поделить, умножить). Также должен быть возможен обратный перевод. Обязательно учесть,что сущечтвует Underfined, Infinity, NaN.. III. Создать кодер/декодер для кодировки текста по методу Хафмана. С уважением, flowex. |
| Автор: Sardar 16.10.2005, 14:33 | ||
| Сразу оговоримся, писать это лучше не на JScript. Фон-Нейманская архитектура, очень упрощённо, состоит из ALU; общей памяти для программ и данных; механизма выборки и декодирования инструкций. Работа с устройствами ввода/вывода не так важно, они могыт быть просто отражены в память(чипы 8051), или иметь отдельные инструкции(чипы eZ80, ARM7 etc). ALU вещь очень простая, в идеале не имеет состояний(не автомат), получает инструкцию и выполняет. Содержит регистры(чем больше, тем лучше) и может работать со стеком в памяти (ограниченный стек не в RAM можно найти в PIC'овских микроконтроллерах, лажа если честно). Через любой регистр можно обращаться к памяти, регистры можно комбинировать, в любой операции можно задействовать любые регистры - возьмём это условие для простоты, на практике создать такое железо очень сложно и дорого. Далее будем рассматривать примеры, поэтому оговорим некторые вещи и команды:
Если не брать во внимание наши навороченные регистры, то в остальном код такой же как x86 и подобных процах. В настоящем железе регистров обычно очень мало, все результаты постоянно в стек пишуться, что бы освободить регистр. Это не так существенно, если бы я писал "по настоящему" код бы разросся в полтора раза И так врубились как работает ALU, в простейшем случае это огроменный switch, хотя не советую так делать, работать будет очень медленно. В хорошем интерпретаторе имееться быстрая хешь-таблица с адресами обработчиков инструкций. Следующей проблемой будет декодер комманд. Ясно ведь что опкодов во много раз больше чем мнемоник их преставляющих в ассемблерном листинге. Например LD A, B и LD B, A это два разных опкода. Как ты будешь их кодировать - твоя свобода. В Гарвардской архитектуре часто все опкоды имеют один размер(напрример в PIC'ах так), естественно за счёт простоты декодера имеем кучу лишних потерь памяти. В х86 архитектуре(современный Intel/AMD/VIA комп) имеет, если не ошибаюсь, опкоды от 1 байта до 16 и больше. Открой даташит по любому микроконтроллеру, в конце всегда есть листинг опкодов, почитай, подумай, пиши. Различия между RISC и CISC архитектурами в общих словах сходяться на количестве инструкций. Например в PIC'e всего 32 инструкции(RISC процессор), а в eZ80L92 их более 150 (CISC процессор). CISC проц. удобней программировать на ассемблере, но сложней под него писать компиляторы, вернее не задействуешь всю его мощь коммманд. RISC процы чсто имеют огроменное количество регистров и оптимизированны под компиляторы (например ARM7 в AVR, Phillips etc процах), писать человеку под такой проц. довольно сложно. CISC в железном плане сложней и дороже RISC. Сейчас мало кто пишет на асме если есть C компилятор. Из всего сказанного выше можно сделать заключение: все новые адря процев RISC, все CISC это спроектированные ранее процы, выпускаемые с новой архитектурой Вещественные числа можно представить по IEEE(чего то там ещё Другой способ хранения числа - fixed point, где храниться только мантисса и знаковый бит. Такое число может хранить что угодно от 0 до 1. ИXМО не плохой способ повышения точности, но ядро проца должно сие число поддерживать На счёт Xафмана ты наверное пошутил |
| Автор: flowex 17.10.2005, 16:49 |
| Насчёт Хафмана я как раз не шутил, на этой неделе я должен представить готовый кодер, использующий хеш массив.. Но мне просто офигенно трудно во всём этом разобраться, поэтому и спршиваю! |
| Автор: Sardar 17.10.2005, 17:06 |
| А где ты раньше был? Неделя у тебя как раз уйдёт на написание архиватора на ассемблере, компилера под твой "процессор" ещё нет |
| Автор: flowex 18.10.2005, 16:28 |
| Да нет же, первоочередной задачей сейчас для меня является написание кодера по Хафману! Как мне сказали, в программе должен использоваться массив объектов.. ? |
| Автор: flowex 18.10.2005, 16:36 | ||
Я тут нашёл Хафмана на паскале, но мне от этого не луше: с трудом могу интерпретировать на JScript. Help!
|
| Автор: flowex 21.10.2005, 14:56 |
| Большое спасибо тебе, Sardar, за "процессор". У меня всё получилось, да вот и с Хафманом тут немного разобрался - почти написал (через объекты), а вот с типом float всё вожусь, - идей тьма, а толку никакого.. Так что вопрос: где бы достать IEEE на русском? |
| Автор: Sardar 21.10.2005, 15:49 | ||||
Классно, у меня бы на такой симулятор не менее двух месяцев ушло бы и не на JScript
Очень плохая тактика, доку нужно читать на инлише и никак иначе, вот это обязательно, там же и стандарты: http://www.validlab.com/goldberg/paper.pdf Полезно: http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html Иначе идём в яндекс и забиваем IEEE 754 |