![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 19.11.2007
Сообщений: 3
|
![]()
Разработать виртуальный процессор для арифметических операций над целыми числами.
Система команд - арифметические операции над содержимым регистров, ввод и вывод значений регистров, условный и безусловный переход к заданной метке. Команды записываются в мнемонической форме с указанием имен трех регистров, в двух из которых содержатся операнды, а в третий записывается результат. Дать описание системы команд и программу для вычисления значений суммы квадратов первых n натуральных чисел. И как такое решить? ![]() |
![]() |
![]() |
![]() |
#2 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]()
Я не понял а в чём сложности?
Операции какие: +,-,*,/ и всё? этож обычный калькулятор получается (со специфичным синтаксисом) |
![]() |
![]() |
![]() |
#3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
![]()
Например:
if нажимаем "+" then goto 1; или case "нажимаем" of +: сложение; *:умножение; |
![]() |
![]() |
![]() |
#5 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
Хы круто! Давно хотел виртуальную машину написать ))
Короче цель - интерпритатор для асм-подобной программы типа Код:
Короче типа так: - За основу (как всегда =) стоит взять TParser, если интерпритатор на делфи или билдере будет - Определить тип для "машинного кода", например Код:
Код:
add A,B,C Operator | op1 | op2 | op3 поставив в соответствие каждой команде число, например так in = 01h out = 02h add = 03h sub = 04h mul = 05h div = 06h ... cmp = 1Eh ... jne = 20h .. А=1 В=2 С=3 получим Код:
Для самих меток поле Command пусть будет 0 В операторе сравнения cmp - если аргумент - регистр A B или C, то пусть хранится в op2, а если число - то в op3 (хотя х/з, может это и не нужно будет) ---------- Потом останется обьявить 3 переменные для регистров и зацикленно гонять по массиву, изменяя стартовый адрес в соответствии с командами перехода и выполнять нужные действия, сравнения уже силами делфи вот этот кусок быдет выглядеть так .loop sub C, A, B cmp B, 0 jne .loop (memory[x] = command/op1/op2/op3) memory[1] = 0/1/0/0 operator=0, т.е. это метка, ничего не выполнять, 1-адрес текущей комманды memory[2] = 04h/03h/01h/02h memory[3] = 1Eh/02h/00h/00h - если op2=0, то аргумент - число, а не регистр, оно в op3 memory[4] = 20h/1/00h/00h 1 - адрес перехода А, ну и конец программы конечно отметить как-то, например оператором END = FF/0/0/0 Вотъ. На первый взгляд сложно, но это тока если чужую писанину читать ![]() Алгоритм приблизительно такой, конечно выделять под каждую комманду 13 байт это "вы зажрались", но поскольку больших программ не планируется, то проще работать с коммандами фиксированного размера Надеюсь кто-то дочитает аж вот до -> ЭТОГО <- места ![]() * А, да, ремарк: по такому алгоритму действия add/sub/mul/div выполняются для РЕГИСТРОВ, т.е. вместо add A, 44, B (B=A+44) придется писать in C,44 add A, C, B И соответственно делать проверку при разборе исходного текста, а то интерпритатор "не поймёт" когда ему передают опкод регистра, а когда просто число. И нужно будет сделать минимум 2 прохода по исходнику, т.к. могут быть прыжки вперёд - надо ж знать адреса. Капец задачка ) Прям "Почувствуй себя Приваловым!" ![]()
пыщь
Последний раз редактировалось JTG; 20.11.2007 в 14:05. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача по паскалю | poluprogramist | Помощь студентам | 2 | 21.05.2008 21:44 |
Задача по Паскалю. 1 уровень сложности. | Сергей1 | Помощь студентам | 2 | 19.11.2007 22:45 |
Текущий уровень звука ! | XuMuK | Win Api | 3 | 11.10.2007 10:25 |
Уровень значимости Assembler'а сегодня | [Kaiser] | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 15 | 07.09.2007 09:05 |