2014-10-23 13 views
0

LC-3을 사용하는 것이 처음이고 문제가 있습니다. "Hello, my name is Connor"와 같은 전체 문자열을 입력 할 수 있기를 원하며 Enter 키를 누르면 콘솔에 에코됩니다. 나는 캐릭터를 읽은 다음 공간이 눌려 질 때까지 계속해서 그것을 반복했다. 그러나 나는 전체 문자열을 어떻게 완성 할 수 있었는지, 그리고 그것을 입력으로 되풀이 할 수는 없다. 나를 도울 수있는 도움이 필요 하신가요?LC-3 전체 문자열을 읽음. 누를 때 출력 됨

내가 (모든 .fill 명령)과 같을 것이다 끝낼 무엇 :

이전 문제에
.ORIG x3000  ; specify the "origin"; i.e., where to load in memory 

; machine instructions 
.FILL x2006 
.FILL x2206 
.FILL x0403 
.FILL xF021 
.FILL X127F 
.FILL x0FFC 
.FILL xF025 
.FILL x005A 
.FILL x0064 

.END 
+0

오, 조립하지 않고이 작업을 수행해야합니다. 나는 사용할 수 있습니다. 채우기 –

+0

조립하지 않고? C없이 말이니? –

+0

나는 그것을 어떻게 말로 잘 모르겠다. 위의 내용을 수행 할 어셈블리,로드 및 실행을 위해 .fill 문 (및 .orig 및 .end 물론) 만 사용하여 .asm 파일을 만들어야합니다. –

답변

1

, 당신은 사용자로부터 문자를받은 후 OUT을위한 함정을 호출 할 수 있었다. 사용자로부터 새로운 줄까지 문자열 전체를 읽으려면 각 줄이 새 줄을 입력 할 때까지 메모리에 각 문자를 저장 한 다음 PUTS에 대한 함정을 호출해야합니다.

당신이 아직까지 당신의 코스에 들어갈 지 모르겠지만, 우선 어셈블리 아이디어를 작성하기 위해 프로그램을 작성했습니다.

MAIN 
    LEA r1, INPUT  ; r1 = address of input 

PROMPT 
    TRAP x20   ; getc, r0 = character input 
    STR r0, r1, #0  ; mem[r1 + INPUT] = r0 
    ADD r1, r1, #1  ; r1 = r1 + 1 
    ADD r0, r0, #-10 ; r0 = r0 - new line 
    BRnp PROMPT   ; branch if r0 != 0 

END 
    ADD r1, r1, #-1  ; subtract one from r1 
    STR r0, r1, #0  ; mem[r1 + INPUT] = r0 (which is zero) 
    LEA r0, input  ; r0 = address of input 

    TRAP x22   ; puts, display string 
    TRAP x25   ; halt 

; data segment 
INPUT .BLKW 64 

그리고, 단지 라인으로 라인을 이동하고 바이너리에 직접 지시를 만들 : 마지막으로 다음

.ORIG x3000 

; main 
    1110 001 000001010  ; lea r1, INPUT 

; prompt 
    1111 0000 x20   ; TRAP x20, halt 
    0111 000 001 000000  ; STR r0, r1, #0 
    0001 001 001 1 00001 ; ADD r1, r1, #1 
    0001 000 000 1 10110 ; ADD r0, r0, #-10 
    0000 101 111111011  ; BRnp PROMPT (jump -5 if zero) 

; end 
    0001 001 001 1 11111 ; ADD r1, r1, #-1 
    0111 000 001 000000  ; STR r0, r1, #0 
    1110 000 000000010  ; LEA r0, input (+ 2) 

    1111 0000 x22   ; TRAP x22, puts 
    1111 0000 x25   ; TRAP x25, halt 

.BLKW 64     ; input 
.END 

을 그리고, 진수로 사람들을 변환하여 .FILL

.ORIG x3000 

; main 
    .FILL xE20A 

; prompt 
    .FILL xF020 
    .FILL x7040 
    .FILL x1261 
    .FILL x1036 
    .FILL x0BFB 

; end 
    .FILL x127F 
    .FILL x7040 
    .FILL xE002 

    .FILL xF022 
    .FILL xF025 

; data 
.BLKW 64 

.END 
에서 그들을 각각 넣어