|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.11.2007, 22:49 | #1 |
Регистрация: 19.11.2007
Сообщений: 3
|
Задача по паскалю. 3 уровень.
Разработать виртуальный процессор для арифметических операций над целыми числами.
Система команд - арифметические операции над содержимым регистров, ввод и вывод значений регистров, условный и безусловный переход к заданной метке. Команды записываются в мнемонической форме с указанием имен трех регистров, в двух из которых содержатся операнды, а в третий записывается результат. Дать описание системы команд и программу для вычисления значений суммы квадратов первых n натуральных чисел. И как такое решить? Кто знает, помогите пожалуйста! |
20.11.2007, 07:42 | #2 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Я не понял а в чём сложности?
Операции какие: +,-,*,/ и всё? этож обычный калькулятор получается (со специфичным синтаксисом) |
20.11.2007, 08:12 | #3 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
20.11.2007, 09:58 | #4 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
Например:
if нажимаем "+" then goto 1; или case "нажимаем" of +: сложение; *:умножение; |
20.11.2007, 11:20 | #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 |