Строка загрузки сборки ARM производит странный вывод терминала

Я пытаюсь расширить свою строку, заменив каждый символ строкой пробела в сочетании со строкой подчеркивания, чтобы создать _ _ _ _.

Однако я получаю странный результат:
Строка загрузки сборки ARM производит странный вывод терминала

Если я загружаю 1 символ, например, ldr r1, = '_'
это работает, однако я получаю _____ и пытаюсь получить _ _ _ _ _. Как лучше всего это сделать?

ПРИМЕЧАНИЕ. Я не знаю C и новичок в ARM.

Моя функция:

sub r3, r0, #1 @has the length
    ldr r0, = buffer @has the word

    mov r5, #0 @start of increment
    mov r6, r0 @copies word to r6
loop:
     ldr r1, =spaceChar
     strb r1, [r6, r5]
     add r5, r5, #1
     cmp r3, r5
     bne loop
    mov r1,r6 
    ldr r0, = HiddenWord
    bl printf
    pop {r4,lr}
    bx lr
 
.data
 
    HiddenWord: 
        .asciz "Word: %s"
    spaceChar:
        .asciz " _"
    buffer:
        .space 100

112
1

Ответ:

Решено

Поскольку вы уже статически выделяете буфер, самое простое решение - установить его с помощью "_" с помощью вашего ассемблера и просто поместить завершающий ноль в нужное место. Я не думаю, что вы упомянули, какой ассемблер вы используете, в ассемблере gnu работает следующее:

    ldr r0, =buffer-1
    mov r1, #0
    strb r1, [r0, r3, lsl #1]

    ldr r0, =HiddenWord
    ldr r1, =buffer
    bl printf
    pop {r4,lr}
    bx lr
 
.data
 
    HiddenWord: 
        .asciz "Word: %s\n"
    buffer:
.rept 50
    .ascii "_ "
.endr

Если вы хотите заполнить буфер программно, это может выглядеть так:

    ldr r0, =buffer @has the word
    ldr r1, =0x205f @ underscore + space
loop:
    strh r1, [r0], #2
    subs r3, r3, #1
    bne loop
    mov r1, #0         @ replace final
    strb r1, [r0, #-1] @ space with zero