Программа для суммирования входных чисел не работает

#little-man-computer

#компьютер маленького человека

Вопрос:

Я пытаюсь создать программу, которая сначала принимает n входных данных от пользователя, а затем вычисляет сумму этих чисел. Затем я хочу, чтобы программа печатала, является ли сумма четным или нечетным числом.

Например, если пользователь вводит 3, ему / ей придется ввести 3 числа (например, 3, 2, 5): тогда программа вычислит их сумму (3 2 5 ) и выведите, является ли ответ (10) четным или нечетнымчисло.

Я думал, что правильно закодировал ее, но она не запускается в симуляторе LMC, может кто-нибудь, пожалуйста, помочь мне найти ошибку?

Мой код:

       INP
      STA b
ab    INP
      STA a
      LDA total
      ADD a
      STA total
      STA count
      LDA b
      SUB one
      STA b
      BRZ number
      BRP loop
bc    LDA count
      SUB two
      STA count
      BRZ evennumber
      BRP number
      LDA total
      OUT
      LDA space
      OTC
      OTC
      LDA o
      OTC
      LDA d
      OTC
      OTC
      LDA e
      OTC
      HLT
cd    LDA total
      OUT
      LDA space
      OTC
      OTC
      LDA p
      OTC
      LDA A
      OTC
      LDA r
      OTC
      HLT
a     DAT 0
b     DAT 0
total DAT 0
one   DAT 1
two   DAT 2
count DAT 0
o     DAT 111
space DAT 32
d     DAT 100
e     DAT 101
p     DAT 112
A     DAT 97
r     DAT 114
  

Комментарии:

1. OTC не является инструкцией LMC. Какой симулятор вы используете?

2. Мне сказали, что я должен использовать OTC, но я тоже об этом не слышал, должен ли я использовать OUT вместо этого?

3. Если вам так сказали, то я полагаю, что все в порядке. Я полагаю, что он выводит данные в виде символа.

4. да, я думаю, но даже если я изменю его на OUT, код все равно не будет работать так, как я хочу, но, похоже, я не могу найти проблему..

5. Не удаляйте вопросы, когда люди потратили время на их ответы. Теперь я не хочу тратить время на ваш вопрос, так как вы можете просто решить удалить его снова.

Ответ №1:

Основная проблема в вашем коде заключается в несоответствии меток.

С одной стороны, вы определили следующие метки:

  • ab
  • до н. э.
  • компакт- диск

… но вы ссылались на следующие метки:

  • петля
  • число
  • четное число

Как следствие , ваш код недействителен … он не будет анализировать.

Второй набор меток имеет больше смысла, в то время как «ab», «bc», «cd» бессмысленны: они не помогают читателю вашего кода понять, о чем они. Так что согласуйте свой код со вторым набором.

Кроме того, не определено, чувствителен ли LMC к регистру, поэтому использование имени переменной a и другого A имени не обязательно будет поддерживаться. Вместо этого дайте значимые имена. Первое a — это фактически число, которое вы вводите и которое нужно добавить к сумме, так что, возможно, назовите его summand вместо a . Затем A можно было бы вызвать другой a , поскольку он действительно представляет букву «а». b также бессмысленно. Он представляет количество ожидаемых входных данных, так что, возможно, вызовите его inputs .

Принимая это во внимание, ваш код будет выглядеть следующим образом:

 #input: 2 4 5
        INP
        STA inputs
loop    INP
        STA summand
        LDA total
        ADD summand
        STA total
        STA count
        LDA inputs
        SUB one
        STA inputs
        BRZ number
        BRP loop

number  LDA count
        SUB two
        STA count
        BRZ evennumber
        BRP number
        LDA total
        OUT
        LDA space
        OTC
        OTC
        LDA o
        OTC
        LDA d
        OTC
        OTC
        LDA e
        OTC
        HLT

evennumber LDA total
        OUT
        LDA space
        OTC
        OTC
        LDA p
        OTC
        LDA a
        OTC
        LDA r
        OTC
        HLT

summand DAT 0
inputs  DAT 0
total   DAT 0
one     DAT 1
two     DAT 2
count   DAT 0
o       DAT 111
space   DAT 32
d       DAT 100
e       DAT 101
p       DAT 112
a       DAT 97
r       DAT 114

<script src="https://cdn.jsdelivr.net/gh/trincot/lmc@v0.72/lmc.js"></script>