簡體   English   中英

如何打印值列表 + 最大值/最小值

[英]How to print a list of values + max/min

我在看這個小人電腦問題:

  1. 用戶將首先輸入數據的大小,然后輸入單個數字。

  2. 我必須打印 ( OUT ) excatcly 輸入的內容,然后是數據值的最大值和最小值

例子:

  • 第一個輸入:2 // DATA 的數量
  • 第二個輸入:5 // 第一個數據
  • 第三個輸入:7 // 第二個數據
  • 輸出:2, 5, 7, 5(min), 7(max)

我必須在最后打印所有內容(當用戶完成輸入所有輸入時)

我的嘗試:

        IN         # Acc = number of values to read (N)
        STO M
LOOP    BRZ PRG     
        SUB ONE
        STO N      # N=N-1
        IN         # values                                                      
ST      STO PRG    # Store it in the program starting at PRG 
        LDA ST     # Get current store command (ST)
        ADD ONE    # add one to store command to increment memory location
        STO ST     # Update store command (ST)
        LDA N      # Put current value of N in accumulator
        BRZ PRINT
        BRP LOOP    # Continue loop - 12

#My problem is here 
PRINT   LDA M
        OUT
        LDA PRG    
        OUT
    
FIN     HLT

M       DAT 0
N       DAT 0      # Number of values to read
ONE     DAT 1      # Value 1
PRG     DAT 0      # We will store all of the values from this point onward

我試圖解決這個問題,但正如你所看到的,我只成功打印了第一個值。 我還將我的輸入保存在內存中,但是如何循環地址以獲取輸出值?

用於存儲輸入的自修改代碼模式也可用於輸出它。 您將擁有一條動態LDA PRG指令,而不是修改動態STO PRG LDA PRG指令。

您的嘗試未顯示用於確定最小值和最大值的代碼。 您可以在輸入循環或輸出循環期間收集此信息。

請考慮以下附加說明:

  • 用代碼初始化變量(不是常量),這樣如果 LMC 被重置(沒有完全重新組裝),它仍然可以正常工作。
  • 使用更具描述性的標簽和變量名稱。 STPRG是相當晦澀的名字...

所以它可以像下面那樣工作。 此代碼使用Wikipedia 中描述的 LMC 助記符。 所以 STA = STO 和 INP = IN。 您可以在此處運行該程序:

 #input: 5 3 9 6 2 4 INP # data size BRZ halt # nothing to do ; initialise (so program still runs correctly when reset) STA size LDA halt # =zero STA max LDA big STA min LDA staArray STA store LDA ldaArray STA load ; input loop LDA size SUB one nextInput STA counter INP # get data value store STA array # self-modified STA value SUB min BRP checkmax LDA value STA min checkmax LDA max SUB value BRP incInput LDA value STA max incInput LDA store ADD one STA store # modify code LDA counter SUB one BRP nextInput LDA size OUT # output input size SUB one outputLoop STA counter load LDA array # self-modified OUT # output data value LDA load ADD one STA load # modify code LDA counter SUB one BRP outputLoop LDA min OUT LDA max OUT halt HLT # constants one DAT 1 big DAT 999 staArray STA array ldaArray LDA array # variables size DAT counter DAT min DAT max DAT value DAT array DAT <script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.812/lmc.js"></script>

評論:

如果不會要求所有的輸入完成的輸出僅產生,你就不需要自修改代碼。 請參閱此答案,其中在處理輸入時生成輸出。

暫無
暫無

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

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