Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221

Программа для хранения данных в ОЗУ

12.09.2021, 20:32. Показов 847. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сегодня решил задуматься над тем как хранить в моём языке необходимые данные. Сейчас сделал небольшую программу, которая работает как интерпретатор. В ней можно выделять память при помощи ram locate Кол-во_памяти B. Также можно выделять не только байты, но и килобайты (KB), мегабайты (MB) и даже гигабайты (GB). Также есть 4 регистра, которые служат как доп. ячейки памяти и как буфера между ОЗУ и командами-обработчиками. Пока что все что можно делать в данном языке: Выводить на консоль значение регистров, складывать числа и сохранять их. Цель этой программы - научиться управлять памятью в моём языке.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int count, char* values[])
{
    ifstream input(values[1]);
 
    int RA = 0;
    int RB = 0;
    int RC = 0;
    int RD = 0;
 
    unsigned long long bytes = 0;
    int* RAM = new int[bytes];
 
    string code;
inf_loop:
    input >> code;
    if (input)
    {
        if (code == "ram")
        {
            input >> code;
            if (code == "locate")
            {
                delete[] RAM;
                unsigned long long units = 0;
                input >> units >> code;
                if (code == "B")
                {
                    bytes = units;
                    bytes /= 4;
                }
                if (code == "KB")
                {
                    bytes = units;
                    bytes *= 1024;
                    bytes /= 4;
                }
                if (code == "MB")
                {
                    bytes = units;
                    bytes *= 1024;
                    bytes *= 1024;
                    bytes /= 4;
                }
                if (code == "GB")
                {
                    bytes = units;
                    bytes *= 1024;
                    bytes *= 1024;
                    bytes *= 1024;
                    bytes /= 4;
                }
                RAM = new int[bytes];
            }
            if (code == "save")
            {
                int index = 0;
                
                input >> code >> hex >> index >> dec;
                if (code == "RA")
                {
                    RAM[index] = RA;
                }
                if (code == "RB")
                {
                    RAM[index] = RB;
                }
                if (code == "RC")
                {
                    RAM[index] = RC;
                }
                if (code == "RD")
                {
                    RAM[index] = RD;
                }
            }
            if (code == "load")
            {
                int index = 0;
 
                input >> code >> hex >> index >> dec;
                if (code == "RA")
                {
                    RA = RAM[index];
                }
                if (code == "RB")
                {
                    RB = RAM[index];
                }
                if (code == "RC")
                {
                    RC = RAM[index];
                }
                if (code == "RD")
                {
                    RD = RAM[index];
                }
            }
        }
        if (code == "print")
        {
            input >> code;
            if (code == "RA")
            {
                cout << RA << endl;
            }
            if (code == "RB")
            {
                cout << RB << endl;
            }
            if (code == "RC")
            {
                cout << RC << endl;
            }
            if (code == "RD")
            {
                cout << RD << endl;
            }
        }
        if (code == "pause")
        {
            system("pause");
        }
        if (code == "op")
        {
            int arg1 = 0, arg2 = 0; int result = 0;
            input >> code;
            if (code == "add")
            {
                input >> arg1 >> arg2;
                result = arg1 + arg2;
            }
            if (code == "sub")
            {
                input >> arg1 >> arg2;
                result = arg1 - arg2;
            }
            if (code == "mul")
            {
                input >> arg1 >> arg2;
                result = arg1 * arg2;
            }
            if (code == "dvs")
            {
                input >> arg1 >> arg2;
                result = arg1 / arg2;
            }
            if (code == "mdvs")
            {
                input >> arg1 >> arg2;
                result = arg1 % arg2;
            }
            if (code == "xor")
            {
                input >> arg1 >> arg2;
                result = arg1 ^ arg2;
            }
            if (code == "and")
            {
                input >> arg1 >> arg2;
                result = arg1 & arg2;
            }
            if (code == "or")
            {
                input >> arg1 >> arg2;
                result = arg1 | arg2;
            }
            if (code == "not")
            {
                input >> arg1;
                result = !arg1;
            }
 
            input >> code;
            if (code == "RA")
            {
                RA = 0;
                RA = result;
            }
            if (code == "RB")
            {
                RB = 0;
                RB = result;
            }
            if (code == "RC")
            {
                RC = 0;
                RC = result;
            }
            if (code == "RD")
            {
                RD = 0;
                RD = result;
            }
        }
        goto inf_loop;
    }
}
Внимание!!! Чтобы данная программа работала нужно: 1. Скомпилировать её под архитектуру х64. 2. создать любой формат файла и написать там необходимый код. Потом при помощи функции "Открыть с помощью" выбрать Exe интерпретатора.

