首页 > 解决方案 > 如何从 ARM 中的命令行计算字符串长度?

问题描述

我正在尝试获取通过 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

我究竟做错了什么?

标签: assemblyarm

解决方案


您在末尾缺少返回指令main,因此在函数结束时,CPU 只是继续执行内存中接下来的任何内容。没有办法预测这会产生什么影响,但它永远不会好!

您也不会弹出您推送的寄存器,您可以在返回的同时执行此操作,方法是将推送的值lr直接弹出到pc

POP {r4-r8,pc}

推荐阅读