我正在嘗試在 LMC 中創建一個程式,它檢查一個數字是否均勻地分成另一個(例如 10/2),下面的程式我可以根據需要進行除法和停止程式
INP
STA DIVIDEND
INP
STA DIVISOR
LOOP LDA DIVIDEND
BRZ END
SUB DIVISOR
STA DIVIDEND
LDA ANSWER
ADD INC
STA ANSWER
BRP LOOP
END LDA ANSWER
OUT
SUB ANSWER
STA ANSWER
HLT
DIVIDEND DAT 0
DIVISOR DAT 0
ANSWER DAT 0
INC DAT 1
我需要在同一個程式中找到一種方法,讓 LMC 認識到用戶輸入的數字不會均勻劃分(例如 10/3),在這種情況下,它是輸出零并要求兩個新數字。我曾嘗試使用另一個回圈來執行此操作,但 if 似乎總是與我用于減法的回圈沖突。我已經嘗試了我能想到的任何東西,但不知道如何使 LMC 滿足這個要求,同時還保留了在輸入均勻分配時停止程式的要求
uj5u.com熱心網友回復:
您需要檢查SUB DIVISOR導致負溢位。如果發生這種情況,您知道被除數不是除數的整數倍,并且可以輸出零并重復該程式。
由于此時答案資料可能已經非零,因此您還應該重置它。這是您在 之前的最后兩個指令中所做的HLT,但是當您要停止時,這當然沒有多大用處。在程式開始時執行這樣的重置是一種很好的做法,因為 LMC 有一個用戶控制元件可以隨時重新啟動程式,然后你要確保你真的從一個干凈的狀態開始。
這是您更新的程式。你可以在這里運行它:
start LDA zero # reset
STA ANSWER
INP
STA DIVIDEND
INP
STA DIVISOR
LOOP LDA DIVIDEND
BRZ END
SUB DIVISOR
BRP continue # No negative overflow
LDA zero # Tell user there is a remainder
OUT
BRA start # ... and ask for new inputs
continue STA DIVIDEND
LDA ANSWER
ADD INC
STA ANSWER
BRA LOOP
END LDA ANSWER
OUT
HLT
DIVIDEND DAT
DIVISOR DAT
ANSWER DAT
INC DAT 1
zero DAT 0
<script src="https://cdn.jsdelivr.net/gh/trincot/[email protected]/lmc.js"></script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524673.html
標籤:部件小人电脑
