我需要在 LMC 中打印给定数字的所有数字。我尝试了这个代码,它给了我最后一个数字,但我不知道如何继续使用其他数字。
INP
L0 STA R0
SUB R1
BRP L0
LDA R0
OUT
HLT
R0 DAT 000
R1 DAT 010
我需要在 LMC 中打印给定数字的所有数字。我尝试了这个代码,它给了我最后一个数字,但我不知道如何继续使用其他数字。
INP
L0 STA R0
SUB R1
BRP L0
LDA R0
OUT
HLT
R0 DAT 000
R1 DAT 010
您拥有的代码将输出最低有效位。要生成其他两位数字(知道 LMC 仅限于 3 位数字),首先重复减去 100 并计算您可以执行多少次:这将是输出的第一个数字。然后反复减10,数……最后输出余数。
对于重复减法,您需要一个循环。您可以考虑使用自我修改代码,以便重用相同的循环来减去 100,然后再减去 10。但是您也可以为这两种情况分别编写一个单独的循环:
#input:321
INP
STA input
LDA zero ; prepare for finding first digit
BRA enter1
loop1 STA input
LDA digit ; increment digit
ADD one
enter1 STA digit
LDA input
SUB hundred ; output number of 100s
BRP loop1
LDA digit
OUT
LDA zero ; prepare for finding second digit
BRA enter2
loop2 STA input
LDA digit ; increment digit
ADD one
enter2 STA digit
LDA input
SUB ten
BRP loop2
LDA digit ; output number of 10s
OUT
LDA input ; output remainder
OUT
zero HLT
one DAT 001
ten DAT 010
hundred DAT 100
input DAT
digit DAT
<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.80/lmc.js"></script>