我正在尝试使用LC-3架构制作一个简单的程序。 我所要做的就是从控制台读取一个字符串,以某种方式将其保存在内存中,然后将其打印出来。
这就是我的目标
; This program attemps to read a string and then output it
.orig x3000
and r1,r1,0
lea r0,prompt
puts
loop:
getc
putc
add r4,r4,1
ld r7,nlcomp ; check for
add r7,r7,r0 ; end of line
brz finish
st r0,lets
br loop
finish:
lea r0,lets
puts
halt
lets: .blkw 20
prompt: .stringz "Emter String"
nlcomp .fill xfff6
.end
输出仅显示字符串中的最后一个字符。如果我要输入“史蒂夫”,它会打印出“e”
显然我的问题是我需要以某种方式将我读入的每个字符保存到自己的内存位置。我认为使用.blkw可以做到这一点,但显然它只会覆盖那个位置的位。
我的问题是如何将字符存储在顺序存储位置,然后将它们打印到控制台?
答案 0 :(得分:3)
您需要使用STR指令,它允许您进行基址偏移寻址。 STR的语法是:
STR <src register> <base register> <immediate offset>
因此,类似下面的内容将是有效的:
LEA R1,MEMORYSPACE ; saves the address of the storage memory block
loop:
GETC ; input character -> r0
PUTC ; r0 -> console
STR R0,R1,#0 ; r0 -> ( memory address stored in r1 + 0 )
ADD R1,R1,#1 ; increments the memory pointer so that it
; always points at the next available block
BR loop
MEMORYSPACE .blkw 100 ; declares empty space to store the string
答案 1 :(得分:0)
我根本不熟悉LC-3,但是当我读完你的代码时,我看到的一件事是你总是存储到'let'指向的地址而不是''指向的地址'让'加上一个偏移。由于这被标记为家庭作业,我会让你弄清楚如何做到这一点! :)