簡體   English   中英

與小人電腦混淆; 簡單除法程序

[英]Confusion with Little Man Computer; simple division program

        INP
        STA A
        INP
        STA B
        LDA 99
        STA C
loop    LDA A
        SUB B
        STA A
        LDA C
        ADD Y
        STA C
        LDA A
        BRP loop
        LDA C
        OUT
        HLT
A       DAT
B       DAT
C       DAT 
Y       DAT 1

你好,我是小人電腦的新手,這個數除程序應該在 A 輸入為 24 和 B 為 4 時返回 6,但是當我運行它時,它輸出 7,這是沒有意義的。 我知道它在 while 循環的開始和結束時將 A 加載到累加器中,所以我沒有將它包含在跟蹤表中。 我不是一個可靠的用戶,但它讓我使用圖片鏈接

這里有一些問題:

  • 當累加器為零時, BRP也會分支,這解釋了為什么您的測試用例得到 7 而不是 6。

  • 最好將零加載到累加器中,而不是從硬編碼的 99 中完成。由於HLT為零,您可以將該行指定為 label zero並使用LDA zero而不是LDA 99

  • 代替 A、B、C 和 Y 使用一些更具描述性的名稱,例如numeratordivisorquotientone

  • BRP的工作方式在不同的 LMC 仿真器上可能會有所不同。 為了確保最大的兼容性,請在SUB之后立即執行BRP ,因為在不同的仿真器上累加器中的結果可能會有所不同,並且有些可能會在執行LDA時重置負標志,使BRP始終在LDA之后分支。 通過將BRP放在SUB之后,您還可以解決第一個問題。

這是一個可運行的更正版本。 它與您的示例輸入一起加載,但小 GUI 允許您使用其他輸入進行測試:

 #input: 24 4 INP STA numerator INP STA divisor LDA zero loop STA quotient LDA numerator SUB divisor BRP continue LDA quotient OUT zero HLT continue STA numerator LDA quotient ADD one BRA loop numerator DAT divisor DAT quotient DAT one DAT 1 <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