在 LMC 中打印给定数字的所有数字
Print all digits of a given number in LMC
我需要在 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>
我需要在 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>