Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8

Десятичный ассемблер, или программа изменяющая свой код

18.10.2014, 15:25. Показов 1555. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Меня очень интересует программирование в десятичных кодах.
Наконец я придумал как это сделать. Можно считать, что я
придумал новый язык. Это проще понять на простой задаче.
Итак
Требуется вычислить 1+2+3+ ... +20000
Вы видите перед собой программный код десятичного
Ассемблера. Первая колонка это номер строки. Она нужна
человеку, а не программе. Во второй и третьей колонках
стоят адреса (номера строк). В последней колонке стоят
Коды Команд. Обозначим строку так N A B C
N-номер строки, А и В - адреса, С - код команды
Пример.
100- очистка строки с адресом А
101- выполняется операция А=А+В (здесь косвенная адресация)
Иными словами переменная по адресу А увеличивается на
величину переменной по адресу В
001- инкремент переменной по адресу А
002- декремент А
777- условный косвенный переход if A<>0 then B
888- распечатка результата
999- конец программы. Стоп.
001 011 000 100
002 011 009 101
003 009 000 001
004 010 000 002
005 010 002 777
006 011 000 888
007 000 000 999
008 000 000 000
009 000 000 001
010 000 020 000
011 000 000 000

На VB написан код, который сначала заданный файл преобразует
в файл прямого (произвольного) доступа и потом считает.
Я проверил. Все верно.

Visual Basic
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
Option Explicit
 
Private imja As String
Dim i%, nS As Long
Dim A%, B%, C%
Dim aA&, bB&, cC&
Dim sS As String
 
Private Sub cmdD_Click()
    imja = txtT.Text
    Open imja + ".das" For Input As #1
    Open "14.das" For Random As #2 Len = 4
    i = 0
    Do
        i = i + 1
        Line Input #1, sS
        sS = Right(sS, 11)
        nS = Val(sS)
        Put #2, i, nS
    Loop Until EOF(1)
    Close #1
' + + + + + + + + + + + + + + + + + + + + + + + +
    i = 1
    Do
        Get #2, i, nS
        A = nS \ 1000000
        B = nS \ 1000 Mod 1000
        C = nS Mod 1000
        
        Select Case C
            Case 100
                Put #2, A, 0
                i = i + 1
            Case 101
                Get #2, A, aA
                Get #2, B, bB
                aA = aA + bB
                Put #2, A, aA
                i = i + 1
            Case 1
                Get #2, A, aA
                aA = aA + 1
                Put #2, A, aA
                i = i + 1
            Case 2
                Get #2, A, aA
                aA = aA - 1
                Put #2, A, aA
                i = i + 1
            Case 777
                Get #2, A, aA
                Get #2, B, bB
                If aA <> 0 Then i = B Else i = i + 1
            Case 888
                Get #2, A, aA
                txtT.Text = Str(aA)
                i = i + 1
            Case 999
                Exit Do
        End Select
    Loop
    Close #2
End Sub
2
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2014, 15:25
Ответы с готовыми решениями:

Квин-программа, или программа, печатающая свой исходный текст
Задаю этот вопрос под влиянием этой темы и предлагаю решение: Sub Kvin() Dim A(1 To 13) As String X = Chr$(65) + Chr$(40) ...

Программа, сохраняющая свой исходный код
Я решал задачу, в которой программа должна хранить свой исходный код. Как это лучше сделать?? 1. Сначала я подумал, может задействовать...

как исправить ошибку? (программа должна перевести двоичный код в десятичный)
#include &lt;iostream.h&gt; #include &lt;string.h&gt; int atoi(char *s) { int chislo = 0; int razryad = 1; int len = strlen(s); ...

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
18.10.2014, 21:11
Проект можно развить в двух направлениях:

1) три команды - маловато. Добавить команд - получится байт-код. Но почему нужно помнить десятичные коды, не лучше ли ввести мнемоники типа mov, add, inc, dec, jmp ?

2) напротив, попытаться выразить все нужное через минимальный набор команд (см. замечательный язык BrainFuck)
1
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
18.10.2014, 21:57
В VB6 реализовано нечто подобное под названием P-Code. Это промежуточный машинонезависимый код, которой выполняется виртуальной машиной VB6. Размер опкода переменный от 1 до 2-х байт.
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
19.10.2014, 09:35  [ТС]
Catstail
Вы подали неплохую мысль, заменить числовые
коды команд на буквенные. Не мудрствуя лукаво,
я заменил 3-значные коды на 3-значные аббревиатуры
Например
Оператор goto - got
Оператор print - pri
Остальное и так понятно ...
Программа работает правильно.

001 011 000 cls
002 011 009 add
003 009 000 inc
004 010 000 dec
005 010 002 got
006 011 000 pri
007 000 000 end
008 000 000 000
009 000 000 001
010 000 020 000
011 000 000 000

Visual Basic
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
Option Explicit
 
Private imja As String
Dim i%, nS As Long
Dim A%, B%, C%
Dim aA&, bB&, cC&
Dim sS As String, s3 As String
 
Private Sub cmdD_Click()
    imja = txtT.Text
    Open imja + ".das" For Input As #1
    Open "14.das" For Random As #2 Len = 4
    i = 0
    Do
        i = i + 1
        Line Input #1, sS
        sS = Right(sS, 11)
        s3 = Right(sS, 3)
        If s3 = "cls" Then Mid(sS, 9, 3) = "100"
        If s3 = "add" Then Mid(sS, 9, 3) = "101"
        If s3 = "inc" Then Mid(sS, 9, 3) = "001"
        If s3 = "dec" Then Mid(sS, 9, 3) = "002"
        If s3 = "got" Then Mid(sS, 9, 3) = "777"
        If s3 = "pri" Then Mid(sS, 9, 3) = "888"
        If s3 = "end" Then Mid(sS, 9, 3) = "999"
        nS = Val(sS)
        Put #2, i, nS
    Loop Until EOF(1)
    Close #1
' + + + + + + + + + + + + + + + + + + + + + + + +
    i = 1
    Do
        Get #2, i, nS
        A = nS \ 1000000
        B = nS \ 1000 Mod 1000
        C = nS Mod 1000
        
        Select Case C
            Case 100
                Put #2, A, 0
                i = i + 1
            Case 101
                Get #2, A, aA
                Get #2, B, bB
                aA = aA + bB
                Put #2, A, aA
                i = i + 1
            Case 1
                Get #2, A, aA
                aA = aA + 1
                Put #2, A, aA
                i = i + 1
            Case 2
                Get #2, A, aA
                aA = aA - 1
                Put #2, A, aA
                i = i + 1
            Case 777
                Get #2, A, aA
                Get #2, B, bB
                If aA <> 0 Then i = B Else i = i + 1
            Case 888
                Get #2, A, aA
                txtT.Text = Str(aA)
                i = i + 1
            Case 999
                Exit Do
        End Select
    Loop
    Close #2
End Sub
Дополнение.
Я уже подумал о том, чтобы ввести в программу
регистры (например сумматор) и стек. Это кардинально
увеличит скорость работы. Но я хотел здесь сказать о другом.
Кто-то подумает, что овчинка выделки не стоит. Программа
Максимум 999 строк. Ошибаетесь. Программа имеет 999 999 999
строк. Вы забыли о косвенной адресации. А так как каждая строка
4 байта, то можно получить программный файл размером
почти 4 ГБ. Если этого мало, то можно добавить ещё файлы.
Мало не покажется.
Ну а какой прок от этой программы? - спросит тот, кто во всем
ищет выгоду. Хорошо. Например вам нужно чтобы в папке А
Ваши файлы были защищены. Можно сделать так. В папке Б
вы будете хранить оригиналы своих файлов. А программа
будет раз в минуту проверять не изменились ли они. Если
изменились. То она переписывает их заново.
Самое главное.
Эта программа (она может изменяться) - живое существо.
Она может производить сама себя. Она может собирать
информацию. Она может вести диалог с человеком. Иными
словами она может эволюционировать. Даже господь Бог
не сумел создать человека. Но он поступил умнее. Он создал
среду в которой было возможно возникновение жизни и ее
эволюция до человека. И эта программа тоже может
эволюционировать (дайте срок) ...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
19.10.2014, 09:55
Цитата Сообщение от geh Посмотреть сообщение
Вы подали неплохую мысль,
- могу подать еще одну: написать язык высокого уровня (с циклами, выражениями и т.п.), транслирующийся в твой код.
1
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
19.10.2014, 10:49  [ТС]
Catstail,
Спасибо!
Но я уже этим занимаюсь ...
Вы будете первым, кто его увидит ...
Сначала это будет очень простой вариант ...
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2014, 10:49
Помогаю со студенческими работами здесь

Машинный код или Ассемблер
Известно, что программист раньше должен был помнить, различные команды машинного кода. Но возникает вопрос, правда ли то что программисты...

перевести код на С++ или написать свой код
Задано предложение. Составить программу вывода на экран слов, в которых первая и последняя буквы совпадают. program Project1; ...

Безопасность. wordpress или свой код?
Всем добрый день! Сначала немного предыстории. Я программирую довольно давно как любитель, делаю сайты друзьям и есть два своих...

Преобразовать двоичный код в двоично-десятичный код (Intel 8051)
Прочитать с порта Р0 один байт двоичного кода 8-4-2-1, превратить его в двоично-десятичный код и выдать полученную информацию в порт Р1-Р2,...

Будьте осторожны, или Тестируйте свой код по максимуму
Сегодня столкнулся с такой проблемой, даже не проблемой, а казусом. Написанный мною скрипт удачно используюется на производстве. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru