LC-3指令理解

嗨Stackoverflow我正在回顾一些我们的教授留给我们研究的示例代码,并且我在理解代码的一些含义时遇到了一些问题,并且它无助于他的一些评论模糊。第一个是R3,R1,0;检查行结束,我没有得到的第二件事实际上是placeolnul开始背后的逻辑,最后是negeol的.fill值,这似乎奇怪的具体,但我不知道为什么。如果你真的可以帮助我解决这些问题,它会帮助我更好地理解代码。LC-3指令理解

.orig x3000 

getstring:

lea r0,prompt ;get string prompt

puts

ld r1,negeol ;to test end of line

lea r2,rdbuff ;prep to read string

rdloop:

getc ;get string char

out

str r0,r2,0 ;store it

add r3,r1,r0 ;check for end of line

brz placeeolnul ;if so process

add r2,r2,1 ;ready for next char

br rdloop ;get it

placeeolnul:

and r0,r0,0 ;overwrite eol with

str r0,r2,0 ;nul

lea r1,rdbuff ;get address for len

jsr strlen ;get length

add r0,r0,0 ;if 0

brz quit ;then prog finished

trap xfc ;print length

lea r0,colon ;print colon

puts

lea r0,eol ;print lf

puts

br getstring ;go again

quit

halt

prompt: .stringz "Enter a string:"

eol: .fill x000d ; or x000a

.fill x0000

negeol: .fill xfff3 ; or xfff6

colon: .fill x003a

rdbuff .blkw 80

; length subroutine

strlen:

and r0,r0,0 ;counter for length

st r2,saveX2 ;save regs used

st r3,saveX3

add r2,r1,0 ;copy of string addr

cloop:

ldr r3,r2,0 ;get char

brz exit ;check for nul

add r0,r0,1 ;incr counter

add r2,r2,1 ;go to next char

br cloop ;process it

exit:

ld r2,saveX2 ;restore used regs

ld r3,saveX3

ret

saveX2: .blkw 1

saveX3: .blkw 1

.end

回答:

在关于这一点:

add r3,r1,r0 ;check for end of line 

在这里,他是建立在随后的 “BRZ” 对零分支。

所以我们增加寄存器R1和R0的内容,并将其放置于R3,因此,如果R3是零,我们将在下一行分支:

brz placeeolnul ;if so process 

记住,R1已经预装载有基于该代码值:

ld r1,negeol ;to test end of line 

已以每这个代码标签negeol加载R1与值:

negeol 

.fill xfff3 ; or xfff6

所以这只是一个快速的方法来检测是否通过添加EOL字符的恭维来发现EOL字符,这大概是xfff3。

关于BRZ语句和逻辑为它(你的第二个问题):

brz placeeolnul ;if so process 

如前所述,我们在这里分叉如果添加为零。如果我们不分支(意思是,我们没有找到一个EOL字符),那么我们将继续,但继续将基本上循环回rdloop标签:

add r2,r2,#1 ;ready for next char 

br rdloop ;get it

如果我们通过BRZ线跳,这意味着我们得到了整个字符串,我们已经准备好处理它....所以跳转到placeeolnul只是把我们带入了代码,我们可以处理字符串:

and r0,r0,#0 ;overwrite eol with 

str r0,r2,#0 ;nul

.... etc...

不知道,如果你有这部分的问题的代码。

希望这会有所帮助。

Jeff

以上是 LC-3指令理解 的全部内容, 来源链接: utcz.com/qa/259160.html

回到顶部