2015-06-10 36 views
0

我想创建在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? 

其实,我想,我的计划是一块garbage.This的是我program.I新版本假设X0000是string.I的结束是在LC3共初学者部件。我如何计算那个长度?

+0

你应该评论你的代码,特别是如果你想让别人帮忙。此外,单步它在你的模拟器,看看它出错的地方。不要忘记告诉我们你卡在哪里。 – Jester

+0

我刚刚上传了我的程序的新版本,带有一些意见 – user3697730

+0

您能比*更具体吗?*结果令人失望*?什么是您的代码预期的输入/输出,以及您得到什么结果为特定输入*令人失望*? – lurker

回答

1

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

+0

那么,这解决了我的问题!谢谢@Jester!当然,我想感谢所有其他人对他们的帮助! – user3697730