Форум программистов, компьютерный форум CyberForum.ru

Эмулятор трёхадресной машины. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Составить программу, вычисляющую с точностью eps сумму заданного ряда http://www.cyberforum.ru/cpp-beginners/thread187073.html
Задание: Составить программу, вычисляющую с точностью eps сумму заданного ряда. Примечание: вычислить сумму ряда с точностью eps значит завершить суммирование членов ряда тогда, когда очередной член ряда окажется меньше eps по абсолютной величине. Сверить с контрольными значениями. Результаты вывести на экран монитора.
C++ Запись в текстовый файл #include <vcl.h> #pragma hdrstop #include <conio.h> #include <iostream.h> #include <stdio.h> #pragma argsused #include <fstream.h> void main() { FILE*p1; http://www.cyberforum.ru/cpp-beginners/thread187069.html
Вычисление собственных значений и собственных векторов матрицы C++
Вычисление собственных значений и собственных векторов матрицы. Метод скалярных произведений Матрицу задаём произвольно! а дальше по заданию!! помогите с прогой!!
C++ Написать класс, описывающий дерево
Хочется понять, как написать простейший класс, описывающий дерево. Компилирует данный код, но пишет пишет "ошибка сегментирования" #include <iostream> using namespace std; class Tree {
C++ как поменять слова местами в массиве типа char? http://www.cyberforum.ru/cpp-beginners/thread187025.html
нужно поменять введенный текс в массиве типа char так, чтобы менялись местами два соседних слова.то есть первое со вторым .третье с четвертым и так далее...
C++ Дружественная функция У меня есть класс, подсчитывающий количество равносторонних треугольников в заданном множестве точек на плоскости. Подскажите, пожалуйста, почему не работает дружественная функция setK? (Ошибок компилятор не выдаёт, но функция не работает) #include <iostream.h> #include <math.h> int const n=5; class Triangle {private: friend void setK (Triangle,int); int x; подробнее

Показать сообщение отдельно
Alexander_Bah
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 5

Эмулятор трёхадресной машины. - C++

06.11.2010, 16:48. Просмотров 971. Ответов 13
Метки (Все метки)

В общем, имеется задача "Эмулятор трёхадресной машины".

Каждая инструкция имеет следующий формат: код инструкции (1 байт), операнд 1 (1 байт), операнд 2 (1 байт), операнд 3 (1 байт), при этом каждый операнд задает адрес параметра в оперативной памяти машины. Далее значение по адресу заданному операндом 1 будем обозначать [ОП1]. Если предполагается числовой параметр инструкции, то используется знаковая форма записи параметра (в дополнительном коде), таким образом каждый числовой параметр представляет собой целое число в интервале [-128, 127].

Поддерживаются следующие инструкции:
0 — останов работы машины, параметры игнорируются,
1 — сложение, [ОП1] складывается с [ОП2], результат помещается в ячейку, заданную операндом 3, IP увеличивается на 4,
2 — умножение, [ОП1] переменожается с [ОП2], результат помещается в ячейку, заданную операндом 3, IP увеличивается на 4,
3 — условный переход, если [ОП1] < [ОП2], IP присваивается значение [ОП3] (иначе IP увеличивается на 4).

Машина отслеживает как минимум следующие ошибочные ситуации (в Вашей программе, возможно, будут отслеживаться и еще какие-то ситуации):
код инструкции не поддерживается машиной,
операнды инструкции размещаются за пределами оперативной памяти.

Приведенная программа (tam.c) реализует скелет эмулятора описанной машины. Необходимо дополнить программу, при этом имитация работы с внешним носителем должна быть реализована следующим образом. Код и данные считываются из файла, заданного первым параметром, если он не задан, или файл невозможно открыть, то из стандартного потока ввода. Программа должна контролировать неверный ввод (менее 256 байт). По завершению работы образ памяти выводится в файл, заданный вторым параметром программы, если он не задан — на стандартный вывод.


Есть первый файл, в котором сначала идёт операнд (то есть код того, что нужно делать, потом подряд два адреса двух чисел, с которыми нужно что-то сделать, потом адрес куда нужно записать. Вот пример входного файла:

00 | 01 E0 E1 E2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
A0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
C0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E0 | 23 3F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


А вот - выходного:


00 | 01 E0 E1 E2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0
20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0
40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0
60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0
80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0
A0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0
C0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
E0 | 23 3F 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Как сложить два двузначных шестнадцатеричных числа я ещё могу понять, хотя и с трудом.
Но возникает вопрос: как обращаться к числам, лежащим по какому-то адресу, заданному вторым и третьим параметрами в строке 00 (в данном случае это E0 и E1), а также как заносить результат в ячейку по адресу, заданному четвёртым параметром в строке 00 (в данном случае это E2)?

Буду очень благодарен всем, кто поможет. Прошу сильно не пинать, если что не так, просто с таким делом столкнулся впервые, первый курс, а же такое И сдать надо в среду.

P.S. Если кто хочет полностью ознакомиться с заданием, то оно тут, называется "Задача 4":
http://cs.karelia.ru/~aborod/inf/2010/schedule.php.ru
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru