Как мне напечатать строку в одну строку в 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", и заменить его пробелом, либо просто удалить эту строку, в зависимости от на вашем предполагаемом выходе.
, имеется несколько проблем :
- сохраняет неправильное значение HEX.
-
ORG 0
. - Символ null и возврат каретки имеют одинаковое шестнадцатеричное значение. Это приведет к остановке вашего цикла после обнаружения первого нулевого значения.
- Ваш PRINT ничего не печатает. Вывод — это правильное ключевое слово для печати символа.
Расчет адреса
- Игнорируя все пустые строки и строки только для комментариев, начните отсчет с 1 и найдите номер строки метки.
- Вычтите 1 из номера строки и преобразуйте результат в HEX.
- Поэтому адрес г.
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-значения различных символов Юникода.