在 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>