2015-03-17 2 views
-1

Привет, я пытаюсь объединить две строки.Как объединить две строки в сборке?

Я загружаю строки 1, 2, & 3. Мне нужно сохранить финальную строку в r2.

Я загружаю строки из памяти с помощью ldr, и я могу хранить их, используя str.

код

Каждый знают эффективный способ объединить их? Является ли их добавление, как я делаю выше, не так? Регистры ограничены одним байтом данных, поэтому, возможно, я делаю что-то еще не так.

Я noob.

+0

Можете ли вы написать concat в C? Он должен выглядеть очень похожим. – auselen

+0

Конкатенация строк не выполняется путем добавления, а путем перемещения (то есть загрузки и хранения) данных. У вашего 'STRING3' недостаточно места для хранения результата объединения 'STRING1' и' STRING2'. Кроме того, endianness не относится к конкатенации строк. – Michael

+0

максимальный размер для STRING3, который будет 300 символов, забыл упомянуть об этом. тогда комбинация STRING1 & STRING2 будет меньше или равна 300 байт. – user3721428

ответ

1

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

Кроме того, вы хотите хранить STRING1 и STRING2 в разделе .text (только для чтения постоянной памяти), в то время как STRING3 бы в секцию .data, так как она представляет собой буфер в оперативной памяти.

;Stings aren't \0 terminated (like in C) so we should deal with the size ourselves 

    mov r4, #STRING1_SIZE 
loop1: 
    ldrb r3, [r0], #1 ;Copy STRING1 to SRTRING3 
    strb r3, [r2], #1 
    subs r4, #1 
    bne loop1 

    mov r4, #STRING2_SIZE 
loop2: 
    ldrb r3, [r1], #1 ;Copy STRING2 to STRING3 
    strb r3, [r2], #1 
    subs r4, #1 
    bne loop2 

    ;done 
+0

Что касается endianness, это не имеет значения, пока вы не загрузите слова в виде байтов или байтов в качестве слова. – Bregalad