сохранение строки символов в сборке LC-3 - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь сделать простую программу с использованием архитектуры 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 сделает это, но, видимо, все, что он делает, переписывает биты, которые находятся в этой позиции.

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

Ответы [ 2 ]

3 голосов
/ 06 декабря 2013

Вам необходимо использовать инструкцию 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
0 голосов
/ 30 ноября 2011

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

...