【问题标题】:HLA High Level Assembly Continuous LoopHLA 高级装配连续循环
【发布时间】:2013-03-29 21:49:35
【问题描述】:

问题想从输入循环遍历一个小数,直到剩下的唯一数字是一。但是,一旦第一个循环达到 0,它应该像这样从第一个数字负 1 再次循环,

Input decimal for loop: 4
Your loop result is: 4321 321 21 1

或者,

Input decimal for loop: 6
Your loop result is: 654321 54321 4321 321 21 1

我现在有,

DoWhileLoop:
DoWhileBody:
    stdout.put( " I => ", I );
    dec( I );
DoWhileTermination:
    cmp( I, 0 );
    jng DoWhileLoopDone;
    jmp DoWhileLoopBody;
DoWhileLoopDone:  

如果输入为 4 则打印,

I => 4 I => 3 I => 2 I => 1

我已尝试在内部嵌套 for 循环以获得所需的连续性,但我不知道如何在不使计算机崩溃的情况下增加它...帮助?

【问题讨论】:

  • 你肯定需要嵌套循环。外部循环应该减少你的计数器,你的内部循环应该使用一个临时计数器从外部计数器值倒数到一。伪代码:while (co > 0) ci = co; while (ci > 0) 输出 c1; c1--; endwhile 输出空间;合作——;结束。
  • 谢谢,我需要的是了解如何在变量之间传递值并习惯汇编中的“嵌套”循环语法。

标签: loops assembly count continuous hla


【解决方案1】:

解决了。我需要一个内部循环和第二个变量 (J) 来传输这个值。像这样(伪代码),

myWhileLoop:
myWhileLoopTermination:
    cmp( Y, 0 );
    jng WhileLoopDone;
myWhileLoopBody:

// Inner for loop goes in the body

    innerForLoop:
    InitializeinnerForLoop:        
    // Passing value of Y to Z
        mov( Y, Z );
    innerForLoopTerminationTest:
        cmp( Z, 0 );
        jng innerForLoopDone;
    innerForLoopBody:
        stdout.put( Z );
    innerForLoopDecrement:
        dec( Z );
        jmp innerForLoopTerminationTest;
    innerForLoopDone:

    dec( Y );
    jmp myWhileLoop;
myWhileLoopDone: 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多