Форум программистов, компьютерный форум 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; подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
06.11.2010, 18:18     Эмулятор трёхадресной машины.
В общем так.
У нас имеется блок памяти
C
1
unsigned char memory[MEMSIZE];
Информация в этот блок памяти очень легко заносится обычным чтением из файла.
C
1
fread(memory, sizeof(unsigned char), MEMSIZE, pfile);
потом делаем функцию, которая выполняет операцию, относительно текущего смещения:
C
1
2
3
4
5
6
7
switch(memory[offset])
{
    case 0: // останов машины
    case 1: memory[offset + 3] = memory[offset + 1] + memory[offset + 2]; break; // сложение
    case 2: memory[offset + 3] = memory[offset + 1] * memory[offset + 2]; break; // умножение
    case 3: // условный переход
}
Как я понял загадочный IP и есть offset, о котором я говорю, то есть текущая позиция в памяти.

Тут надо сказать, что, если в файле вся инструкция (4 байта) записана именно 32-х битным числом, то могут быть ньюансы на разных машинах, я сейчас о порядке байт big-endian и little-endian.
Поэтому так просто (fread) заполнить память может не получиться.
Чтобы избежать этого можно воспользоваться небольшой модификацией функции заполнения памяти - то есть надо будет перевернуть слово в нужном порядке.
Если же инструкция записана именно побайтово, то ничего делать не надо будет.
 
Текущее время: 01:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru