Десятичный ассемблер, или программа изменяющая свой код - VB
Формулировка задачи:
Меня очень интересует программирование в десятичных кодах.
Наконец я придумал как это сделать. Можно считать, что я
придумал новый язык. Это проще понять на простой задаче.
Итак
Требуется вычислить 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 написан код, который сначала заданный файл преобразует
в файл прямого (произвольного) доступа и потом считает.
Я проверил. Все верно.
Решение задачи: «Десятичный ассемблер, или программа изменяющая свой код»
textual
Листинг программы
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д