如何打印值列表 + max/min

How to print a list of values + max/min

我正在看这个小人电脑问题:

  1. 用户将首先输入数据的大小,然后是单个数字。

  2. 我必须准确地打印(OUT)输入的内容,然后是数据值的最大值和最小值

示例:

我必须在最后打印所有内容(当用户完成输入所有输入时)

我的尝试:

        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 指令。

您的尝试没有显示确定最小值和最大值的代码。您可以在输入循环或输出循环期间收集此信息。

请考虑以下附加说明:

  • 用代码初始化变量(不是常量),这样如果 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>

备注:

如果不要求仅在所有输入完成后产生输出,则不需要自修改代码。请参阅 在处理输入时生成输出的位置。