LC3汇编-如何计算字符串长度
LC3 assembly-how to count string length
我正在尝试在 LC3 程序集上创建一个程序,该程序按以下方式计算字符串的长度:
- 所有数据都已存储在内存中的某处。
- 有一个变量,其中存储了字符串的第一个元素的地址。 (我为我缺乏汇编知识提前道歉,以防这个东西不叫"variable"。)
- 输出(字符串的长度)必须存储在 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
。除此之外,您的代码工作正常。
我正在尝试在 LC3 程序集上创建一个程序,该程序按以下方式计算字符串的长度:
- 所有数据都已存储在内存中的某处。
- 有一个变量,其中存储了字符串的第一个元素的地址。 (我为我缺乏汇编知识提前道歉,以防这个东西不叫"variable"。)
- 输出(字符串的长度)必须存储在 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
。除此之外,您的代码工作正常。