我不熟悉LC-3并且遇到了问题。我希望能够输入整个字符串,例如“Hello,我的名字是Connor”,当我按下回车键时,它会在控制台中回显。在我读到一个角色之前我已经做了一个问题,然后连续回声直到空间被按下,但是我不太确定如何完成一个完整的字符串然后在输入时回显它。让我开始的任何帮助?
我最终会看起来像这样(所有.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 :(得分: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