簡體   English   中英

如何在小人電腦中檢查數字是奇數還是偶數

[英]How to check if a number is odd or even in little man computer

我需要幫助使我的程序生成正確的 output。

我目前正在使用此代碼:

        INP
        STA NUMBER
        SUB DIVISOR
        BRP VERIFY
        BRA CHECK
LOOP    STA NUMBER
        LDA RESULT
        ADD ONE
        STA RESULT
VERIFY  LDA NUMBER
        SUB DIVISOR
        BRP LOOP
        LDA RESULT
ODD     LDA ONE
        STA RESULT
EVEN    LDA 60
        STA RESULT 
CHECK   LDA RESULT
        BRP ODD
        BRZ EVEN
        OUT
        HLT
NUMBER  DAT
DIVISOR DAT 2
ONE     DAT 1
RESULT  DAT 0

當我在小人計算機模擬器上運行上面的代碼時,它只是循環和循環並打印 no output。我想做的是將輸入的數字分成兩部分並檢查它是否有余數。 如果有余數,則為奇數,否則為偶數。 我知道代碼有錯誤,但我無法確定問題出在哪里,也許你可以幫我解決。 提前致謝!

無限循環發生在BRP ODD處。 請注意,當累加器為零時, BRP也會分支。 所以它是一個“非負分支”指令。 當在ODD處繼續執行時,它會下降到EVEN ,這使得ODD處的代碼變得無關緊要。 EVEN時,累加器加載為零,因此BRP將再次分支……無限。

還缺少對 0 的檢查:當輸入為零時,根本不應該執行減法。

沒問題,但是引用郵箱 60 可以更好地替換為引用 label,例如ZERO

該代碼包含實際上不需要的邏輯:

您已經包含了計算的代碼,因為每次您從NUMBER中減去DIVISOR時,代碼都會將ONE添加到RESULT中。 然而, RESULT最終被ONE或 0(地址 60)覆蓋,因此商沒有計算出來。 由於您只想 output 輸入是奇數還是偶數,因此您應該從代碼中刪除商計算。

還要避免代碼重復。 您目前在兩個不同的地方執行SUB 這應該不是必需的,因為兩種情況下的邏輯應該相同。

這是簡化為基礎的代碼:

 #input: 11 INP STA NUMBER LOOP BRZ OUTPUT # remainder is zero, so output a zero SUB DIVISOR BRP LOOP LDA ONE # when result is negative: input was odd OUTPUT OUT HLT NUMBER DAT DIVISOR DAT 2 ONE DAT 1 ZERO DAT 0 <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