안녕하세요 저는 교수님이 우리에게 남겨주고있는 몇 가지 예제 코드를 살펴 보았습니다. 일부 코드가 의미하는 바를 이해하는 데 몇 가지 문제가 있었지만 의견이 도움이되지 않습니다. 막연한. 첫 번째는 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