首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAM汇编语言澄清

OAM汇编语言澄清
EN

Stack Overflow用户
提问于 2013-03-30 01:24:14
回答 1查看 750关注 0票数 2

我在编写一个OAM程序时遇到了困难,该程序生成一系列奇数,从1开始有交替的符号。

我已经写了一个程序,但它不工作,我不知道为什么。因为这是一种罕见的语言,如果有人能帮我解释我做错了什么,那就太好了。

代码语言:javascript
复制
X,NOOP
Y,NOOP 
LDA stdin
loop, SET 1
LDA Y
STA 0
LDA X
DEC
STA X #X = X - 1
LDA X #ACC = X
EN

回答 1

Stack Overflow用户

发布于 2013-07-12 07:21:21

请注意,其他想知道这到底是怎么回事的读者:

一个基于webbased的One Address Machine编译器/汇编程序/模拟器,名为 is here

您需要一个OAM program that generates a sequence of odd numbers with alternating signs starting with 1 (没有指定最大值)。

我将解释您需要以下输出:1, -3, 5, -7, 9, -11, 13, -15 etc...

我假设您的LDA stdin是为了要求最大值,但您似乎没有将它存储在STA中。另外,在初始化变量BRy之后,没有从分支( x )开始到“程序块”。我也不知道你的代码会如何替代.

我第一次编写OAMPL代码时作弊了:

代码语言:javascript
复制
n = 1                       #Init number n as 1
PRINT "enter max number:"   #Ask for max number
READ i                      #Read that number from input, storing it as i
LOOP (/ i 2)                #Calculate number of iterations, passing that to LOOP
  IF t                      #If t (toggle)
    t = 0                   #Toggle falsy
    PRINT (- 0 n)           #Print 0-counter
  ELSE
    t = 1                   #Toggle truthy
    PRINT n                 #Print counter
  ENDIF
  n = (+ n 2)               #Increase counter by 2
END
EXIT                        #Exit program

,它将编译成以下OAM Assembly

代码语言:javascript
复制
# Emitted by the OAMPL compiler
1.  BR  5   # branch to program block
# Variable storage allocation block
2. n,   NOOP    # variable n
3. i,   NOOP    # variable i
4. t,   NOOP    # variable t
# Begin OAM program block
# OAMPL: n = 1
5.  SET 1
6.  STA n
# OAMPL: PRINT "enter max number:"
7.  SET "enter max number:"
8.  STA stdout
# OAMPL: READ i
9.  LDA stdin
10. STA i
# OAMPL: LOOP (/ i 2)
11. SET 2
12. STA 14
13. BR 15
14. NOOP    # intermediate value
15. LDA i
16. DIV 14
17. BR L18
18. NOOP    # loop counter
# OAMPL: IF t
19. LDA t
20. BRZ I20
# OAMPL: t = 0
21. SET 0
22. STA t
# OAMPL: PRINT (- 0 n)
23. LDA n
24. STA 26
25. BR 27
26. NOOP    # intermediate value
27. SET 0
28. SUB 26
29. STA stdout
# OAMPL: ELSE
30. BR I30
31. I20,    NOOP
# OAMPL: t = 1
32. SET 1
33. STA t
# OAMPL: PRINT n
34. LDA n
35. STA stdout
# OAMPL: ENDIF
36. I30,    NOOP
# OAMPL: n = (+ n 2)
37. SET 2
38. STA 40
39. BR 41
40. NOOP    # intermediate value
41. LDA n
42. ADD 40
43. STA n
# OAMPL: END
44. LDA 18
45. DEC
46. L18,    STA 18
47. BRP 19
# OAMPL: EXIT
48. HLT

注意:您也可以省略注释(# comment)和前导(行)编号。

如果在input-field中输入-field(回答最大值问题)并按execute (编译后!),将得到以下output结果:

代码语言:javascript
复制
enter max number:
1
-3
5
-7
9
-11
13
-15
17
-19
21
-23
25
-27
29

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15713872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档