, 당신은 사용자로부터 문자를받은 후 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
에서 그들을 각각 넣어
오, 조립하지 않고이 작업을 수행해야합니다. 나는 사용할 수 있습니다. 채우기 –
조립하지 않고? C없이 말이니? –
나는 그것을 어떻게 말로 잘 모르겠다. 위의 내용을 수행 할 어셈블리,로드 및 실행을 위해 .fill 문 (및 .orig 및 .end 물론) 만 사용하여 .asm 파일을 만들어야합니다. –