如何打印值列表 + max/min
How to print a list of values + max/min
我正在看这个小人电脑问题:
用户将首先输入数据的大小,然后是单个数字。
我必须准确地打印(OUT
)输入的内容,然后是数据值的最大值和最小值
示例:
- 第一个输入:2 // 数据个数
- 第二个输入:5 // 第一个数据
- 第三个输入:7 // 第二个数据
- 输出:2、5、7、5(最小)、7(最大)
我必须在最后打印所有内容(当用户完成输入所有输入时)
我的尝试:
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 被重置(没有完全重新组装),它仍然可以正常工作。
- 使用更具描述性的标签和变量名。
ST
和 PRG
是相当晦涩的名字...
所以它可以像下面这样工作。此代码使用 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>
备注:
如果不要求仅在所有输入完成后产生输出,则不需要自修改代码。请参阅 在处理输入时生成输出的位置。
我正在看这个小人电脑问题:
用户将首先输入数据的大小,然后是单个数字。
我必须准确地打印(
OUT
)输入的内容,然后是数据值的最大值和最小值
示例:
- 第一个输入:2 // 数据个数
- 第二个输入:5 // 第一个数据
- 第三个输入:7 // 第二个数据
- 输出:2、5、7、5(最小)、7(最大)
我必须在最后打印所有内容(当用户完成输入所有输入时)
我的尝试:
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 被重置(没有完全重新组装),它仍然可以正常工作。
- 使用更具描述性的标签和变量名。
ST
和PRG
是相当晦涩的名字...
所以它可以像下面这样工作。此代码使用 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>
备注:
如果不要求仅在所有输入完成后产生输出,则不需要自修改代码。请参阅