nandgame中的asm编程PUSH_VALUE、ADD、SUB、NEG、AND、OR

参考: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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值