首页 > 解决方案 > 在 LMC 中打印给定数字的所有数字

问题描述

我需要在 LMC 中打印给定数字的所有数字。我尝试了这个代码,它给了我最后一个数字,但我不知道如何继续使用其他数字。

    INP
L0  STA R0
    SUB R1
    BRP L0
    LDA R0
    OUT
    HLT
R0  DAT 000
R1  DAT 010

标签: assemblydigitslittle-man-computer

解决方案


您拥有的代码将输出最低有效位。要生成其他两位数字(知道 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>


推荐阅读