[英]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.