Десятичный ассемблер, или программа изменяющая свой код - 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 написан код, который сначала заданный файл преобразует в файл прямого (произвольного) доступа и потом считает. Я проверил. Все верно.
Листинг программы
  1. Option Explicit
  2. Private imja As String
  3. Dim i%, nS As Long
  4. Dim A%, B%, C%
  5. Dim aA&, bB&, cC&
  6. Dim sS As String
  7. Private Sub cmdD_Click()
  8. imja = txtT.Text
  9. Open imja + ".das" For Input As #1
  10. Open "14.das" For Random As #2 Len = 4
  11. i = 0
  12. Do
  13. i = i + 1
  14. Line Input #1, sS
  15. sS = Right(sS, 11)
  16. nS = Val(sS)
  17. Put #2, i, nS
  18. Loop Until EOF(1)
  19. Close #1
  20. ' + + + + + + + + + + + + + + + + + + + + + + + +
  21. i = 1
  22. Do
  23. Get #2, i, nS
  24. A = nS \ 1000000
  25. B = nS \ 1000 Mod 1000
  26. C = nS Mod 1000
  27. Select Case C
  28. Case 100
  29. Put #2, A, 0
  30. i = i + 1
  31. Case 101
  32. Get #2, A, aA
  33. Get #2, B, bB
  34. aA = aA + bB
  35. Put #2, A, aA
  36. i = i + 1
  37. Case 1
  38. Get #2, A, aA
  39. aA = aA + 1
  40. Put #2, A, aA
  41. i = i + 1
  42. Case 2
  43. Get #2, A, aA
  44. aA = aA - 1
  45. Put #2, A, aA
  46. i = i + 1
  47. Case 777
  48. Get #2, A, aA
  49. Get #2, B, bB
  50. If aA <> 0 Then i = B Else i = i + 1
  51. Case 888
  52. Get #2, A, aA
  53. txtT.Text = Str(aA)
  54. i = i + 1
  55. Case 999
  56. Exit Do
  57. End Select
  58. Loop
  59. Close #2
  60. End Sub

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

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private imja As String
  4. Dim i%, nS As Long
  5. Dim A%, B%, C%
  6. Dim aA&, bB&, cC&
  7. Dim sS As String, s3 As String
  8.  
  9. Private Sub cmdD_Click()
  10.     imja = txtT.Text
  11.     Open imja + ".das" For Input As #1
  12.     Open "14.das" For Random As #2 Len = 4
  13.     i = 0
  14.     Do
  15.         i = i + 1
  16.         Line Input #1, sS
  17.         sS = Right(sS, 11)
  18.         s3 = Right(sS, 3)
  19.         If s3 = "cls" Then Mid(sS, 9, 3) = "100"
  20.         If s3 = "add" Then Mid(sS, 9, 3) = "101"
  21.         If s3 = "inc" Then Mid(sS, 9, 3) = "001"
  22.         If s3 = "dec" Then Mid(sS, 9, 3) = "002"
  23.         If s3 = "got" Then Mid(sS, 9, 3) = "777"
  24.         If s3 = "pri" Then Mid(sS, 9, 3) = "888"
  25.         If s3 = "end" Then Mid(sS, 9, 3) = "999"
  26.         nS = Val(sS)
  27.         Put #2, i, nS
  28.     Loop Until EOF(1)
  29.     Close #1
  30. ' + + + + + + + + + + + + + + + + + + + + + + + +
  31.    i = 1
  32.     Do
  33.         Get #2, i, nS
  34.         A = nS \ 1000000
  35.         B = nS \ 1000 Mod 1000
  36.         C = nS Mod 1000
  37.        
  38.         Select Case C
  39.             Case 100
  40.                 Put #2, A, 0
  41.                 i = i + 1
  42.             Case 101
  43.                 Get #2, A, aA
  44.                 Get #2, B, bB
  45.                 aA = aA + bB
  46.                 Put #2, A, aA
  47.                 i = i + 1
  48.             Case 1
  49.                 Get #2, A, aA
  50.                 aA = aA + 1
  51.                 Put #2, A, aA
  52.                 i = i + 1
  53.             Case 2
  54.                 Get #2, A, aA
  55.                 aA = aA - 1
  56.                 Put #2, A, aA
  57.                 i = i + 1
  58.             Case 777
  59.                 Get #2, A, aA
  60.                 Get #2, B, bB
  61.                 If aA <> 0 Then i = B Else i = i + 1
  62.             Case 888
  63.                 Get #2, A, aA
  64.                 txtT.Text = Str(aA)
  65.                 i = i + 1
  66.             Case 999
  67.                 Exit Do
  68.         End Select
  69.     Loop
  70.     Close #2
  71. End Sub

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


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

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

6   голосов , оценка 3.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы