【问题标题】:LC3 assembly-how to count string lengthLC3汇编——如何计算字符串长度
【发布时间】:2015-06-10 23:53:41
【问题描述】:

我正在尝试在 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 汇编的初学者。这个长度怎么算?

【问题讨论】:

  • 您应该注释您的代码,尤其是如果您希望其他人提供帮助。此外,在你的模拟器中单步执行它,看看哪里出错了。不要忘记告诉我们您遇到的确切位置。
  • 我刚刚上传了我的程序的新版本和一些 cmets
  • 你能说得更具体些吗,结果令人失望?您的代码预期的输入/输出是什么?对于一个令人失望的特定输入,您得到了什么结果?
  • 举个例子,如果我有输入“chess”,输出应该是5。如果我有“Ceasar”,输出应该是6。结果令人失望,因为我的程序没有'甚至编译..

标签: string assembly lc3


【解决方案1】:

要定义字符串,您可以使用.STRINGZ 指令,该指令还会在其后放置终止零。您应该使用BRNZP,因为汇编器显然不喜欢BRZNP。除此之外,您的代码运行良好。

【讨论】:

  • 好吧,这解决了我的问题!谢谢@Jester!当然,我要感谢所有其他人的帮助!
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2021-03-04
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多