Как мне напечатать строку в одну строку в MARIE?

Я хочу напечатать набор букв в одной строке в MARIE. Я изменил код для печати Hello World и придумал:

    ORG     0       / implemented using "do while" loop
WHILE,      LOAD        STR_BASE    / load str_base into ac
    ADD     ITR         / add index to str_base
    STORE       INDEX       / store (str_base + index) into ac
    CLEAR               / set ac to zero
    ADDI        INDEX       / get the value at ADDR
    SKIPCOND    400     / SKIP if ADDR = 0 (or null char)
    JUMP        DO      / jump to DO
    JUMP        PRINT       / JUMP to END

DO, STORE       TEMP                / output value at ADDR
    LOAD        ITR         / load iterator into ac
    ADD         ONE         / increment iterator by one
    STORE       ITR         / store ac in iterator
    JUMP        WHILE       / jump to while

PRINT,      SUBT    ONE
            SKIPCOND  000
            JUMP     PR
            HALT

PR,     OUTPUT
        JUMP WHILE

ONE,        DEC     1
ITR,        DEC     0
INDEX,      HEX     0
STR_BASE,   HEX     12      / memory location of str
STR,        HEX     48      / H
    HEX     65      / E
    HEX     6C      / L
    HEX     6C      / L
    HEX     6F      / O
    HEX     0       / carriage return
    HEX     57      / W
    HEX     6F      / O
    HEX     72      / R
    HEX     6C      / L
    HEX     64      / D
    HEX     0       / NULL char

Моя программа останавливается после двух итераций. Я не могу понять, как напечатать набор символов в одной строке. Благодарю.

2 ответа

Ваше значение STR_BASE почти наверняка неверно. Исходя из того, что здесь, я бы сказал, что должно быть 18 вместо 12. Также вы можете либо удалить текущий нулевой символ, который находится между "HELLO" и "WORLD", и заменить его пробелом, либо просто удалить эту строку, в зависимости от на вашем предполагаемом выходе.

, имеется несколько проблем :

  1. сохраняет неправильное значение HEX.
  2. ORG 0.
  3. Символ null и возврат каретки имеют одинаковое шестнадцатеричное значение. Это приведет к остановке вашего цикла после обнаружения первого нулевого значения.
  4. Ваш PRINT ничего не печатает. Вывод — это правильное ключевое слово для печати символа.

Расчет адреса

  1. Игнорируя все пустые строки и строки только для комментариев, начните отсчет с 1 и найдите номер строки метки.
  2. Вычтите 1 из номера строки и преобразуйте результат в HEX.
  3. Поэтому адрес г.STRметка в вашем коде. Таким образом, следует хранить в .

Измененный кодекс

Комментарии говорят сами за себя. Значение, хранящееся вSTR_BASEдля моего кода16(вместо18потому что в моем коде меньше инструкций).

      ORG 000 

WHILE,      LOAD        STR_BASE    
            ADD         ITR         
            STORE       INDEX       / index = str_base + itr
            LOADI       INDEX       / get the value at INDEX
            SKIPCOND    400         / check value at INDEX
            JUMP        DO          / else restart loop
            HALT                    / if null char, end program

DO,     Output                  / output value at ADDR
        LOAD        ITR        
        ADD         ONE         
        STORE       ITR         / itr += 1
        JUMP        WHILE       / jump to while

        
ONE,        DEC     1
ITR,        DEC     0
INDEX,      HEX     0
STR_BASE,   HEX     10      / memory location of str
STR,        HEX     48      / H
            HEX     65      / E
            HEX     6C      / L
            HEX     6C      / L
            HEX     6F      / O
            HEX     20      / space
            HEX     57      / W
            HEX     6F      / O
            HEX     72      / R
            HEX     6C      / L
            HEX     64      / D
            HEX     0       / NULL char

В В вашем коде, который был протестирован на Marie.jsMarie.js с установленным режимом выводаUnicode, выходHello World.

Вы можете использовать этот сайт , чтобы найти HEX-значения различных символов Юникода.

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