参考:https://zhuanlan.zhihu.com/p/613188641
PUSH_VALUE题目说明及答案
将值推送到堆栈上。
提示:该值将作为宏的替换值提供,但在测试时,您可以在“测试工具”框中设置该值。
现在,我们引入了一个使用占位符的宏。
宏关键字 PUSH_VALUE 后必须跟随一个数字,例如 PUSH_VALUE 42。
当使用该宏时,宏代码中的占位符关键字 value 将被指定的数字(即 42)替换。
DEFINE SP 0
A = value
D = A
A = SP
A = *A
*A = D
A = SP
*A = *A + 1
ADD题目说明及答案
从堆栈中弹出两个值,将它们相加,并将和推送到堆栈上。
示例:
在操作之前: 操作之后:
堆栈: 堆栈:
2 4
2
利用堆栈,我们可以编写不依赖于特定寄存器的宏算术运算(加法、减法等)。相反,操作会从堆栈中弹出操作数,并将操作的结果推送回堆栈。
这种方法使我们能够构建任意复杂的计算,因为我们不再受限于可用的寄存器。
POP_D
POP_A
D = D + A
PUSH_D
SUB题目说明及答案
减法
从堆栈中弹出两个值,将第一个值减去第二个值,然后将结果推送回堆栈。
示例:
在操作之前: 操作之后:
堆栈: 堆栈:
5 2
3
POP_D
POP_A
D = A - D
PUSH_D
NEG题目说明及答案
取反
对堆栈顶部的值进行取反。
这是算术取反,所以2的取反是-2。
示例:
在操作之前:在操作之后:
堆栈: 堆栈:
7 -7
POP_D
D = -D
PUSH_D
AND题目说明及答案
从堆栈中弹出两个值,执行按位与操作,并将结果推回堆栈。
POP_D
POP_A
D = D & A
PUSH_D
OR题目说明及答案
从堆栈中弹出两个值,执行按位或操作,并将结果推回堆栈。
POP_D
POP_A
D = D | A
PUSH_D