Python to OAM Ассемблер

Я пытаюсь преобразовать свою программу на Python в язык ассемблера, но не знаю, как это сделать. Вот программа Python:

numberofscores=float(input("Please enter the number of test scores to be entered:"))
sumofscores = 0
count = 1
while count <= numberofscores :
      score1=float(input("Please enter the test score:"))
      sumofscores=sumofscores+score1
      count=count+1
average=sumofscores/numberofscores 
print average 

1 ответ

Хм, я никогда не слышал об этом учебном ресурсе под названием One Address Machine и это на веб-основе OAMulator ( 1, 2, 3), который поддерживает OAMPL (Язык программирования OAM) и (который компилируется) для OAM Assembly,

Так что я обманул..
Во-первых, я "проанализировал" ваш python-код (я тоже не знаю python) и перевел его на OAMPL:

PRINT "Please enter the number of test scores to be entered:"
READ numberofscores
sumofscores = 0
LOOP numberofscores
  PRINT "Please enter the test score:"
  READ testscore
  sumofscores = (+ sumofscores testscore)
END
PRINT "the answer is:"
PRINT (/ sumofscores numberofscores)
EXIT

Примечание: я не переводил ваш float потому что это должно быть int (хотя каждый счет может быть поплавком). После некоторого тестирования я обнаружил, что вход 2.5 в любом случае "читается" как float. Я также отказался от count переменная (так как LOOP инструкция работала без него) и average переменная (так как мне это не нужно)...

Нажатие кнопки compile Renders (это, вероятно, ваш ответ):

# Emitted by the OAMPL compiler
1.  BR  5   # branch to program block
# Variable storage allocation block
2. numberofscores,  NOOP    # variable numberofscores
3. sumofscores, NOOP    # variable sumofscores
4. testscore,   NOOP    # variable testscore
# Begin OAM program block
# OAMPL: PRINT "Please enter the number of test scores to be entered:"
5.  SET "Please enter the number of test scores to be entered:"
6.  STA stdout
# OAMPL: READ numberofscores
7.  LDA stdin
8.  STA numberofscores
# OAMPL: sumofscores = 0
9.  SET 0
10. STA sumofscores
# OAMPL: LOOP numberofscores
11. LDA numberofscores
12. BR L13
13. NOOP    # loop counter
# OAMPL: PRINT "Please enter the test score:"
14. SET "Please enter the test score:"
15. STA stdout
# OAMPL: READ testscore
16. LDA stdin
17. STA testscore
# OAMPL: sumofscores = (+ sumofscores testscore)
18. LDA testscore
19. STA 21
20. BR 22
21. NOOP    # intermediate value
22. LDA sumofscores
23. ADD 21
24. STA sumofscores
# OAMPL: END
25. LDA 13
26. DEC
27. L13,    STA 13
28. BRP 14
# OAMPL: PRINT "the answer is:"
29. SET "the answer is:"
30. STA stdout
# OAMPL: PRINT (/ sumofscores numberofscores)
31. LDA numberofscores
32. STA 34
33. BR 35
34. NOOP    # intermediate value
35. LDA sumofscores
36. DIV 34
37. STA stdout
# OAMPL: EXIT
38. HLT

Учитывая input (one per line):

3
71.4
33
21.6

Примечание: отвечает "3" на вопрос, который запрашивает количество тестов, а затем отвечает "71,4", "33" и "21,6" на вопрос, который запрашивает отдельные тестовые баллы. (это не интерактивный ввод, который отбросил меня на 15 минут... эта штука может серьезно помочь META II )

Если я execute вышеупомянутая сборка OAM (после компиляции!!) и подача ей вышеупомянутого ввода, тогда вывод выводит:

Please enter the number of test scores to be entered:
Please enter the test score:
Please enter the test score:
Please enter the test score:
the answer is:
42

... святой с.. ответ 42, это ответ на все...
(Это круто.. без полезной документации, угадывание языка программирования... это как-то крутой вопрос, на который я ответил)

Надеюсь это поможет!

PS: Пожалуйста, добавьте несколько ссылок на документацию / синтаксис этой сборки OAMPL и OAM в комментариях ниже!!! Онлайн-документы ( 1, 2, 3), которые я мог найти, не очень помогли (например, WRITE из примера 'hello world' не сработало.. и т. д., и я понятия не имею, какой синтаксис поддерживает OAMPL, кроме чит-листа, найденного здесь).

Другие вопросы по тегам