Я пытаюсь расширить свою строку, заменив каждый символ строкой пробела в сочетании со строкой подчеркивания, чтобы создать _ _ _ _
.
Однако я получаю странный результат:
Если я загружаю 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
Поскольку вы уже статически выделяете буфер, самое простое решение - установить его с помощью "_" с помощью вашего ассемблера и просто поместить завершающий ноль в нужное место. Я не думаю, что вы упомянули, какой ассемблер вы используете, в ассемблере 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