Пример программы на моём языке:
Code
1
2
3
4
5
6
7
8
9
10
ram locate 200 B
op add 100 200 RA
print RA
pause
ram save RA 0x5
ram load RA 0x5
print RA
op add 100 100 RA
print RA
pause

Пишите свои отзывы насчёт такого мини-языка программирования
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2021, 20:32
Ответы с готовыми решениями:

Программа для хранения данных о погоде
Помогите составить программу для хранения данных о погоде. Дата, полученная из компонента MonthCalendar и температура, введенная в...

Посоветуйте простой способ хранения данных в озу
Спасибо заранее! Суть - скрипт daemon.php крутится бесконечно вне вебсераера (cron), отслеживая некоторые события. На основе этих...

Создать запись для хранения. Для хранения данных использовать стек. Для группировки данных использовать очередь
Решил выложить свои лабораторные работы 1-10 за первый курс, первого семестра (01.09.2019-10.01.2020). Искренне надеюсь, что они...

4
 Аватар для Super-Hacker
342 / 114 / 37
Регистрация: 26.11.2019
Сообщений: 735
12.09.2021, 20:45
Слишком медленно и неудобно расширять

Возможно стоило бы сделать две вещи
1 распарсить код на байтовые токены (которые вы сейчас ифами проверяете)
2 (опционально) заменить работу с токенами на генерацию вектора с классами, которые бы содержали виртуальные методы

Добавлено через 47 секунд
inf_loop

Это кстати
C++
1
for(;;)
Добавлено через 3 минуты
А вообще, кому нужна это память. Доверьте всё сиплюсплюсу, да и пихайте в вектор объектов шарейд птр'ы на std::variant

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
using Value = std::variant<
    nullptr, // Null
    bool, // Bool
    char32_t, // Char
    std::uint64_t, // Int
    std::double_t, // Float
    std::u32string, // String
    std::vector<Value> // Array
>
Что ещё нужно для счастья
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
13.09.2021, 03:59
Aleksey_1024,
Я так понял твой язык и ассемблерные вставки хочет поддерживать(в предыдущих реализациях встречалось). Работа с памятью на плечах программиста. Это навроде языков C C++. Есть еще C--. Вроде проект безхозный сейчас. Вот возьмись.

Добавлено через 5 минут
А в общем, все высокоуровневые языки избавляют программиста от заморочек с работой с памятью. И в общем они прАвы. ИМХО.
0
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221
13.09.2021, 06:12  [ТС]
YUEN HOIFEF, этот язык не сможет поддерживать ассемблере вставки так как это интерпретируемый язык будет, и тем более я не знаю ассемблер, поэтому начал делать свой собственный ассемблерно-подобный язык. А ещё я хочу там сделать лёгкое управление памятью, потом буду дорабатывать команды и буду пытаться написать такой-же интерпретатор, только на этом языке.

Потом его я переделаю в компилятор, чтобы из этого кода создавался байт-код, и потом интерпретировался.

Если уж и дальше пойдёт, то попробую написать эту прогу на ассемблере. (но наверное не буду)
0
 Аватар для YUEN HOIFEF
252 / 185 / 47
Регистрация: 31.01.2021
Сообщений: 934
13.09.2021, 07:33
Aleksey_1024,
Нормал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2021, 07:33
Помогаю со студенческими работами здесь

Программа для записи данных о нагрузке отдельных или всех процессов на процессор и ОЗУ
Понадобилась программа для записи данных о нагрузке всех процессов на процессор и ОЗУ. Предполагается, что информация будет преподноситься...

Программа обработки данных с использованием ОЗУ
При написании программы использовать все методы адресации с целью сравнительного анализа и выбора оптимального варианта. Можете проверить...

Программа для хранения исходников
Появилось желание - собрать все свои исходники в одну кучу. Примерно хочу следующее- 1. Есть в БД архив с программой 2. Нужно научить...

Программа для хранения компромата
Все менеджеры паролей, которые я видел, умеют хранить только текстовую информацию - пароли, никнеймы, УРЛы. А мне нужно что-то вроде этого,...

Программа для хранения паролей
1) Как захешировать введенную строку для взятия ее из файла в дальнейшем? 2) Какой алгоритм защиты лучше применить? Заранее спасибо ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru