我無法寫一個生成奇數交替的跡象從1開始OAM彙編語言澄清
我寫了一個程序,但它不工作,我不知道爲什麼一個序列的OAM方案。因爲這是一種罕見的語言,如果任何人都可以幫助和解釋我做錯了什麼,那將會很棒。
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
我無法寫一個生成奇數交替的跡象從1開始OAM彙編語言澄清
我寫了一個程序,但它不工作,我不知道爲什麼一個序列的OAM方案。因爲這是一種罕見的語言,如果任何人都可以幫助和解釋我做錯了什麼,那將會很棒。
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
注其他讀者想知道到底這是怎麼一回事:
一個基於Web的One Address Machine
編譯/彙編/仿真器稱爲OAMulator
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
存儲它。此外,在初始化變量x
和y
後,您還沒有從「程序塊」分支(BR
)開始。我還沒有真正看到你的代碼是如何將備用標誌...
我先寫OAMPL
代碼被騙:
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
:
# 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
已場內輸入50
(回答最大值問題)和命中execute
,我得到以下結果output
:
enter max number:
1
-3
5
-7
9
-11
13
-15
17
-19
21
-23
25
-27
29
希望這有助於!
這個問題很不清楚。序列應該有多久?什麼是'X'和'Y'應該用於(我猜''X'是一個循環計數器,'Y'是當前的序列元素,但是這在任何地方都沒有解釋過)?生成一個序列意味着使用循環,那麼爲什麼代碼中沒有分支指令? 「SET」後面緊跟着一個「LDA」是什麼意思? 'STA X'緊跟着'LDA X'後面是什麼意思? – Michael