Сборка LC3 — как посчитать длину строки

Я пытаюсь создать программу на сборке LC3, которая подсчитывает длину строки следующим образом:

  1. Все данные уже хранятся где-то в памяти.
  2. Есть переменная, в которой хранится адрес первого элемента строки. (Заранее извиняюсь за незнание ассемблера, если эта штука не называется "переменная".)
  3. Вывод (длина строки) должен храниться в R0.

Я сделал попытку, но результаты неутешительны. Вот мой код:

 .ORIG X3000
AND R0,R0,#0   ;R0 has the output(lenght)
LEA R1,ZERO    ;R1 always has an adress of an element of the string

LOOP LDR R2,R1,#0   ;R2 has the contex of that adress
     BRZ FINISH     ;if R2=0,then we have found end of string
     ADD R0,R0,#1   ;if not,increase the lenght by 1.
     ADD R1,R1,#1   ;increase the adress by one
     BRznp LOOP

FINISH 
        HALT

ZERO     .FILL x5000   ;i chose a random rocation.I don't even know how to store a string in memory to run this program.

.END    ;do i need any ASCII-decimal transformation or something similar?

На самом деле, я думаю, что моя программа - кусок мусора. Это новая версия моей программы. Я полагаю, что X0000 - это конец строки. Я полный новичок в сборке LC3. Как я могу посчитать эту длину?


person user3697730    schedule 10.06.2015    source источник
comment
Вы должны прокомментировать свой код, особенно если вы хотите, чтобы другие помогли. Кроме того, сделайте один шаг в своем симуляторе и посмотрите, где что-то пойдет не так. Не забудьте сообщить нам, где именно вы застряли.   -  person Jester    schedule 11.06.2015
comment
Я только что загрузил новую версию своей программы с некоторыми комментариями   -  person user3697730    schedule 11.06.2015
comment
Не могли бы вы уточнить, результаты разочаровывают? Какие входные/выходные данные ожидаются для вашего кода и какой результат вы получили для конкретного ввода, который разочаровывает?   -  person lurker    schedule 11.06.2015
comment
Чтобы привести пример, если у меня есть шахматы на входе, на выходе должно быть 5. Если у меня есть Ceasar, на выходе должно быть 6. Результаты разочаровывают, потому что моя программа даже не компилируется.   -  person user3697730    schedule 11.06.2015


Ответы (1)


Чтобы определить строку, вы можете использовать директиву .STRINGZ, которая также ставит после нее завершающий ноль. Вы должны использовать BRNZP, потому что ассемблер явно не любит BRZNP. В остальном ваш код работает нормально.

person Jester    schedule 11.06.2015
comment
Ну, это решило мою проблему! Спасибо @Jester! Конечно, я хотел бы поблагодарить всех остальных за их помощь! - person user3697730; 11.06.2015