我正在写一个程序,将评估下面的语句,但我必须做一个堆栈组织的计算机。这意味着只有pop和push可以访问内存。
当我使用这个程序作为我的程序的样本时,我该怎么做呢?:
Load A
Store Stack0
JnS Push
Load B
Store Stack0
JnS Push
JnS PopS
Load C
Store Stack0
JnS Push
Load D
Store Stack0
JnS Push
Load E
Store Stack0
JnS Push
JnS PopM
Load F
Store Stack0
JnS Push
JnS PopS
JnS PopM
JnS PopA
Load G
Store Stack0
JnS Push
Load H
Store Stack0
JnS Push
Load K
Store Stack0
JnS Push
JnS PopM
JnS PopA
JnS PopD
JnS Pop
Halt
Push, Hex 0
Load Stack4
Store Stack5
Load Stack3
Store Stack4
Load Stack2
Store Stack3
Load Stack1
Store Stack2
Load Stack0
Store Stack1
JumpI Push
Pop, Hex 0
Load Stack1
Store Stack0
Load Stack2
Store Stack1
Load Stack3
Store Stack2
Load Stack4
Store Stack3
Load Stack5
Store Stack4
Load Zero
Store Stack5
Load Stack0
JumpI Pop
PopA, Hex 0
JnS Pop
Add Stack1
Store Stack1
JumpI PopA
PopS, Hex 0
JnS Pop
Load Stack1
Subt Stack0
Store Stack1
JumpI PopS
PopM, Hex 0
JnS Pop
Store Calc1
Store Calc3
JnS Pop
Subt One
Store Calc2
Skipcond 400
JnS Mult
Store Stack0
JnS Push
JumpI PopM
Mult, Hex 0
LoopM, Load Calc3
Add Calc1
Store Calc3
Load Calc2
Subt One
Store Calc2
Skipcond 400
Jump LoopM
Load Calc3
JumpI Mult
PopD, Hex 0
JnS Pop
Store Calc2
Load Zero
Store Calc3
JnS Pop
Store Calc1
Load Calc2
Skipcond 400
JnS Divs
Store Stack0
Jns Push
JumpI PopD
Divs, Hex 0
LoopD, Load Calc1
Subt Calc2
Store Calc1
Load Calc3
Add One
Store Calc3
Load Calc1
Skipcond 800
Jump EndD
Jump LoopD
EndD, Load Calc3
JumpI Divs
One, Dec 1
Zero, Dec 0
Calc1, Dec 0
Calc2, Dec 0
Calc3, Dec 0
A, Dec 9
B, Dec 8
C, Dec 7
D, Dec 6
E, Dec 5
F, Dec 4
G, Dec 3
H, Dec 2
K, Dec 1
Stack0, Dec 0
Stack1, Dec 0
Stack2, Dec 0
Stack3, Dec 0
Stack4, Dec 0
Stack5, Dec 0
**任何帮助将不胜感激。我是新来的玛丽,并已收到旁边没有任何帮助,到目前为止。Thank you!=)
1条答案
按热度按时间soat7uwm1#
栈和利用栈的子程序可以用间接指令在玛丽中实现。
考虑
在玛丽模拟器中,一旦你运行上面的程序,并在内存窗口中一直向下滚动到最后一行,你可以看到0001在最低行的最右边位置,内存位置FFF(由于MARIE有4k个16位字,最后一个字的位置是0x 1000 - 1 = FFF)。很明显,任何内存位置都可以被写入。
现在,程序员所要做的就是创建和管理OFFSET,并将OFFSET与STACKBASE结合起来,有效地创建STACKPOINTER。
玛丽的JNS/JUMPI指令允许我们实现子程序,因此我们可以在STACKPOINTER上创建PUSH和POP子程序,以减少/增加OFFSET和STOREI或LOADI。