簡體   English   中英

將一個程序改為 output 兩個數字升序排列而不是降序排列

[英]Change a program to output two numbers in Ascending order instead of descending

這是下降。 我將如何切換到升序,以便當 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

你只是把邏輯倒過來了。 您正在檢查 A - B 是否為正(即 A 較大),如果是,則輸出 A 然后 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的情況下,你會在第一個條件完成后跳轉到第二個條件。

如前所述, BRP BTOS將在 A 減去 B 為正數時分支,換句話說,當 A 不小於 B 時。所以在這種情況下,你應該首先 output B。一旦 output 完成,程序應該停止:第一個塊中缺少此停止。

同樣遺憾的是:

  • 您不使用第二個輸入之后的累加器值,因為它已經保存了 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM