assembly 更改程序以按升序而不是降序输出两个数字

iszxjhcz  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(143)

这是降序的。我该如何切换到升序,以便当LMC输出数字时,它以升序显示。

INP
        STA A 
        INP
        STA B
        LDA A
        SUB B
        BRP BTOS
        BRA BTOS2
BTOS    LDA A
        OUT
        LDA B
        OUT
BTOS2   LDA B
        OUT
        LDA A
        OUT
A       DAT
B       DAT
1l5u6lss

1l5u6lss1#

你只是逻辑颠倒了。你检查A - B是否为正(即A大于A),如果是,你输出A,然后输出B,B是递减的。你还需要在BTOS分支结束后暂停程序,否则在B大于A的情况下,你会在第一个条件完成后跳到第二个条件

INP
        STA A 
        INP
        STA B
        LDA A
        SUB B
        BRP BTOS
        BRA BTOS2
BTOS    LDA B
        OUT
        LDA A
        OUT
        HLT
BTOS2   LDA A
        OUT
        LDA B
        OUT
        HLT
A       DAT
B       DAT

您还需要在BTOS分支结束后暂停程序,否则,在B大于A的情况下,您将在第一个条件完成后跳转到第二个条件。

xam8gpfp

xam8gpfp2#

如前所述,当A减去B为正时,即A不小于B时,BRP BTOS将分支。因此,在这种情况下,您应该首先输出B。一旦输出完成,程序应停止:在第一块中没有这种停止。
同样遗憾的是:

  • 您不使用第二个输入之后的累加器值,因为它已经保存了B的值,您可以立即继续从B中减去A。
  • 有两个分支指令时,它可以只做一个。
  • 标签有神秘的名字--我不知道BTOS在这里代表什么。

下面是我的建议:

#input: 35 12
        INP
        STA A 
        INP
        STA B
        SUB A
        BRP first_a
        LDA B
        OUT
        LDA A
        OUT
        HLT
first_a LDA A
        OUT
        LDA B
        OUT
        HLT
A       DAT
B       DAT

<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.816/lmc.js"></script>

相关问题