Маленький человечек компьютер: просто отображает -201

LOOP    LDA COUNT
        SUB 1
        STA COUNT
        OUT 
        BRA PROGEND
        HLT
COUNT   DAT 11
ONE     DAT 1

Мне это кажется довольно простым и простым, и в моих знаниях по математике это должно работать: очевидно, что это не так.

Так что помогите пожалуйста

0 ответов

С этим кодом есть несколько проблем:

  • SUBне принимает буквальное число в качестве аргумента. Аргумент - это адрес, поэтому в вашем случае он должен читатьSUB ONE вместо того SUB 1.

  • Наклейка PROGENDне определен, поэтому этот код даже не должен ассемблироваться. Учитывая значение метки, метка должна быть определена в строке сHLT, но это не имеет смысла, поскольку HLT в любом случае следующая инструкция, BRA устаревший.

  • Наклейка LOOP никогда не упоминается.

  • Если BRA был предназначен для ссылки на LOOP label, то ваш код будет бесконечным циклом, так как BRAпрыгает безоговорочно. В вашем коде должна быть где-то инструкция условного перехода (либоBRP или BRZ), так что есть способ либо повторить цикл, либо завершить его.

Вот как это могло работать:

LOOP    LDA COUNT
        OUT 
        SUB ONE
        STA COUNT
        BRP LOOP
        HLT
COUNT   DAT 10
ONE     DAT 1

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

Другие вопросы по тегам