Как рассчитать длину строки из командной строки в ARM? - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь получить длину строки, переданной через командную строку в ARM - следующий код работает, но затем возвращает ошибку core dumped:

.data
.balign 4
string_length: .asciz "String length is %d \n"

.text
.balign 4
.global main

main:
PUSH {r4-r8,lr}

MOV r4, r0
MOV r5, r1

MOV r6, #0
LDR r7, [r5, #4]

countSL:
        LDRB r0, [r7], #1
        CMP r0, #0
        ADDNE r6, r6, #1
        BNE countSL
LDR r0, address_of_string_length
MOV r1, r6
BL printf

address_of_string_length: .word string_length

Что я делаю не так?

1 Ответ

0 голосов
/ 12 ноября 2018

Вам не хватает инструкции возврата в конце main, поэтому в конце вашей функции ЦП просто продолжает выполнять все, что находится в памяти. Нет никакого способа предсказать, какой эффект это даст, но это никогда не будет хорошим!

Вы также не выталкиваете регистры, которые вы выдвинули, и вы можете сделать это одновременно с возвратом, вставив переданное значение lr непосредственно в pc:

POP {r4-r8,pc}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...