LC3汇编-如何计算字符串长度

LC3 assembly-how to count string length

我正在尝试在 LC3 程序集上创建一个程序,该程序按以下方式计算字符串的长度:

  1. 所有数据都已存储在内存中的某处。
  2. 有一个变量,其中存储了字符串的第一个元素的地址。 (我为我缺乏汇编知识提前道歉,以防这个东西不叫"variable"。)
  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?

实际上,我猜我的程序是 garbage.This 的一部分是我的新版本 program.I 假设 X0000 是 string.I 的结尾 我是 LC3 汇编的初学者.我怎么算那个长度?

要定义一个字符串,您可以使用 .STRINGZ 指令,该指令还在其后放置终止零。您应该使用 BRNZP,因为汇编程序显然不喜欢 BRZNP。除此之外,您的代码工作正常。