【问题标题】:Regarding the implementation of Power.asm关于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
    

【问题讨论】:

    标签: assembly nand2tetris


    【解决方案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 寄存器中

    等等。

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 2015-10-01
      相关资源
      最近更新 更多