关于Power.asm的实现
Posted
技术标签:
【中文标题】关于Power.asm的实现【英文标题】:Regarding the implementation of Power.asm 【发布时间】:2021-12-15 01:39:12 【问题描述】:执行 Power 的汇编代码: • 实现一个汇编程序来计算一个的指数幂 给定数 n, P(n,e)。 o 例如。如果 n = 2 且 e = 5,则 P(n,e) 将 = 22222 = 32。 • 用户应将数字n 的值输入R0。即 RAM[0] 和 e 进入 R1 即 RAM [1]。 • 结果P(n,e) 应保存在RAM[2] 中。 • 特殊情况:在???? ??? 如果 e 为零,您的程序应在 RAM[0] 中存储 1 并结束程序。
一直在做一些关于 asm 的研究。对于 power.asm 上的这个特定问题,给出了一个示例答案,如下所示,虽然我不太明白,比如为什么在 M=0 和 @1 之前有一个 @2?有谁能帮我解释一下 power.asm 上的这段代码吗?谢谢。
@2
M=0
@1
D=M
@EXIT
D;JEQ
@POWER
D;JGT
(EXIT)
@1
D=A
@2
M=D
@0
M=D
@END
0;JMP
(POWER)
@0
D=M
@2
M=D // set up first iteration, power of 1
@END // if the first iteration is 1, no need to add anymore, since multiples of 1 is 1
D-1;JEQ
(LOOP)
@0
D=M
@3
M=D-1
@2
D=M
@4
M=D
@1
M=M-1
D=M
@MULT
D;JLT
@END
D;JEQ
(MULT)
@4
D=M
@2
M=D+M
@3
M=M-1
D=M
@MULT
D;JGT
@LOOP
D;JEQ
(END)
0;JMP
【问题讨论】:
【参考方案1】:你不妨复习一下Nand2Tetris课程的第5章,特别是A指令的操作。
简而言之:
@ 加载到 A(地址)寄存器中 M 代表 ram 位置 A 的值 D 是数据寄存器所以:
@2 将 2 加载到 A 寄存器中 M=0 将 0 存储到 RAM[2] @1 将 1 加载到 A 寄存器中 D=M 将 RAM[1] 加载到 D 寄存器中等等。
【讨论】:
以上是关于关于Power.asm的实现的主要内容,如果未能解决你的问题,请参考以下文章