сохранение строки символов в сборке LC-3

Я пытаюсь сделать простую программу с использованием архитектуры 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

Вывод отображает только последний символ в строке. Если бы я ввел «стив», я бы распечатал «е».

Очевидно, моя проблема в том, что мне нужно каким-то образом сохранить каждый символ, который я читал, в свою собственную ячейку памяти. Я думал, что использование .blkw сделает это, но, по-видимому, все, что он делает, это перезаписывает биты, которые находятся в этой позиции.

МОЙ вопрос: как хранить символы в последовательных ячейках памяти, а затем распечатывать их на консоли?


person Cheesegraterr    schedule 30.11.2011    source источник


Ответы (2)


Вам нужно использовать инструкцию 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
person aqua    schedule 05.12.2013
comment
это работает. Только что попробовал. Вы сэкономили мне несколько часов разочарования. Спасибо. - person Madushan; 13.04.2014

Я вообще не знаком с LC-3, но когда я читаю ваш код, я вижу одну вещь: вы всегда сохраняете по адресу, на который указывает «позволяет», а не по адресу, на который указывает «позволяет» плюс смещение. Поскольку это помечено как домашнее задание, я дам вам понять, как это сделать! :)

person Dean Pucsek    schedule 30.11.2011