Десятичный ассемблер, или программа изменяющая свой код - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.167 из 5
Похожие ответы