1

我正在尝试使用 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

输出仅显示字符串中的最后一个字符。如果我输入“steve”,它会打印出“e”

显然我的问题是我需要以某种方式将我读入的每个字符保存到它自己的内存位置。我认为使用 .blkw 会做到这一点,但显然它所做的一切都会覆盖该位置的位。

我的问题是如何将字符存储在连续的内存位置,然后将它们打印到控制台?

4

2 回答 2

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
于 2013-12-05T23:03:43.183 回答
0

我根本不熟悉 LC-3,但是当我阅读您的代码时,我看到的一件事是您总是存储到“lets”指向的地址,而不是“lets”指向的地址加上一个偏移量。由于这被标记为作业,我会让你弄清楚如何做到这一点!:)

于 2011-11-30T07:24:42.930 回答